Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 使用可空参数包装可执行文件_Powershell - Fatal编程技术网

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

使脚本的维护变得容易(但与批处理文件的替代方案相比,显然仍然非常详细)

它可能很详细,但也很清楚。我喜欢!谢谢这可能很冗长,但也很清楚。我喜欢!谢谢