otaris
Goto Top

Paramterübergabe an PowerShell Script

Hallo zusammen,

ich habe ein wenig mit PowerShell herumexperimentiert und bräuchte nun eine kleine Hilfestellung, da ich nicht mehr weiterkomme:


Per PS Befehl möchte ich die Beschreibung (eingetragenes Datum) der Useraccounts auslesen, dazu habe ich mir folgendes erarbeitet:

Get-ADUser -properties * -Filter 'Description -like "**.01.*"' | FT Name, Description


Das klappte auch soweit ganz gut und ich habe den Befehl in ein Script importiert, dass ich dann per CMD aufrufen kann

Script:

  1. Active-Directory-Befehle (AD-Modul) in PowerShell laden
Import-Module ActiveDirectory

  1. Variable für Zeilenumbruch definieren
$nL = [Environment]::NewLine

Get-ADUser -properties * -Filter 'Description -like "**.01.*"' | FT Name, Description


Der Aufruf per CMD erfolgt dann folgendermaßen: powershell.exe -command C:\test.ps1
Auch das funktioniert wunderbar.


Nun möchte ich im nächsten Schritt beim Aufruf des Scripts meinen Filter ändern.

Dazu wäre es mir am liebsten, wenn ich das Script mit dem Parameter JAN aufrufe, soll folgender Befehl ausgeführt werden:
Get-ADUser -properties * -Filter 'Description -like "**.01.*"' | FT Name, Description

Mit dem Parameter FEB soll folgender Befehl ausgeführt werden:
Get-ADUser -properties * -Filter 'Description -like "**.02.*"' | FT Name, Description

etc...

An dieser Stelle komme ich aber nicht mehr weiter. Geht das überhaupt? Wenn ja, wie?
Muss ich dann jeden einzelnen Befehl im Script als Variable definieren, oder kann ich auch nur die eine Zahl die geändert werden soll als Variable definieren?

Für ein wenig Hilfe wäre ich dankbar.

Content-ID: 227386

Url: https://administrator.de/contentid/227386

Ausgedruckt am: 17.11.2024 um 00:11 Uhr

colinardo
Lösung colinardo 22.01.2014 aktualisiert um 13:28:22 Uhr
Goto Top
Hallo Otaris,
kein Problem, die Parameterübergabe machst du so: (Dabei ist wichtig das param() in der ersten Zeile des Scriptes stehen muss)
param (
    [String] $par1
)
$filter = ""  
switch($par1.ToUpper()){
    "JAN"{ $filter = "*.01.*"}  
    "FEB"{ $filter = "*.02.*"}  
    # usw. ...
    # im Falle das kein passender Wert angegeben wurde setze einen Default-Filter
    default {$filter = "*"}  
}
Get-ADUser -Filter "Description -like '$filter'" -properties * | ft Name, Description  
Dein Script rufst du dann aus deiner CMD-Shell so auf:
powershell.exe -noexit C:\test.ps1 'JAN'
Grüße Uwe
Otaris
Otaris 22.01.2014 um 13:15:11 Uhr
Goto Top
Hallo Uwe,

Vielen Dank schonmal für deine Unterstützung.
Hab es mal probiert, aber so ganz klappt es noch nicht.
Wenn ich das Script auch direkt in PS aufrufe erhalte ich immernoch eine Fehlermeldung und eine Abfrage nach dem Parameter.


8dfe226ad8f22b04b9271e6ee0f0c396


Würdest du mich da nochmal unterstützen?
colinardo
Lösung colinardo 22.01.2014 aktualisiert um 13:28:20 Uhr
Goto Top
Zitat von @Otaris:

Hallo Uwe,

Vielen Dank schonmal für deine Unterstützung.
Hab es mal probiert, aber so ganz klappt es noch nicht.
Wenn ich das Script auch direkt in PS aufrufe erhalte ich immernoch eine Fehlermeldung und eine Abfrage nach

Würdest du mich da nochmal unterstützen?
ahh sorry, habe den -Filter Parameter vergessen, habs oben korrigiert ....

Grüße Uwe
Otaris
Otaris 22.01.2014 um 13:28:16 Uhr
Goto Top
Jetzt klappt es. Super! Vielen Dank!