次のように、 Win32_Processクラスを呼び出して、vbscript内からリモートWindowsサーバーで簡単なcmdユーティリティを実行しようとしています。
serverIP = "10.0.0.3"
Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & serverIP & "\root\cimv2:Win32_Process")
RunCommand = "cmd.exe /c echo hello >c:\hello.txt"
wscript.echo RunCommand
intReturn = oWMI.Create(RunCommand, Null, Null, intProcessID)
wscript.echo intReturn
Select Case intReturn
Case 0 Wscript.Echo "Successful"
Case 2 Wscript.Echo "Access denied"
Case 3 Wscript.Echo "Insufficient privilege"
Case 8 Wscript.Echo "Unknown failure"
Case 9 Wscript.Echo "Path not found"
Case 21 Wscript.Echo "Invalid parameter"
Case Else Wscript.Echo "Unable to execute for unknown reason"
End Select
これは、privが不十分な場合は常に失敗します(戻りコード3)。
誰かが私が間違っていることを見ることができますか?スクリプトはドメイン管理者として呼び出されたcmdセッションから実行されているため、WMIのセキュリティについて完全に理解していないことがない限り、正常に機能するはずです。
PSEXECを提案する人もいるでしょう。私はそれを認識しており、それにフォールバックする可能性があります。しかし、これはそのままでは解決可能な問題のように思われるので、このスクリプトの外部実行可能ファイルへの依存関係を作成したくありません。
私が試したいくつかのことを述べます。
- このフェローは、プロファイルがロードされていない場合、問題が発生する可能性があると述べています。呼び出し元のユーザー(ドメイン管理者)が両方のシステムにログインしている場合でも、同じ問題が発生します。
- このスレッドで、Richard Muellerは、impersonationlevel=impersonateとauthenticationlevel=Pktの両方を指定する必要があると述べています。やってみました。まだ行きません。
- このページでは、モニカ内で必要なNT権限を指定する必要があるようです。SeInteractiveLogonRight、SeNetworkLogonRight、SeBackupPrivilege、SeRestorePrivilege、SeDebugPrivilege、およびSeChangeNotifyPrivilegeを指定してみました。何も機能しませんでした。
これをグーグルで検索する際に私が気付いた共通のスレッドは、人々がこの問題を一部のターゲットコンピューターで見ているが、他のコンピューターでは見ていないということです。したがって、根本的に欠けているのは、このタスクを実行するために必要なセキュリティ特権の完全な内訳であるように思われます。ロリポップは、そのような内訳を確実に提供できる人に感謝して送られます!
視聴者数が増えることを期待するのは無駄です。.netの人々は同じWMIの問題を扱うことが多く、洞察を持っている可能性があるため、ここに.netタグを追加します。
ああ。バンプ、これはタンブルウィードにはなりませんよね?