わかりました、私はこれを理解しようとしましたが、インターウェブに尋ねる時が来たと考えました. これはバグなのか何なのか気になります。
複数のコンピューターに対してジョブを開始して、それらに存在するデータベース名を特定しようとしています。
私のコンピュータ 1 のシステム セットアップは次のとおりです。Powershell 2.0、Windows 2k3 Enterprise x64
Computer1 で次を実行できます。
Start-Job -scriptblock {gwmi -query "select * from win32_computersystem" -ComputerName "Computer2"}
そして、ジョブは永久に「実行中」の状態でスタックします。しかし、シェルのジョブのスクリプト ブロックの外で同じコマンドを実行した場合はそうではありません。
ここで、ローカル管理者の(対私のドメイン)資格情報を使用してこの正確なセットアップを試しましたが、同じ結果になりました。何らかの理由でうまくいきません。
gwmi を使用しないカスタム WMI dotnet オブジェクトを作成しようとしましたが、同じ結果が得られました。
-asjob パラメータ?: これは解決策ではありません。
このパラメーターを使用すると、12 GB のシステムで約 2 GB のメモリを使用すると、powershell ウィンドウがクラッシュします。一方、start-job は 12GB まで問題なく使用できます。すべてのクエリをシリアルに実行することもできます。
また、Gwmi で -Asjob パラメーターを使用するとメモリが再利用されないため、それ以上ジョブを続行できません。「remove-job * -force」または「[GC]::Collect()」を実行した後でも、powershell.exe のメモリ消費量は頑固に変わりません (これも start-job とは異なります)。
SQL インスタンス名が異なるため、wmi クラス名も異なります。したがって、複数のクラスに対して複数のクエリ コマンドを実行する必要があります。技術的には実行可能ですが、より複雑で、上記のメモリ要件を考えると、2 GB に制限されます。誰かが start-job を本来のように機能させる方法を知っていることを願っています。
私が試していない唯一のことは、権限パラメーターを指定する必要があるのでしょうか?