我尽可能地简化了我的情况。我有一个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
块。
答案 0 :(得分:4)
您可以使用"splat" operator动态添加参数。
使用参数名称的键定义哈希。然后将其传递给cmdlet:
$extras = @{}
if (condition) { $extras["ArgumentList"] = whatever }
Start-Process -FilePath = "notepad.exe" @extras
答案 1 :(得分:0)
有一种方法可以使用splat运算符@
(请参阅Richard answerd)并使用带有条件的格式字符串。但是,我认为If-else
声明是最易读且最清晰的方式,并且我不会尝试简化它。