3 ayrı parametre kümesine sahip olacak bir işlev yapıyorum, bu kümelerden 2'si üçüncü ile çakışacak. seçenekler şu şekilde görünecektir:Powershell: Birden çok parametre kümesi
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
)
}
fonksiyonun amacı aktarılması işlemini otomatik şudur:
A B
A C
A (D E F)
A B (D E F)
A C (D E F)
biraz daha net, burada fonksiyon kısmen tamamlanmış versiyonu yapmak için şirket içinde başka bir yere bir AD hesabı. RetainGroups
, ayarlandığında kullanıcı gruplarını otomatik olarak saklar, RemoveFromAllGroups
, kullanıcıyı gruplarından otomatik olarak kaldırır. İki anahtar birlikte kullanılmamalıdır. Ayrıca, TransferHomeDrive
ayarlanmışsa, dahili bir araç kullanarak aktarımı zamanlamak için bir işlev çağırır.
RetainGroups
ve
RemoveFromAllGroups
(
Username
benzer) tüm parametre setlerinin bir üyesi olması gerektiğini Diğer bir deyişle, ancak birlikte kullanılmak üzere mümkün olmamalıdır.
İki yolu denedim. İlk:
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
)
}
Bu tekniği kullanarak, muhafaza ve birlikte kullanılamaz kaldırmak, ancak OldServer
ve NewServer
artık zorunludur. Ben bunları değiştirirseniz:
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[Parameter(ParameterSetName='RetainGroups', Mandatory=$True)]
[string]$OldServer,
[Parameter(ParameterSetName='TransferHomeDrive', Mandatory=$True)]
[Parameter(ParameterSetName='RetainGroups', Mandatory=$True)]
[string]$NewServer
Onlar zorunlu olacak, ama artık TransferHomeDrive
ayarlanmış olup olmadığını umursamıyor.
Ters yönde kurmak ise:
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
)
}
Sonra OldServer
ve NewServer
zorunlu olacak, ancak RetainGroups
ve RemoveFromAllGroups
birlikte kullanılabilir. Ayrıca, birlikte tutup kaldırmayı kullanırsam OldServer
ve NewServer
zorunludur, ancak kendi başlarına kullanılmadıklarında olmaz.
Bu işin nasıl yapıldığına dair herhangi bir öneriniz var mı?
Şu anda tüm bu ayrıştırma, ama gerçekten parametre kümeleri kullanarak yardımcı olur PowerShell Parametreniz setleri nasıl yorumladığı konusunda size göstermek için fonksiyonları üzerine 'Get-Help' kullanmaktır am . Bunu yaptığınız yapılandırmaların her biri için yapabilir ve çıktıyı cevabınıza göre düzenleyebilirseniz, bu gerçekten yardımcı olacaktır. – briantist
Harika bir soru, teşekkürler! –