无法找到接受参数的位置参数
问题描述:
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
帮助文件