Jump to content

PowerShell - Hilfe im Script implementieren


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Leute,

guten Tag erstmal. Hab' mich eben erst angemeldet, bin also der Neue.. :o)

 

Ich möchte Euch mal fragen, wie Ihr sowas macht und was ggf. als der Beste Weg erachtet wird.

 

Im PowerShell bin ich noch recht neu, es fehlt noch an Erfahrung!

Ich schreibe eine Menge PowerShell Scripte, welche im Monitoring mit Nagios/Icinga2 von Windows Servern zum Einsatz kommen. Fast alle diese Scripte erwarten bestimmte Argumente beim Aufruf wobei jedes Argument verschiedene Parameter haben kann, ohne die sie nicht funktionieren können.

Nun weiß ja der User, welcher das Monitoring einrichtet, nicht unbedingt welche Argumente erwartet werden. In die Scripte kann er aber auch nicht reinschauen, weil die auf dem Server liegen und er da gar nicht rankommt.

Jetzt möchte ich eine einheitliche "Hilfe" im Script hinterlegen, welche z.B. mit einem Argument "-help ?" abgerufen werden kann.

Diese Hilfe sollte die zu übergebenden Argumente und deren mögliche Parameter enthalten.

 

Wie macht Ihr sowas? Welche Möglichkeiten gibt es hier?

 

Vorab vielen Dank

Grüße

 

bearbeitet von scbe
Link zu diesem Kommentar
vor einer Stunde schrieb Dukel:

Hier kann man aber wohl nur eine Hilfezeile angeben und nicht die komplexen Hilfen mit Beispielen und Ein/Ausgabe.

Hallo Dukel, MurdocX,
super, danke erstmal.

Ich würde für meine Scripte den "Microsoft Weg"

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_functions_advanced_parameters?view=powershell-6

gehen.

Allerdings hab' ich noch nicht ganz verstanden, wie ich das dann aufrufe.

 

Folgendes lege ich im Script an:

<#
.Parameter Arg
string - date, time, datetime, day, dayname, dayshortname, month, monthname, monthshortname, year, hour, minute, second, uptime, timezone 
.Parameter warn
string - warning treshold
.Parameter crit
string - critical treshold
.EXAMPLE
/usr/lib/nagios/plugins/check_nrpe -t 50 -H <HOSTNAME.DOMAIN> -c check_win_datetime -a timezone
#>

param(
[string]$Arg = "uptime",
[string]$warn = 0,
[string]$crit = 0
)

Ich habe 3 Parameter, welche erwartet werden.

Für jeden dieser Parameter habe ich ein ".Parameter" angelegt.

 

Wie rufe ich nun das Script auf, um die entsprechende Zeile(n) zu bekommen.

Letztenlich will ich alle auf einmal haben.

 

DANKE

 

Link zu diesem Kommentar

Einen kleinen Vorschlag möchte ich bringen: 

param(
[string]$Arg = "uptime",
[string]$warn = 0,
[string]$crit = 0
)

würde ich eher in:

param(
[string]$Arg = "uptime",
[int]$warn = 0,
[int]$crit = 0
)

ändern.

 

Denn 0 ist eher ein Integer, als ein String. ($warn, $crit) Hier kannst du mehr Klarheit und weniger Fehleranfälligkeit in dein Skript bringen. Auch würde ich die Variablen ausschreiben. Es kann nicht schaden, Dir und Anderen mehr Sicherheit im Umgang mit den Paramentern bringen. Vielleicht schaut man das Skript in 2 Jahren das nächste Mal erst an.

 

Ergänzung

Alternativ, falls diese Parameter nur 0 oder 1 können (True, False), solltest du einfach [switch] verwenden.

param
(
	[string]$Arg = 'uptime',
	[switch]$Warning,
	[switch]$Critical
)

Wobei das auch nochmal vereinfacht werden kann.

[Parameter(Mandatory,HelpMessage='Aktueller Sicherheitsstatus (Warning,Critical) wird erwartet.')]
[ValidateSet('Warning','Critical')]
[string]
$Status

 

Link zu diesem Kommentar
Gerade eben schrieb MurdocX:

Einen kleinen Vorschlag möchte ich bringen: 


param(
[string]$Arg = "uptime",
[string]$warn = 0,
[string]$crit = 0
)

würde ich eher in:


param(
[string]$Arg = "uptime",
[int]$warn = 0,
[int]$crit = 0
)

ändern.

 

Denn 0 ist eher ein Integer, als ein String. ($warn, $crit) Hier kannst du mehr Klarheit und weniger Fehleranfälligkeit in dein Skript bringen. Auch würde ich die Variablen ausschreiben. Es kann nicht schaden, Dir und Anderen mehr Sicherheit im Umgang mit den Paramentern bringen. Vielleicht schaut man das Skript in 2 Jahren das nächste Mal erst an.

So, jetzt hab' ich's! vielen Dank Euch beiden.

 

<#
.Parameter Arg

string - date, time, datetime, day, dayname, dayshortname, month, monthname, monthshortname, year, hour, minute, second, uptime, timezone 

.Parameter warn

string - warning treshold

.Parameter crit

string - critical treshold

.EXAMPLE

/usr/lib/nagios/plugins/check_nrpe -t 50 -H <HOSTNAME.DOMAIN> -c check_win_datetime -a timezone

.EXAMPLE

/usr/lib/nagios/plugins/check_nrpe -t 50 -H <HOSTNAME.DOMAIN> -c check_win_datetime -a -Arg uptime -warn 60 -crit 80
#>


param(
[string]$Arg = "uptime",
[string]$warn = 0,
[string]$crit = 0
)

Aufruf dann so:

Get-Help .\<scriptname> -Full
# oder z.B.:
Get-Help .\<scriptname> -Parameter Arg
# oder z.B.:
Get-Help .\<scriptname> -Examples

@MurdocX

Du hast natürlich, wenn alles "normal" wäre :o) Recht. Es sieht in meinem Beispiel eher nach Integern aus.

In er Tat ist es aber so, dass es bei Argumenten "warn" und "crit" auch Strings übergeben werden können, je nach "Arg".

Ist also so gewollt und wird im Script entsprechend verarbeitet.

 

Nochmals vielen Dank an alle..

Bernd

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...