Powershell 使用可空参数包装可执行文件
在Powershell 使用可空参数包装可执行文件,powershell,Powershell,在cmd中,我可以编写这样的批处理文件,它将为可执行文件提供别名 SuperUtil.bat call Mine.Library.SuperUtil.exe %* 所以我可以打电话 SuperUtil -t SomeParam 这是我对PowerShell等效程序的尝试 Start-Process Mine.Library.SuperUtil.exe -NoNewWindow -ArgumentList $args 然而,当我调用它时没有参数,我得到一个错误 启动进程:无法验证参数“Arg
cmd
中,我可以编写这样的批处理文件,它将为可执行文件提供别名
SuperUtil.bat
call Mine.Library.SuperUtil.exe %*
所以我可以打电话
SuperUtil -t SomeParam
这是我对PowerShell等效程序的尝试
Start-Process Mine.Library.SuperUtil.exe -NoNewWindow -ArgumentList $args
然而,当我调用它时没有参数,我得到一个错误
启动进程:无法验证参数“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
}
因此,我想有选择地传递参数或不传递参数,以便浏览命令行选项。阅读:
$ARGS包含未声明的参数数组和/或传递给函数、脚本或脚本的参数值 脚本块 因此,请检查
如果($args.Count-ne 0)
而不是如果($args-ne$Null)
,因为自动变量$args
始终是一个数组(并且从不$Null
)。阅读:
$ARGS包含未声明的参数数组和/或传递给函数、脚本或脚本的参数值 脚本块 因此,请选中
if($args.Count-ne 0)
而不是if($args-ne$Null)
,因为自动变量$args
始终是一个数组(并且从不$Null
)。如果要提供可选参数,请使用:
$params = @{}
if($args){
$params['ArgumentList'] = $args
}
Start-Process Mine.Library.SuperUtil.exe -NoNewWindow -Wait @params
如果调用启动进程
时,$params
哈希表是空的,它将被忽略
如果需要,还可以将其他参数参数压缩到哈希表中:
$params = @{
FilePath = 'Mine.Library.SuperUtil.exe'
NoNewWindow = $true
Wait = $true
}
if($args){
$params['ArgumentList'] = $args
}
Start-Process @params
使脚本的维护变得容易(但与批处理文件替代方案相比,显然仍然非常冗长)如果要提供可选参数参数,请使用:
$params = @{}
if($args){
$params['ArgumentList'] = $args
}
Start-Process Mine.Library.SuperUtil.exe -NoNewWindow -Wait @params
如果调用启动进程
时,$params
哈希表是空的,它将被忽略
如果需要,还可以将其他参数参数压缩到哈希表中:
$params = @{
FilePath = 'Mine.Library.SuperUtil.exe'
NoNewWindow = $true
Wait = $true
}
if($args){
$params['ArgumentList'] = $args
}
Start-Process @params
使脚本的维护变得容易(但与批处理文件的替代方案相比,显然仍然非常详细)它可能很详细,但也很清楚。我喜欢!谢谢这可能很冗长,但也很清楚。我喜欢!谢谢