Powershell: Mehrere Parametersätze

9

Ich baue eine Funktion, die 3 verschiedene Parametersätze haben wird, 2 dieser Sätze werden sich mit dem dritten überschneiden. Die Optionen würden wie folgt aussehen:

%Vor%

Um es etwas deutlicher zu machen, hier ist eine teilweise abgeschlossene Version der Funktion:

%Vor%

Der Zweck der Funktion besteht darin, den Prozess der Übertragung eines AD-Kontos an einen anderen Ort innerhalb des Unternehmens zu automatisieren. RetainGroups behält automatisch die Benutzergruppen bei, wenn sie gesetzt sind. RemoveFromAllGroups würde den Benutzer automatisch aus seinen Gruppen entfernen. Die zwei Schalter sollten nicht in der Lage sein, zusammen verwendet zu werden. Wenn TransferHomeDrive festgelegt ist, wird außerdem eine Funktion aufgerufen, um eine Übertragung mit einem internen Tool zu planen.

Um es anders auszudrücken, RetainGroups und RemoveFromAllGroups sollten ein Mitglied aller Parametersätze sein (ähnlich wie Username ), sollten aber nicht zusammen verwendet werden können.

Ich habe zwei Möglichkeiten ausprobiert. Der erste:

%Vor%

Bei dieser Technik können Retain und Remove nicht zusammen verwendet werden, aber OldServer und NewServer sind nicht mehr obligatorisch. Wenn ich sie zu ändern:

%Vor%

Sie sind obligatorisch, aber es ist nicht mehr wichtig, ob TransferHomeDrive gesetzt ist.

Wenn ich den umgekehrten Weg einnehme:

%Vor%

Dann sind OldServer und NewServer obligatorisch, aber RetainGroups und RemoveFromAllGroups können zusammen verwendet werden. Wenn ich retain und remove zusammen verwende, dann werden OldServer und NewServer obligatorisch, aber nicht, wenn sie einzeln verwendet werden.

Irgendwelche Vorschläge, wie dies funktioniert?

    
RyanL 12.05.2015, 23:05
quelle

2 Antworten

13

Ok, ich denke ich verstehe das. Die möglichen Kombinationen sind:

  1. -RetainGroups
  2. -RemoveFromAllGroups
  3. -RetainGroups plus -TransferHomeDrive
  4. -RemoveFromAllGroups plus -TransferHomeDrive
  5. Nur -UserName
  6. -UserName plus -TransferHomeDrive

Ich gehe davon aus, dass -OldServer und -NewServer nur beim Verschieben des Home-Laufwerks gelten. Wenn Sie also das Home-Laufwerk verschieben, sind sie obligatorisch. Wenn das nicht der Fall ist, lass es mich wissen.

Sie haben also 6 Parametersätze . So mächtig Powershells Parametersatz magic ist, es gibt keine gute Möglichkeit zu sagen "diese beiden Schalter schließen sich gegenseitig aus, sollten aber auch in allen Parametersätzen verfügbar sein". Sie müssen also multiplexen und jeden Parametersatz mit einem oder dem wiederholen andere.

%Vor%

Die Ausgabe von Get-Help Move-AccountOut :

%Vor%

Vereinfachung

Wenn Sie es weniger beängstigend machen möchten, sollten Sie in Erwägung ziehen, die Schalter zum Entfernen und Zurückhalten in einen einzigen Parameter zu konsolidieren, etwa so:

%Vor%

Dies würde Ihre Parametersätze auf 2 reduzieren und Ihre gesamte Definition wie folgt aussehen lassen:

%Vor%

Mit dem folgenden Get-Help output:

%Vor%

Ich möchte darauf hinweisen, dass, obwohl es einfacher ist define zu definieren, dies nicht bedeutet, dass es besser ist. Es kann sein, dass Sie Ihre Parametersätze für den Aufrufer optimieren möchten, was besonders wichtig sein kann, wenn Sie eine Funktion verwenden, die viel von der Shell interaktiv verwendet, anstatt von anderen Skripten (und es scheint, dass dies der Fall sein könnte).

Es könnte also das Richtige sein, etwas Komplexität in die Definition aufzunehmen, um sie einfacher zu machen.

    
briantist 13.05.2015 00:17
quelle
7

Durch Hinzufügen von zwei weiteren Parametersätzen können Sie tun, was Sie wollen. Dies wird benötigt, weil Sie jetzt 3 Sets haben, plus einen nicht gesetzten Parameter (der es technisch in den __AllParameterSets setzt, wenn ich mich recht erinnere). Das sind also vier Möglichkeiten. Du benötigst 6 Wege, es zu tun, wenn ich deine Frage richtig lese. Sie möchten alle folgenden Optionen:

%Vor%

Wir fügen also die Parametersätze RemoveFromAllGroupsWTran und RetainGroupsWTran hinzu, fügen sie beide zu $TransferHomeDrive , $OldServer und $NewServer hinzu (entfernen die anderen Namen verwandter Mengen aus ihnen) und fügen sie dann jeweils zu ihr hinzu entsprechender Schalterparameter. Es sieht so aus:

%Vor%     
TheMadTechnician 13.05.2015 00:59
quelle

Tags und Links