【问题标题】:How to perform IISRESET with Powershell Script如何使用 Powershell 脚本执行 IISRESET
【发布时间】:2009-11-03 23:40:37
【问题描述】:

有人知道如何使用 PowerShell 脚本执行 IISRESET 吗?我在 Windows 2008 机器上使用安装了 PowerShell 1.0 的 PowerGUI 编辑器。

【问题讨论】:

  • 任何带有完整源代码示例的最终解决方案?

标签: iis powershell


【解决方案1】:

您可以使用 Invoke-Command cmdlet 来完成:

invoke-command -scriptblock {iisreset}

更新:

您还可以使用 & 调用运算符简化命令:

& {iisreset}

【讨论】:

    【解决方案2】:

    使用 & {iisreset} 偶尔失败导致我这样做:

    Start-Process "iisreset.exe" -NoNewWindow -Wait

    现在它等待iisreset.exe 优雅地结束。

    【讨论】:

      【解决方案3】:

      这对我很有效。在这个应用程序中,我不关心返回码:

      Start-Process -FilePath C:\Windows\System32\iisreset.exe -ArgumentList /RESTART -RedirectStandardOutput .\iisreset.txt
      Get-Content .\iisreset.txt | Write-Log -Level Info
      

      Write-Log cmdlet 是我用于记录的自定义命令,但您可以替换为其他命令。

      【讨论】:

        【解决方案4】:

        我知道这已经很老了,但是您可以从 Powershell 的命令行运行任何命令行进程。所以你只需要一个脚本,用你需要的任何开关调用 IISReset。

        【讨论】:

          【解决方案5】:

          不确定您要查找的确切内容,但请创建一个主体为“iisreset /noforce”的脚本

          这是一个例子:http://technet.microsoft.com/en-us/library/cc785436.aspx

          【讨论】:

            【解决方案6】:

            IIS 停止或启动(已测试)

            WaitForExit and ExitCode work fine
            

            [System.Reflection.Assembly]::LoadWithPartialName("System.Diagnostics").FullName
            $procinfo = New-object System.Diagnostics.ProcessStartInfo
            $procinfo.CreateNoWindow = $true
            $procinfo.UseShellExecute = $false
            $procinfo.RedirectStandardOutput = $true
            $procinfo.RedirectStandardError = $true
            $procinfo.FileName = "C:\Windows\System32\iisreset.exe"
            $procinfo.Arguments = "/stop"
            $proc = New-Object System.Diagnostics.Process
            $proc.StartInfo = $procinfo
            [void]$proc.Start()
            $proc.WaitForExit()
            $exited = $proc.ExitCode
            $proc.Dispose()
            
                Write-Host $exited
            

            【讨论】:

              【解决方案7】:

              iisreset.exe 支持计算机名称作为参数。下面的示例展示了如何在多台服务器上重置 IIS 的基本思路:

              $servers = @()
              $servers += 'server1'
              $servers += 'server2'
              ...
              $servers += 'serverN'
              

              由于iisreset.exe 不支持多值参数,我们必须将其包装在一个循环中:

              $servers | %{ iisreset $_ /restart /noforce }
              

              您可能想要添加简单的监控:

              $servers | %{ Write-Host "`n`n$_`n" -NoNewline ; iisreset $_ /restart /noforce /timeout:30 }
              

              如果您有很多服务器,您可能只对故障感兴趣:

              $servers | %{ Write-Host "`n`n$_`n" -NoNewline ; iisreset $_ /restart /noforce /timeout:30 | Select-String "failed" }
              

              多行版本以提高可读性:

              foreach ( $server in $servers ) {
                  Write-Host "`n`n$server`n" -NoNewline ; 
                  iisreset $server /restart /noforce /timeout:30 | Select-String "failed"
              }
              

              我强烈建议在执行 /reset 操作之前使用 /status 测试您的脚本:

              $servers | %{ iisreset $_ /status }
              

              您也可以使用/status 检查停止的组件:

              $servers | %{ Write-Host "`n`n$_`n" -NoNewline ; iisreset $_ /status | Select-String "Stopped" }
              

              参考

              • /restart 是默认参数。 iisreset.exe users /restart 在没有指定其他操作参数的情况下
              • /noforce 将阻止 iisreset.exe 在出现错误时运行。
              • /timeout - 有时您需要让服务器有更多时间来处理请求,以避免 IIS 卡在 Stopped 状态。

              【讨论】:

                【解决方案8】:

                我发现使用下面的简单命令最简单。

                D:\PS\psexec \server_name iisreset

                【讨论】:

                  猜你喜欢
                  • 2020-08-12
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-03-03
                  • 1970-01-01
                  • 2013-08-19
                  • 2012-05-31
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多