我想从具有可变驱动器名称的驱动器调用exe文件。 代码首先搜索系统的每个驱动器中的路径,一旦发现它进入If条件,我想调用命令-bpimagelist。
以下是产生异常错误的代码。
for($pat=67 ;$pat -le 87 ;$pat++)
{
$y = [char]$pat;
$path = $y+":\Veritas\Netbackup\bin\admincmd"
If((Test-Path $path))
{
Write-Host $path "is found in" $y "drive"
Invoke-Item $y":\Veritas\Netbackup\bin\admincmd\bpimagelist -client abc.ge.com -d 11/01/2014 -U"
break
}
Else
{
continue
}
}
错误:
PS C:\Documents and Settings\abala\Desktop> .\veritasscript.ps1
D:\Veritas\Netbackup\bin\admincmd is found in D drive
Invoke-Item : Cannot find path 'C:\Veritas\Netbackup\bin\admincmd\bpimagelist -
client hclinnobpm01.jnj.com -d 11\01\2014 -U' because it does not exist.
At C:\Documents and Settings\admin_broy5\Desktop\veritasscript.ps1:8 char:17
+ Invoke-Item <<<< $y":\Veritas\Netbackup\bin\admincmd\bpimagelist -clien
t hclinnobpm01.jnj.com -d 11/01/2014 -U"
=============================================== ==
我不确定为什么当$ y的当前值为D时,错误显示C:\ Veritas,并且在写入主机行中,它打印为D驱动器中找到的路径。 有人可以建议一个方法来调用上面的exe文件吗?
答案 0 :(得分:1)
更好的方法是使用Start-Process
而不是其中一个Invoke命令。
以下是一个例子:
Start-Process "$y:\Veritas\Netbackup\bin\admincmd\bpimagelist" -argumentList @("-client abc.ge.com","-d 11/01/2014","-U")
如果这会引发相同的错误,你应该检查机器是否真的存在bpimagelist。
有关使用powershell运行可执行文件的更多信息,请查看Technet Wiki
答案 1 :(得分:0)
使用Invoke-Item
将其更改为Invoke-Expression
或iex
:
Invoke-Expression "$($y):\Veritas\Netbackup\bin\admincmd\bpimagelist -client abc.ge.com -d 11/01/2014 -U"