$cmdlet="Disable-RemoteMailBox"
$arguments = @{Identity=$identity;DomainController=$domaincontroller;Archive=""}
$command_args=""
$arguments.keys | ForEach-Object{
$message = '-{0} {1} ' -f $_, $arguments[$_]
$command_args+= $message
}
$result=& $cmdlet @arguments 2>&1最后将执行以下操作:
Disable-RemoteMailBox -Identity abc@corp.com -DomainController dc.corp.local -Archive 但我需要加一个确认:$false
Disable-RemoteMailBox -Identity abc@corp.com -DomainController dc.corp.local -Archive -Confirm:$false如何在哈希表中添加这个$false?
发布于 2021-08-18 12:13:56
从以下位置更改$arguments哈希表:
$arguments = @{Identity=$identity;DomainController=$domaincontroller;Archive=""}至
$arguments = @{Identity=$identity;DomainController=$domaincontroller;Archive="";Confirm=$false}发布于 2021-08-18 13:03:32
添加到马蒂亚斯的简明答案中
除了确认功能与$ConfirmPreference首选项变量的集成外,-Confirm公共参数可以看作是一个简单的开关参数。它要么存在,要么不存在。但是,PowerShell的内部类型转换引擎将评估一个[Switch],更像一个[Boolean],如果您将[Bool]转换为[Switch],您可以看到这一点。
[Switch]$true或[Switch]$false将分别返回IsPresent真/假。
如果在散列表中指定Confirm = $false,则在参数绑定期间发生的类型强制(强制转换)将正确处理它。对于任何其他开关参数,甚至是您在自定义函数中定义的自定义参数,也是如此。当您需要计算函数内部的开关参数时,此类型转换也是可执行的。
如果我指定一个名为$Delete的开关参数
Param( [Switch]$Delete )然后,在内部,我可以执行如下逻辑:
If( $Delete -eq $true ) {
# Delete the file or whatever...
}当然,您可以缩短为:
If( $Delete ) {
# Delete the file or whatever...
}但是,您不需要深入了解PowerShell的类型转换系统,就可以在散列表中使用布尔值或开关参数。它被记录在溅溅中。前几行将解释开关参数的散列表。
https://stackoverflow.com/questions/68832121
复制相似问题