0

まず、質問を再投稿して申し訳ありません。バウンティを開始しようとしましたが、この問題が発生しており、修正されていないようです。

いずれかの方法

コード行を実行しようとすると、次のエラーが発生します

Start-Process : This command cannot be executed due to the error: 
Access is denied.

これは実行されているコードです

$username = "domain\username"
$passwordPlainText = "password"     
$password = ConvertTo-SecureString "$passwordPlainText" -asplaintext -force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist $username,$password

$powershellArguments = "D:\path\ps.script.ps1", "arg1", "arg2", "arg3", "arg4"
Start-Process "powershell.exe" -credential $cred -ArgumentList $powershellArguments -wait
  • このコードは、ローカルで実行すると正常に機能しますが、vbsWMIを介して呼び出された場合は機能しません。
  • 両方のコンピューターが同じドメインとアドレス範囲に存在します
  • 提供されたユーザー名とパスワードには、両方のマシンの管理者権限があります
  • 私は両方を試してみましたが、-waitどちらも機能しません。ユーザーが特権を持っているため、それを維持したいと思います。

私はVBSに習​​熟していませんが、スクリプトを調べて、リモートコンピューターでコマンドを実行するために使用されるすべての行であると思われるものを引き出しました。このスクリプトは、他の何千ものタスクでエラーなしで機能します。

m_strCommand =  MIGetTaskParam("RemoteProgName") & " " & MIGetTaskParam("Provider") & " " & FileTS
strScriptFolder = "C:\production\logs\RemoteExec"
strComputer=MIGetTaskParam("RemoteServer")
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objRemote = objSWbemLocator.ConnectServer(strComputer, "more\data", strUser, strPassword,"data", "moredata" )
Set objProcess = objRemote.Get("Win32_Process")
intReturnCode = objProcess.Create(m_strCommand, null, null, intProcessID)
Do Until i = 999
   Set colProcesses = objRemote.ExecQuery ("SELECT * FROM Win32_Process " & "WHERE ProcessID=" & intProcessID )
   If colProcesses.Count = 0  Then
    Exit Do
   End If
Loop
4

1 に答える 1

1

VBS のリモート WMI の場合、ImpersonationLevel と AuthenticationLevel の値を設定してみてください。

sComp = "."
Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate,authenticationLevel=pktPrivacy}!\\" & sComp & "\root\cimv2")

プロセスをリモートで実行したいと仮定すると、VBS で WMI を使用するのではなく、コンピューターの IP を WMIC コマンドに渡す場合、次のようなことができます。

On Error Resume Next
Set oWSH = CreateObject("WScript.Shell")  
For Each sComp In aComputers
  sCmd = "wmic /node:" & sComp & " path Win32_Process call create \"cmd /c tasklist | sort & pause\""  
  iRC = oWSH.Run(sCmd, 1, True)
  If Err.Number <> 0 Then 
    MsgBox "ERROR: (" & CStr(Err.Number) & ") " & Err.Source & vbCrLf & Err.Description, vbOkOnly, "WMI Remote Error"
    Err.Clear 
  End If   
Next

実行するコマンドを必要なものに変更するだけです。

于 2012-08-31T23:51:48.353 に答える