繁体   English   中英

PowerShell 当 ArgumentList 为空时启动进程 cmdlet

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM