1

次のコードは、スクリプトが現在のマシンで実行されたときに機能します(現在、スクリプトは渡された引数を表示する単純なメッセージボックスです)

Arguments:

UserName = Nothing
Password = Nothing
RemoteMachineName = "CurrentMachineName"
PathBashFile = "Path/To/My/Local/Script.ps1"
Params = "parameter1"

ただし、リモートコンピューターでローカルスクリプトを実行したい場合、スクリプトが実際に実行されることはありません。コードは例外をスローしません。

Arguments:

UserName = "MyUsername"
Password = "MyPassword"
RemoteMachineName = "RemoteMachineName"
PathBashFile = "Path/To/My/Local/Script.ps1"
Params = "parameter1"

結果として私が持っているのは:

outParams("processId") = Nothing
outParams("returnValue") = 8

どうしたの?スクリプトがリモートマシンで期待どおりに実行されないのはなぜですか?(どちらのマシンでもメッセージボックスは表示されません。他のコマンドレットを試しましたが、機能しません)

コードは次のとおりです。

Try
    connOptions = New ConnectionOptions()
    connOptions.Username = UserName
    connOptions.Password = Password

    connOptions.Impersonation = ImpersonationLevel.Impersonate
    connOptions.Authentication = Management.AuthenticationLevel.PacketPrivacy

    managementPath = New ManagementPath("\\" & RemoteMachineName & "\root\cimv2:Win32_Process")

    Scope = New ManagementScope(managementPath, connOptions)
    Scope.Connect()
    objectGetOptions = New ObjectGetOptions()
    processClass = New ManagementClass(Scope, New ManagementPath("root\cimv2:Win32_Process"), objectGetOptions)

    inParams = processClass.GetMethodParameters("Create")
    inParams("CommandLine") = "cmd.exe /c powershell """ & PathBashFile & """ " & params
    inParams("CurrentDirectory") = workingDirectoryPath
    outParams = processClass.InvokeMethod("Create", inParams, Nothing)
    MsgBox(outParams("processId") & "   " & outParams("returnValue"))

Catch ex As Exception
    Throw New Exception("[ExecuteRemoteBashFile] " & ex.Message)
End Try

誰かが私のコードの間違いを指摘することができれば、それは大いにありがたいです!

4

1 に答える 1

0

コンソールがそれを探す場所を知っていると仮定する代わりに、powershell.exeへの完全なパスを配置することで問題を解決しました...

inParams("CommandLine") = "cmd.exe /c C:\Windows\System32\WindowsPowerShell\v2.0\powershell.exe """ & PathBashFile & """ " & params
于 2012-11-07T19:45:23.437 に答える