Jump to content

Recommended Posts

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

 

Edited by scbe

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Je nach was die Anforderung ist und welche Hilfestellung wirklich gebraucht wird benutze ich das Ein oder eben das Andere. Gerne nutze die kurze Hilfestellung, damit ich kurz und prägnant weiß welche Daten in dem Parameter wirklich übergeben werden muss.

Share this post


Link to post
Share on other sites
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

 

Share this post


Link to post
Share on other sites

Das andere ist auch der Microsoft Weg.

Du kannst das ganze wie bei allen Scripten mit

get-help ./scriptname

und die entsprechenden Parameter -full, -example,... aufrufen.

get-help ./scriptname -full

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Werbepartner:



×
×
  • Create New...