我的高级脚本(带有[CmdletBinding(SupportsShouldProcess)]
属性)调用了一个原生命令,该原生命令支持一个开关,使其以“空运行”模式运行,即只输出将要复制或删除的内容,而不实际执行任何复制/删除操作。
脚本的示例代码:
[CmdletBinding(SupportsShouldProcess)]
param ()
gsutil -m rsync -r -n something gs://something
这里,-n
开关打开空运行模式。
如何根据WhatIf
开关是否传递给脚本来指定此开关?
根据这篇官方文章,其他cmdlet应该自动继承-WhatIf
值,但仍然建议显式地将值传递给cmdlet:但是在调用本机命令时,我认为这种方法不起作用。
1条答案
按热度按时间a2mppw5e1#
正如其他人所评论的那样,当使用
-WhatIf
参数调用脚本时,可以检查$WhatIfPreference
首选项变量,该变量将为$true
。为了避免重复
gsutil
命令行,我使用了argument splatting。为了支持splotting,$dryMode
必须是一个数组,这是通过数组子表达式运算符@(…)
强制的。如果$WhatIfPreference
是$true
,数组将由值为-n
的单个字符串组成。否则,数组将为空,并且展开空数组不会不要在命令行中插入任何内容(连空格都不要)。使用PowerShell 7+,可以使用三元运算符实现更简洁的语法: