无法找到接受参数的位置参数

问题描述:

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 

如果我直接输入它的工作,但作为变量抛出错误传递。无法找到接受参数的位置参数

如果要选择指定的参数,使用泼洒:

$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帮助文件