我正在構建一個函數,它將有3個不同的參數集,其中2個將與第三個參數集重疊。該方案是這樣的:Powershell:多個參數集
A B
A C
A (D E F)
A B (D E F)
A C (D E F)
爲了讓更多一點清楚,這裏是一個部分完成版本的功能:
function Move-AccountOut {
[CmdletBinding(DefaultParameterSetName='NoTransferHomeDrive')]
Param(
[Parameter(Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)]
[string]$Username,
[Parameter(ParameterSetName='RetainGroups')]
[switch]$RetainGroups,
[Parameter(ParameterSetName='RemoveFromAllGroups')]
[switch]$RemoveFromAllGroups,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$False)]
[switch]$TransferHomeDrive,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[string]$OldServer,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[string]$NewServer
)
}
該功能的目的是自動轉移的過程將AD賬戶轉出到公司內的其他地點。 RetainGroups
會在設置時自動保留用戶組,RemoveFromAllGroups
會自動將用戶從他們的組中刪除。兩臺交換機不能一起使用。另外,如果TransferHomeDrive
已設置,它將調用一個函數來使用內部工具安排傳輸。
換句話說,RetainGroups
和RemoveFromAllGroups
應該是所有參數集(類似於Username
)的成員,但不能一起使用。
我試過兩種方法。第一:
function Move-AccountOut {
[CmdletBinding(DefaultParameterSetName='NoTransferHomeDrive')]
Param(
[Parameter(Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)]
[string]$Username,
[Parameter(ParameterSetName='RetainGroups')]
[switch]$RetainGroups,
[Parameter(ParameterSetName='RemoveFromAllGroups')]
[switch]$RemoveFromAllGroups,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$False)]
[Parameter(ParameterSetName='RetainGroups')]
[Parameter(ParameterSetName='RemoveFromAllGroups')]
[switch]$TransferHomeDrive,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[Parameter(ParameterSetName='RetainGroups')]
[Parameter(ParameterSetName='RemoveFromAllGroups')]
[string]$OldServer,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[Parameter(ParameterSetName='RetainGroups')]
[Parameter(ParameterSetName='RemoveFromAllGroups')]
[string]$NewServer
)
}
使用這種技術,保留和刪除不能一起使用,但OldServer
和NewServer
不再是強制性的。如果我將其更改爲:
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[Parameter(ParameterSetName='RetainGroups', Mandatory=$True)]
[string]$OldServer,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[Parameter(ParameterSetName='RetainGroups', Mandatory=$True)]
[string]$NewServer
他們將是強制性的,但它不再關心TransferHomeDrive
是否設置。
如果我把它相反的方式:
function Move-AccountOut {
[CmdletBinding(DefaultParameterSetName='NoTransferHomeDrive')]
Param(
[Parameter(Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)]
[string]$Username,
[Parameter(ParameterSetName='RetainGroups')]
[Parameter(ParameterSetName='TransferHomeDrive')]
[switch]$RetainGroups,
[Parameter(ParameterSetName='RemoveFromAllGroups')]
[Parameter(ParameterSetName='TransferHomeDrive')]
[switch]$RemoveFromAllGroups,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$False)]
[switch]$TransferHomeDrive,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[string]$OldServer,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[string]$NewServer
)
}
然後OldServer
和NewServer
將是強制性的,但RetainGroups
和RemoveFromAllGroups
可以一起使用。此外,如果我使用保留並一起刪除,則OldServer
和NewServer
將成爲強制性的,但不會在它們單獨使用時使用。
關於如何使這項工作的任何建議?
我目前解析了這一切,但真正幫助使用參數集是用'GET-Help'你的功能向您展示PowerShell是如何解釋您的參數集。如果你可以爲你嘗試的每一種配置都做到這一點,然後編輯輸出到你的答案中,這將是非常有用的。 – briantist
偉大的問題,謝謝! –