我有一个命令行可执行文件,我需要在PowerShell中使用不同的选项重复调用。
在每个场合,我都想检查退出代码是否为0。
有没有办法将调用和参数包装为函数?
& bob.bat -b
... error handling
& bob.bat -a -m "a path"
... error handling
改为:
function callBob ($paramList)
{
& bob.bat $paramList
... error handling
}
callBob -b
callBob -a -m "a path"
etc...
不幸的是,上面的代码似乎没有处理多个参数 - 我不能像第二个那样工作,因为callBob只接受一个参数,所以我最终不得不传入一个字符串这似乎被引用传递给& bob.bat。
答案 0 :(得分:1)
您可以使用$ args访问参数:
function callBob
{
Write-Host "Length: $($args.Length)"
Write-Host "arg0: $($args[0])"
Write-Host "arg1: $($args[1])"
Write-Host "arg2: $($args[2])"
}
callBob -b
callBob -a -m "a path"
答案 1 :(得分:1)
您可以这样做:
function callBob{
bob.bat $args
}
callBob -b
另外,如果你想要(来自PSAKE),请试试这个包装器:
function Exec
{
[CmdletBinding()]
param(
[Parameter(Position=0,Mandatory=1)][scriptblock]$cmd,
[Parameter(Position=1,Mandatory=0)][string]$errorMessage = ($msgs.error_bad_command -f $cmd)
)
& $cmd
if ($lastexitcode -ne 0) {
throw ("Exec: " + $errorMessage)
}
}
答案 2 :(得分:0)
有几种方法可以做到。
1)创建批处理文件并从中调用powershell脚本。
2)创建一个exe然后从中调用powershell。您可以在WPF应用程序中获取退出代码,然后进行验证。
这取决于您的应用程序的复杂性和需求。我已经使用WPF应用程序来包装powershell,因为我们不希望其他人通过执行powershell并执行来运行脚本。我们还在WPF应用程序中提供了安全登录。
如果您决定使用WPF Applicaiton,请告诉我您是否需要帮助。