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:
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?
Ok, ich denke ich verstehe das. Die möglichen Kombinationen sind:
-RetainGroups
-RemoveFromAllGroups
-RetainGroups
plus -TransferHomeDrive
-RemoveFromAllGroups
plus -TransferHomeDrive
-UserName
-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%
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.
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:
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:
Tags und Links powershell