我已经尽可能地简化了我的情况。我有一个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
块。
3条答案
按热度按时间ajsxfq5m1#
您可以使用"splat" operator动态添加参数。
使用参数名称的键定义哈希。然后将其传递给cmdlet:
xzlaal3s2#
有一种方法可以使用splat操作符
@
(参见Richard answerd),也可以使用带条件的格式字符串,但是,我认为If-else
语句是最可读和清晰的方法,我不会试图简化它。l7wslrjt3#
我使用的是Powershell 7,没有这个问题,我在一个函数中运行
Start-Process -ArgumentList $args
,其中$args
有时为空,它工作正常。但是,我的脚本无法在Windows PowerShell上运行。
看起来Powershell 7不再要求您在这里使用if-else语句。