在Windows Server 2008 R2,64位机器上运行以下代码:
$global:arrServer = @("ph1", "ph2", "ph3")
$global:arrDienste = @("W3SVC", "WAS", "IISADMIN")
$global:strPfad = "D:\WASLogs\"
$global:strLogTime = Get-Date -Format "yyyy-MM-dd--hh-mm-ss"
$global:strLogDatei = $global:strPfad + "WARTUNG--" + $global:strLogTime + ".log"
Log_Abfrage_und_Generierung
Dienste_Stop
Function Dienste_Stop
{
echo "Stop of the services successful?" | Out-File $global:strLogDatei -Append -Force
foreach($strServer in $global:arrServer)
{
$strInterim2 = $strServer + " (" + $global:appServerNamen + ")"
echo " " $strInterim2 | Out-File $global:strLogDatei -Append -Force
foreach($strDienst in $global:arrDienste)
{
$objWmiService = Get-Wmiobject -Class "win32_service" -computer $strServer -filter "name = '$strDienst'"
if( $objWmiService.State )
{
$rtnWert = $objWmiService.stopService()
Switch ($rtnWert.returnvalue)
{
0 { echo "$strDienst stopped!" | Out-File $global:strLogDatei -Append -Force }
2 { echo "$strDienst throws: 'Access denied!'" | Out-File $global:strLogDatei -Append -Force }
3 { echo "Service $strDienst is not existing on $strServer!" | Out-File $global:strLogDatei -Append -Force }
5 { echo "$strDienst already stopped!" | Out-File $global:strLogDatei -Append -Force }
DEFAULT { echo "$strDienst service reports ERROR $($rtnWert.returnValue)" | Out-File $global:strLogDatei -Append -Force }
}
}
else
{
echo "Service $strDienst is not existing on $strServer!" | Out-File $global:strLogDatei -Append -Force
}
}
}
}
Function Log_Abfrage_und_Generierung
{
if([IO.Directory]::Exists($global:strPfad))
{
echo "Nothing happening here."
}
else
{
New-Item -ItemType directory -path $global:strPfad
}
}
这可以在所有计算机ph1,ph2和ph3上重现。但是对于其他一些代码,可以启动WAS,分别可以看到状态。
另请注意:
这里发生了什么?
蒂亚
答案 0 :(得分:0)
问题可能是有多个依赖于WAS的服务需要首先停止。 StopService()方法没有超载来停止依赖服务。如果这不能解决问题,请检查StopService的响应代码,以确定上面链接中的问题。
看起来您正在处理代码3,因为“服务不存在”。文档显示此代码实际上意味着“服务无法停止,因为正在运行的其他服务依赖于它。”
当此功能完全融入powershell
时,不确定为什么您决定使用WMIStop-Service WAS -Force