【问题标题】:running a powershell script from command prompt?从命令提示符运行 powershell 脚本?
【发布时间】:2012-12-28 18:19:55
【问题描述】:

以下脚本(当 AppMgmt 服务停止时将停止 IIS 服务)在“PowerGUI 脚本编辑器”中成功运行,但是当从控制台“powershell -file path_to_script”运行它时,它不会在事件触发时执行操作:

function Watch-MyService()
{
   $query = "SELECT * FROM __InstanceModificationEvent WITHIN 2 " +
             "WHERE TargetInstance Isa 'Win32_Service' " +
             "AND TargetINstance.Name = 'AppMgmt'" +
             "AND TargetInstance.State = 'Stopped'"

    $action = 
    { 
        Write-Host "stopping service # 2" 
        Stop-Service 'W3SVC' -Force
    }
    Write-Host "registering event"  
    Register-WMIEvent -query $query -SourceIdentifier "ControllerSvcEvent" -action $action
}

Watch-MyService

在控制台中,我只看到:

注册活动

但停止“AppMgmt”服务时没有其他显示,没有输出到控制台,并且 IIS 服务不受影响。

控制台以管理员权限启动。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    当您以这种方式从命令提示符运行 PowerShell 脚本时,您的脚本会执行,然后 PowerShell 进程可能会退出(打开任务管理器以观察 PowerShell 进程在您的脚本停止后立即停止)。您的事件 (PowerShell) 的侦听器不再运行,因为该进程已退出。事件注册范围仅限于 PowerShell 会话的范围。

    【讨论】:

    • 谢谢,我错过了一个明显的点.. 解决方案是启动 cmd 并以管理员身份运行(在我的情况下用于停止服务)并输入:powershell -noexit -file "c:\script. ps1"
    猜你喜欢
    • 2013-08-29
    • 1970-01-01
    • 2018-05-10
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多