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 admin@admin.com
Error :
A positional parameter cannot be found that accepts argument '-Autostart'.
+ CategoryInfo : InvalidArgument: (:) [New-MigrationBatch], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,New-MigrationBatch
+ PSComputerName : ps.outlook.com
如果我直接输入它的工作但是作为变量抛出错误传递。
答案 0 :(得分:4)
如果要选择性地指定参数,请使用splatting:
$OptionalParameters = @{
AutoStart = $mbcb1.Checked
AutoComplete = $mbcb2.Checked
}
if ($mbcb3.Checked) {
$OptionalParameters["NotificationEmails"] = 'admin@admin.com'
}
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
有关参数splatting的详细信息,请参阅about_Splatting
帮助文件