मैं एक फ़ंक्शन का निर्माण कर रहा हूं जिसमें 3 अलग पैरामीटर सेट होंगे, उनमें से 2 सेट तीसरे के साथ ओवरलैप होंगे। विकल्प इस प्रकार दिखाई देगा:पावरहेल: एकाधिक पैरामीटर सेट
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
)
}
समारोह के प्रयोजन के हस्तांतरण की प्रक्रिया को स्वचालित करने के लिए है:
A B
A C
A (D E F)
A B (D E F)
A C (D E F)
यह थोड़ा और अधिक स्पष्ट, यहाँ एक आंशिक रूप से पूरा संस्करण समारोह है बनाने के लिए एक एडी खाता कंपनी के भीतर किसी अन्य स्थान पर। 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
महान सवाल, धन्यवाद! –