首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >执行Invoke-expression时,Powershell脚本在运行时退出

执行Invoke-expression时,Powershell脚本在运行时退出
EN

Stack Overflow用户
提问于 2018-07-02 02:54:08
回答 1查看 246关注 0票数 -1

我正在尝试执行下面的代码,当运行时遇到第一个invoke-expression时,脚本退出,不运行剩余的代码.ps1文件。这在装有powershell v3的windows7中发生了。这里的任何指针都是值得感谢的。我尝试使用Try{Invoke-expression ""} catch{ $_ },但日志显示该脚本退出。

代码语言:javascript
复制
    $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"}
    }
EN

回答 1

Stack Overflow用户

发布于 2018-07-02 03:27:38

问题可能是您已经创建了一个名为$DriverID的变量,但是您正在检查$Driverid是否返回true。变量创建是大小写敏感的,所以这里有两个不同的变量。这将返回false,导致脚本跳到else语句中。

如果你想把“找不到任何主机”写到显示器上,你需要把“Write- $Driverid”放在前面。

代码的整理版本。

代码语言:javascript
复制
{
    $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"
    }
}

希望这能有所帮助!

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51126096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档