2017-08-16 59 views
3
if ($mbcb1.Checked -eq $true) {$dgr = "-AutoStart"} 

if ($mbcb2.Checked -eq $true) {$dgrc = "-AutoComplete"} 

if ($mbcb3.Checked -eq $true) {$dgren = "-NotificationEmails"} 

New-MigrationBatch -Name $mbnd -SourceEndpoint $mbcx -TargetDeliveryDomain $mbtdd -CSVData ([System.IO.File]::ReadAllBytes("$cmbcsvfile")) $dgr $dgrc $dgren [email protected] 


Error : 
A positional parameter cannot be found that accepts argument '-Autostart'. 
    + CategoryInfo   : InvalidArgument: (:) [New-MigrationBatch], ParameterBindingException 
    + FullyQualifiedErrorId : PositionalParameterNotFound,New-MigrationBatch 
    + PSComputerName  : ps.outlook.com 

如果我直接輸入它的工作,但作爲變量拋出錯誤傳遞。無法找到接受參數的位置參數

回答

4

如果要選擇指定的參數,使用潑灑:

$OptionalParameters = @{ 
    AutoStart = $mbcb1.Checked 
    AutoComplete = $mbcb2.Checked 
} 
if ($mbcb3.Checked) { 
    $OptionalParameters["NotificationEmails"] = '[email protected]' 
} 

New-MigrationBatch -Name $mbnd -SourceEndpoint $mbcx -TargetDeliveryDomain $mbtdd -CSVData ([System.IO.File]::ReadAllBytes("$cmbcsvfile")) @OptionalParameters 

我們只是建立一個與參數名及其參數的哈希表,然後將其提供給cmdlet作爲參數(但像@name代替$name),然後解析器會將散列表中的每個條目轉換爲形式爲-key:value的命名參數。
最後,$mbcb3.Checked -eq $true比較是多餘的,因爲Checked(假設$mbcb3是一個複選框)已經是要麼$true$false

請參閱有關參數潑灑

更多細節 about_Splatting幫助文件
相關問題