【问题标题】:How to Stop IIS with PowerShell?如何使用 PowerShell 停止 IIS?
【发布时间】:2012-05-23 21:04:31
【问题描述】:

我正在学习 PowerShell 并尝试在远程服务器上停止 IIS。

我正在使用以管理员模式启动的 PowerGUI 脚本编辑器。

我有这个代码

$service = Get-WmiObject Win32_Service -ComputerName 'myserver'  -Filter "Name='IISAdmin'"
$service
$service.StopService();
$service.State

状态总是以运行状态返回。我不知道为什么它没有停止。

编辑

运行时出错

Invoke-Command -ComputerName 'myserver' { Stop-Service IISAdmin }

连接到远程服务器失败并显示以下错误消息: 客户端无法连接到请求中指定的目的地。 验证目标上的服务是否正在运行并且 接受请求。查阅日志和文档以获取 在目标上运行的 WS-Management 服务,最常见的是 IIS 或 赢RM。如果目标是 WinRM 服务,请运行以下命令 目标上的命令以分析和配置 WinRM 服务: “winrm 快速配置”。有关详细信息,请参阅 about_Remote_Troubleshooting 帮助主题。

编辑2

我发现了这个,它似乎有效。我不知道如何从 Stop-Service 取回信息,所以我不得不使用其他方式将其发送给我。如果你知道怎么做,请告诉我。

Stop-Service -Force -InputObject $(Get-Service -Computer myserver -Name IISAdmin)
$service = Get-WmiObject Win32_Service -ComputerName 'myserver '  -Filter "Name='IISAdmin'"
$service.State

这行得通。我不明白为什么。我唯一能想到的是我必须使用 -Force 否则它不会停止服务器所以也许这是一个原因?

【问题讨论】:

    标签: iis powershell


    【解决方案1】:

    停止 IIS(如 iis-Manager 中服务器上的“右键单击 > 停止”):

    spsv iisadmin,was,w3svc -pa
    

    意思是:

    stop-service -name iisadmin,was,w3svc -passThru # -passThru is optional but basically outputs the result
    

    (替代方案:gsv iisadmin,was,w3svc |spsv -pa|sasv -pa 重新启动服务并输出结果,但在本例中,第二个 -pa 是可选的!!!仅供参考:gsv=get-service,sasv=start-service,spsv=stop-service , pa=passThru)

    【讨论】:

      【解决方案2】:

      您可以使用 iisreset 远程停止/重新启动 iis:

      iisreset [computername]
      

      【讨论】:

      • 我会试试这个,但仍然不确定为什么其他方法不起作用。另外,如何使用这种方式获取状态和内容?
      【解决方案3】:
      Invoke-Command -ComputerName myserver { Stop-Service W3SVC}
      

      【讨论】:

      • 我收到一个错误,请参阅编辑。另外,这种方式与另一种方式有什么区别?
      • 在此处了解 PowerShell 远程处理:technet.microsoft.com/en-us/magazine/ff700227.aspx
      • 我必须在两台机器上都执行这些步骤吗?
      • Cannot find any service with service name 'IISAdmin'.
      • IISAdmin 应该改为 W3SVC
      【解决方案4】:

      尝试使用 PsExec \Server2 -u Administrator -p somePassword IISReset /STOP

      或使用 PowerGUI 脚本编辑器

      $service = Get-WmiObject -computer 'ServerA' Win32_Service -Filter "Name='IISAdmin'"
      $service
      $service.InvokeMethod('StopService',$Null)
      $service.State
      

      尝试使用

      $server = "servername"
      $siteName = "Default Web Site"
      $iis = [ADSI]"IIS://$server/W3SVC"
      $site = $iis.psbase.children | where { $_.keyType -eq "IIsWebServer" -AND
      $_.ServerComment -eq $siteName }
      $site.serverstate=3
      $site.setinfo()
      

      【讨论】:

      • 我已经准备好了你的第二种方法(如果我错过了什么,我可以再试一次)。在这样做的同时,我看到了 StopService 的简写方法....刚刚尝试了您的代码和相同的结果。
      • 您可以尝试将服务器状态($site.serverState = 3)设置为 3(已停止)
      • 何时将其设置为 3。我只是在查看 $service 时看到返回值为 3。这是 State 值吗?
      • 糟糕,服务器状态 3 正在停止。使用状态 4 来停止它。
      • 为什么需要指定siteName?
      【解决方案5】:

      我不喜欢处理 WMI 对象。相反,我建议将iisreset /stop 与 PowerShell 远程处理结合使用。所以,基本上是这样的:

      Invoke-Command -ComputerName 'myserver' -ScriptBlock { & iisreset /stop }
      

      您也可以将/stop 替换为/start 以在远程服务器上启动 IIS。

      如果您不想利用 iisreset.exe 而使用纯 PowerShell,则可以启动/停止 W3SVC 服务:

      Invoke-Command -ComputerName 'myserver' -ScriptBlock { Stop-Service W3SVC }
      

      并将Stop-Service 替换为Start-Service 以重新启动它。 W3SVC 服务是 IIS。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-04
        • 2019-04-25
        • 2012-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多