4

PowerShell は初めてですが、これまでのところ非常に多くのことをすばやく実行できるという事実が気に入っています :)

とにかく、私はこうしてPowerShellスクリプトでリモートプロセスを開始しています:

$compname = "MY-PC"
$myinstallcmd = "c:\install\myprog.exe /s"
$proc = Invoke-WmiMethod -class Win32_Process -name Create -ArgumentList ($myinstallcmd) -ComputerName $compname

私が試したほとんどの PC では、Invoke-WmiMethod コマンドレットは正常に動作しますが、1 台の PC ではハングします。私が今やろうとしているのは、実行中のプロセスのステータスを取得することです。プロセスがハングアップしている場合は、それを強制終了し、そのログを記録してから先に進みます。

Powershellでリモートでプロセスを開始し、Windows で %ERRORLEVEL% を取得するという投稿でこれを行うための可能な方法を見つけました - ただし、プロセス $proc.ProcessId で Register-WmiEvent を実行しようとすると、恐ろしい0x80070005 (E_ACCESSDENIED)エラー... PowerShell ホストをドメイン管理者として実行しています。

開始したプロセスのステータスを取得し、ステータスに基づいてアクションを実行できる方法を誰かが提案できますか?

ありがとう!

4

1 に答える 1

0

更新: リモート システムの資格情報が不足していると思います:

パラメータを使用して資格情報をリモート システムに渡してみて-Credentialください。これは PSCredential オブジェクトを取るため、次のようなことができます。

$cred = Get-Credential
Register-WMIEvent -Credential $cred <and other parameters here>

次のいずれかでアクセス拒否エラーが解決するかどうかを確認します。

0x80070005 (DCOM ACCESS_DENIED) このエラーは、接続しているユーザーが認識されないか、リモート サーバーによって何らかの制限を受けている場合に発生します (たとえば、ユーザーがロックアウトされている可能性があります)。これは、アカウントが異なるドメインにある場合に最も頻繁に発生します。WMI セキュリティに対する最近の変更も、このエラーが発生する原因となる可能性があります。

  • 以前は許可されていた空のパスワードは、Windows XP および Windows Server 2003 では許可されていません。

  • WMI は、Windows 98 クライアントへの非同期コールバックを許可しません。Windows 98 コンピュータから Windows XP コンピュータへの SWbemServices.ExecNotificationQueryAsync のような呼び出しは、Windows 98 マシンに返される Access Denied エラーになります。

  • DCOM構成アクセス設定が変更された可能性があります。

  • ターゲット コンピューターが Windows XP を実行している場合、レジストリ キー HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa の下の Forceguest 値が、Guest アカウントを強制的にオフにするように設定されている可能性があります (値はゼロです)。

ソース: http://technet.microsoft.com/en-us/library/ee692772.aspx

于 2011-03-22T01:29:57.350 に答える