UNC ネットワーク パスにある実行可能ファイルを使用して、ターゲット マシン上の実行可能ファイルをリモートで呼び出そうとしています。私はWin32_Process.Create
これを行う方法を使用しています。この方法を使用して、C: ドライブにローカルに保存されているファイルを起動できますAccess Denied
が、UNC パスからファイルを起動しようとすると、戻り値 2 が返されます。偽のパスに変更すると、戻り値 9, が返されるため、パスが正しいと確信していますPath Not Found
。
Powershell ではinvoke-wmimethod
、Win32_Process の Create メソッドを呼び出し、credential
ターゲット システムでの管理者権限と UNC パスでの読み取り権限を持つオブジェクトを渡します。C# ではConnectionOptions
、同じ資格情報を使用して偽装しています。どちらの場合も結果は同じです。
また、さまざまな方法 (CIM_DataFile、XCopy をリモートで呼び出す) を使用して、最初に EXE ファイルをローカルにコピーしようとしました。これらの方法はどれもうまくいきませんでした。アプリケーションサーバーはほとんどのターゲットシステムと同じデータセンターにないため、最初にファイルをアプリケーションサーバーにプルせずに、ファイルサーバーからターゲットシステムに直接コピーしたいと考えています。これは低速で信頼性が低くなります。私が見つけた 1 つのオプションは FTP を使用することですが、それは最後の手段だと考えています。
PSExec と同じ資格情報を使用して UNC パスから EXE をリモートで呼び出すこともできますが、Web アプリケーションからシェルアウトして PSExec を呼び出すことは避けたいと考えています。それが私がしなければならないことであればうまくいくことはわかっています。私はこのような問題を解決するためにPSExecを何度も使用しましたが、外部プログラムを使用してハッキングするのではなく、アプリケーション内でこれをすべて実行したいと思っています。
EXE が UNC パス上にある場合、Win32_Process を使用してリモート マシンで EXE を起動する方法はありますか? これは、WMI によって起動されたプロセスがネットワーク上の場所から EXE を呼び出す権限を持っていないグループ ポリシーの問題でしょうか? アイデアも検索用語もありません。
Powershell コード例。これは機能します:
$launchproc = Invoke-WmiMethod -ComputerName $compName -Class Win32_process -Name Create -ArgumentList "c:\temp\installer.exe /s /f1c:\temp\installer.iss" #-Credential $adminCreds
これはしません:
$launchproc = Invoke-WmiMethod -ComputerName $compName -Class Win32_process -Name Create -ArgumentList "\\fileserver\share\installer.exe /s /f1\\fileserver\share\installer.iss" -Credential $adminCreds
コマンド ウィンドウからローカルで対話的にコマンドを発行すると、UNC ベースのコマンドは問題なく動作することに注意してください。おかしな構文は、InstallShield のサイレント インストール スイッチの成果物です。また、バックスラッシュを二重にするかバックティックでバックスラッシュをエスケープすると、パスが見つからないため、エスケープの問題ではないと思います。
編集: まったく同じ問題ではありませんが、ここで説明されている GP 権限を確認しました: WMI Win32_Process.Create が Insufficient Privsで失敗し、それらの権限が正しく設定されています。
編集 #2: 他の誰かが同様の問題を抱えているのを見つけました: Win32_Process Create メソッド。リモート マシンからリモート マシンにファイルをコピーしようとしているこれも、リモート システムで Net Use を起動するバッチ ファイルっぽいハックです。これは私の唯一の本当の選択肢ですか?