[英]PowerShell Start-Process cmdlet when ArgumentList is empty
我已经尽可能简化了我的情况。 我有一个 PowerShell 脚本,它使用Start-Process cmdlet 以编程方式启动带有“以管理员身份运行”选项的进程:
param
(
# Arguments to pass to the process, if any
[string[]] $ArgList
)
if($ArgList)
{
Start-Process -FilePath notepad.exe -ArgumentList $ArgList -Verb RunAs
}
else
{
Start-Process -FilePath notepad.exe -Verb RunAs
}
由于ArgumentList
不能为 NULL 也不能为空,因此我必须添加if-else
以避免出现ParameterArgumentValidationError错误。
一切都按预期工作,没有问题,但我只是想知道是否有更优雅(但仍然简单)的方法来完成它而无需使用if-else
块。
您可以使用“ splat”运算符动态添加参数。
定义带有参数名称键的哈希。 然后将其传递给cmdlet:
$extras = @{}
if (condition) { $extras["ArgumentList"] = whatever }
Start-Process -FilePath = "notepad.exe" @extras
有一种方法可以使用splat运算符@
(请参阅Richard回答),也可以使用带条件的格式字符串。 但是,我认为If-else
语句是执行此操作的最易读和清晰的方法 ,我不会尝试简化它。
我正在使用 Powershell 7 并且没有这个问题,我在 function 中运行Start-Process -ArgumentList $args
其中$args
有时是 null 并且它工作正常。
但是,我的脚本没有在 Windows PowerShell 上运行。
看起来 Powershell 7 不再要求您在此处使用 if-else 语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.