在cmd
我可以编写一个类似的批处理文件,它将为可执行文件提供别名。
SuperUtil.bat
call Mine.Library.SuperUtil.exe %*
所以我可以打电话给
SuperUtil -t SomeParam
这是我尝试使用PowerShell等效的
Start-Process Mine.Library.SuperUtil.exe -NoNewWindow -ArgumentList $args
然而,当我没有参数调用它时,我收到错误。
Start-Process:无法验证参数'ArgumentList'的参数。 参数为null,空或参数集合的元素 包含空值。提供不包含任何内容的集合 空值,然后再次尝试该命令。
我已经尝试了以下但是没有传递参数,而且它非常详细:
if ($args -ne $Null)
{
Start-Process Mine.Library.SuperUtil.exe -NoNewWindow -ArgumentList $args -Wait
}
else
{
Start-Process Mine.Library.SuperUtil.exe -NoNewWindow -Wait
}
所以我想选择是否传递参数,以便探索命令行选项。
答案 0 :(得分:3)
如果要提供可选参数参数,请使用splatting:
$params = @{}
if($args){
$params['ArgumentList'] = $args
}
Start-Process Mine.Library.SuperUtil.exe -NoNewWindow -Wait @params
如果$params
散列表在调用Start-Process
时为空,则只会忽略它。
如果需要,您还可以将其他参数参数压缩到哈希表中:
$params = @{
FilePath = 'Mine.Library.SuperUtil.exe'
NoNewWindow = $true
Wait = $true
}
if($args){
$params['ArgumentList'] = $args
}
Start-Process @params
使脚本的维护变得容易(但与批处理文件替代相比,显然仍然非常冗长)
答案 1 :(得分:1)
$ ARGS
包含未声明参数数组和/或传递给函数,脚本或 脚本块。
因此,请检查 if ($args.Count -ne 0)
而不是if ($args -ne $Null)
,因为自动变量$args
始终是一个数组(绝不是$Null
)。