【发布时间】:2009-11-03 23:40:37
【问题描述】:
有人知道如何使用 PowerShell 脚本执行 IISRESET 吗?我在 Windows 2008 机器上使用安装了 PowerShell 1.0 的 PowerGUI 编辑器。
【问题讨论】:
-
任何带有完整源代码示例的最终解决方案?
标签: iis powershell
有人知道如何使用 PowerShell 脚本执行 IISRESET 吗?我在 Windows 2008 机器上使用安装了 PowerShell 1.0 的 PowerGUI 编辑器。
【问题讨论】:
标签: iis powershell
您可以使用 Invoke-Command cmdlet 来完成:
invoke-command -scriptblock {iisreset}
更新:
您还可以使用 & 调用运算符简化命令:
& {iisreset}
【讨论】:
使用 & {iisreset} 偶尔失败导致我这样做:
Start-Process "iisreset.exe" -NoNewWindow -Wait
现在它等待iisreset.exe 优雅地结束。
【讨论】:
这对我很有效。在这个应用程序中,我不关心返回码:
Start-Process -FilePath C:\Windows\System32\iisreset.exe -ArgumentList /RESTART -RedirectStandardOutput .\iisreset.txt
Get-Content .\iisreset.txt | Write-Log -Level Info
Write-Log cmdlet 是我用于记录的自定义命令,但您可以替换为其他命令。
【讨论】:
我知道这已经很老了,但是您可以从 Powershell 的命令行运行任何命令行进程。所以你只需要一个脚本,用你需要的任何开关调用 IISReset。
【讨论】:
不确定您要查找的确切内容,但请创建一个主体为“iisreset /noforce”的脚本
这是一个例子:http://technet.microsoft.com/en-us/library/cc785436.aspx
【讨论】:
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
【讨论】:
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 状态。【讨论】:
我发现使用下面的简单命令最简单。
D:\PS\psexec \server_name iisreset
【讨论】: