当ArgumentList为空时,PowerShell Start-Process cmdlet

时间:2015-07-02 12:16:37

标签: powershell process arguments

我尽可能地简化了我的情况。我有一个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块。

2 个答案:

答案 0 :(得分:4)

您可以使用"splat" operator动态添加参数。

使用参数名称的键定义哈希。然后将其传递给cmdlet:

$extras = @{}
if (condition) { $extras["ArgumentList"] = whatever }

Start-Process -FilePath = "notepad.exe" @extras

答案 1 :(得分:0)

有一种方法可以使用splat运算符@(请参阅Richard answerd)并使用带有条件的格式字符串。但是,我认为If-else声明是最易读且最清晰的方式,并且我不会尝试简化它。