1

在 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,分别可以看到状态。

还要注意:

  1. 所有其他服务都可以停止吗?这与WAS的路径是这样的事实有关吗?C:\Windows\system32\svchost.exe -k iissvcs
  2. 我故意使用 WMI。

这里发生了什么?

蒂亚

4

1 回答 1

0

问题可能是有多个依赖于需要首先停止的 WAS 的服务。StopService()方法没有停止依赖服务的重载。如果这不能解决问题,请检查 StopService 的响应代码以确定上面链接中的问题。

看起来您将代码 3 处理为“服务不存在”。文档显示此代码实际上意味着“无法停止服务,因为正在运行的其他服务依赖于它。”

当此功能完全融入 powershell 时,不确定为什么您决定使用 WMI

Stop-Service WAS -Force

WAS 服务属性

于 2015-07-17T23:46:55.920 回答