11/13/2013 11:35:37 TRCW1 ローカル コンピューターを使用する 11/13/2013 11:35:37 TRCE1 System.Management.ManagementException: System.Management.ManagementException.ThrowWithExtendedInfo (ManagementStatus errorCode) で System.Management でアクセスが拒否されました。 Microsoft.PowerShell.Commands.GetWmiObjectCommand.BeginProcessing() の ManagementObjectCollection.ManagementObjectEnumerator.MoveNext()
コード (サーバー名のループ内):
$error.clear() #clear any prior errors, otherwise same error may repeat over-and-over in trace
if ($LocalServerName -eq $line.ServerName)
{
# see if not using -ComputerName on local computer avoids the "service not found" error
Add-Content $TraceFilename "$myDate TRCW1 using local computer "
$Service = (get-wmiobject win32_service -filter "name = '$($line.ServiceName)'")
}
else
{
Add-Content $TraceFilename "$myDate TRCW2 using remote computer $($line.ServerName) not eq $LocalServerName"
$Service = (get-wmiobject win32_service -ComputerName $line.ServerName -filter "name = '$($line.ServiceName)'")
}
if ($error -ne $null)
{
Write-Host "----> $($error[0].Exception) "
Add-Content $TraceFilename "$myDate TRCE1 $($error[0].Exception)"
}
サーバー名の CSV を読んでいます。最後に、「アクセスが拒否されました」という例外ロジックを追加しました。これは、ローカル サーバーでのみ発生していました。ほとんど逆のように見えますが、ローカル サーバーは失敗しますが、リモート サーバーは正常に動作します。ロジックを変更してローカル サーバーかどうかをテストし、WMI の -ComputerName パラメーターをオフにしてみましたが (上記のコードを参照)、それでもエラーが発生しました。
これまでのところ、私の調査によると、答えは
セット項目trustedhosts
しかし、私の主な質問は、trustedhosts がローカル サーバーに適用されるのか、それともリモート サーバーのみに適用されるのかということです。コンピューターは常に自分自身を信頼するのではないでしょうか? まだリモート処理を使用して自分自身と通信していますか?
このサーバーは、私がここに来るずっと前からクラスターの一部だったようですが、現在はそうではありません。私もそれを疑っています。
対話的に実行すると、スクリプトは正常に動作しますが、スケジュールしてサービス アカウントで実行した場合にのみ、アクセスが拒否されて失敗します。サービス アカウントは、そのボックスのローカル管理者です。
get-service の代わりに get-wmiobject win32_service を使用しています。これは、プロセスを検索するために必要な追加情報と、別の WMI 呼び出しを使用してサービスが開始された日時を返すためです。
Win 2008/R2 で動作します。
以下更新 2013/11/13 17:27
問題が複数のサーバーで発生することを確認しました。[スクリプトを取得し、別のサーバーで実行しました。] 私の CSV 入力には、監視するサーバーのリストが含まれています。自分のサーバーの外にあるものは常に結果を返します。-ComputerName を省略した自分のサーバーへの送信は失敗します。(ローカルサーバーの -ComputerName パラメーターを使用して、または使用せずに試しました)。