我正在尝试执行下面的代码,当运行时遇到第一个invoke-expression时,脚本退出,不运行剩余的代码.ps1文件。这在装有powershell v3的windows7中发生了。这里的任何指针都是值得感谢的。我尝试使用Try{Invoke-expression ""} catch{ $_ },但日志显示该脚本退出。
$HardWares=@("abc","def")
Write-Info ("Deleting device driver with $application")
foreach ($HardWare in $HardWares){
Write-Info ("working on hardware $HardWare")
$DriverID = (Get-WmiObject -Class Win32_PnpSignedDriver | Where-Object {$_.hardwareID -eq $HardWare} | Select-Object InfName -ExpandProperty InfName | Select-Object -Unique)
if ($DriverID){
Write-Info ("Removing $HardWare and deleting $DriverID")
$HardwareRemoveCmd = "D:\Users\App.exe remove $HardWare"
Invoke-Expression $HardwareRemoveCmd
$Command= "D:\Users\App.exe dp_delete $DriverID -f"
Invoke-Expression $Command
} else {Write-Info "Could not find $DriverID file for $HardWare"}
}
发布于 2018-07-02 03:27:38
问题可能是您已经创建了一个名为$DriverID的变量,但是您正在检查$Driverid是否返回true。变量创建是大小写敏感的,所以这里有两个不同的变量。这将返回false,导致脚本跳到else语句中。
如果你想把“找不到任何主机”写到显示器上,你需要把“Write- $Driverid”放在前面。
代码的整理版本。
{
$Driverid = (Get-WmiObject -Class Win32_PnpSignedDriver | Where-Object
{$_.hardware -eq $HardWare} | Select-Object InfName -ExpandProperty InfName
| Select-Object -Unique)
if($Driverid)
{
Invoke-Expression "D:\Users\App.exe remove $HardWare"
$Command= "D:\Users\App.exe dp_delete $Driverid -f"
Invoke-Expression $Command
}
else
{
Write-Host "did not find any $Driverid"
}
}
希望这能有所帮助!
https://stackoverflow.com/questions/51126096
复制相似问题