2017-07-21 5 views
0

Ich entwickle ein Skript, mit dem AD-Benutzerkonten in PowerShell deaktiviert und viele andere Funktionen ausgeführt werden.PowerShell-Probleme - Verwenden von Funktionen mit Parametern

Ich wollte das Skript die Option von Bulk-Modus oder Single-Modus geben. Sobald Sie beispielsweise das Skript ausführen, wird ein Parameter erzwungen, der Sie fragt, ob Sie das Skript im Einzelmodus oder im Massenmodus ausführen möchten. Wenn der Bulk-Modus ausgewählt ist, sollte er die bereits definierte Funktion BULKmode laden und eine CSV-Datei importieren.

Wenn der Einzelmodus ausgewählt ist, wird er im Einzelmodus ausgeführt und wählt die Funktion Singlemode.

Das Problem mit PowerShell ist jedoch, dass sowohl Parameter als auch Funktionen an der Spitze des Skripts stehen. Ich habe beide Aufträge ausprobiert und die Fehler, die ich erhalten, wenn ich die Funktionen setzen, bevor der Parameter ist, dass es

kein solcher Begriff wie param

ist, wenn ich den Parameter setzen zuerst, dann lädt er den Parameter aber dann sagt

keine solche Funktion

Im Folgenden ein Ausschnitt ist

Param(
[Parameter (Mandatory=$true)] 
[String]$PressYforBulkMode) 

If ($PressYforBulkMode -eq "Y") { 
Bulkmode 
} 

Else { 
Singlemode 
} 
+0

Hoffnung macht den Sinn, bitte beraten, wenn Sie weitere Informationen – Figo

+0

Das klingt wie etwas, das besser mit zwei Parametersätzen umgesetzt werden könnte. Ein Parametersatz nimmt unter anderem ein Array (wahrscheinlich) von 'SamAccountName' an. Der andere Parametersatz enthält unter anderem einen einzigen Dateinamen. –

Antwort

1

Die beste Lösung ist Ihre Funktionen auseinander zu brechen, so dass Sie nur eine Schleife verwenden können, um die Funktion zu nutzen, die die eigentliche Arbeit erledigt.

Der Weg, dies zu tun wäre, Ihre Informationen in die Hauptfunktion als ein Array zu übergeben. Wenn Sie einen Eintrag oder mehrere Einträge haben, ist das egal. Verwenden Sie dann foreach, um das Array durchzulaufen und die Funktion aufzurufen, die das AD-Konto und alle anderen erforderlichen Aktionen tatsächlich deaktiviert.

Dies würde bedeuten, dass Sie nie nach "Bulk" oder "Single" Modus suchen müssten. Es würde einfach funktionieren.

Beispiel:

function MainFunction 
{ 
param (pass in array here) 

    foreach(entry in $myArray) 
    { 
     DoWork $entry 
    } 
} 

function DoWork 
{ 
    //do things here 
} 
0

Es scheint, dass Sie für die Benutzereingabe aufgefordert werden soll. Ich ziehe Parameter verwenden, aber wenn Sie zur Eingabe auffordern wollen, versuchen Sie dies:

Function BulkMode 
{ 
    "Running BulkMode" 
} 

Function SingleMode 
{ 
    "Running SingleMode" 
} 


$Input = Read-Host "Press Y for BulkMode" 

if ($Input -eq "Y") 
{ 
    Bulkmode 
} 

else 
{ 
    SingleMode 
} 
Verwandte Themen