Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GuestProcess Manager.StartProgramingTest无法在来宾操作系统中运行powershell块_C#_Powershell_Vmware - Fatal编程技术网

C# GuestProcess Manager.StartProgramingTest无法在来宾操作系统中运行powershell块

C# GuestProcess Manager.StartProgramingTest无法在来宾操作系统中运行powershell块,c#,powershell,vmware,C#,Powershell,Vmware,我想运行powershell块,将上次修补的日期保存到用户环境变量,但我尝试了cmd.exe和powersehl.exe,只在来宾操作系统的任务管理器中看到了进程,但环境变量中没有显示任何内容 以下是我的代码: var userName = "name"; var password = "password"; var programPath = "C:\\Windows\\System32\\cmd.exe"; //var programPath = "C:\\Windows\\System32

我想运行powershell块,将上次修补的日期保存到用户环境变量,但我尝试了cmd.exe和powersehl.exe,只在来宾操作系统的任务管理器中看到了进程,但环境变量中没有显示任何内容

以下是我的代码:

var userName = "name";
var password = "password";
var programPath = "C:\\Windows\\System32\\cmd.exe";
//var programPath = "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe";
var arguments = "-command \"powershell \"[Environment]::SetEnvironmentVariable('LastPathedDate', ((Get - HotFix | sort installedon)[-1]).InstalledOn, 'User')\"\"";
//var arguments = "-command \"[Environment]::SetEnvironmentVariable('LastPathedDate', ((Get - HotFix | sort installedon)[-1]).InstalledOn, 'User')\"";
RunProgramInGuest(vm, userName, password, programPath, arguments);
private void RunProgramInGuest(VirtualMachine vm, string username, string password, string programPath, string arguments)
    {
        var auth = new NamePasswordAuthentication()
        {
            Username = username,
            Password = password,
            //InteractiveSession = true
        };

        var moRef = new ManagedObjectReference("guestOperationsProcessManager");
        GuestProgramSpec spec = new GuestProgramSpec()
        {
            ProgramPath = programPath,
            Arguments = arguments
        };

        var guestProcessManager = new GuestProcessManager(vCenter, moRef);
        var pid = guestProcessManager.StartProgramInGuest(vm.MoRef, auth, spec);

        var result = guestProcessManager.ReadEnvironmentVariableInGuest(vm.MoRef, auth, new string[] { "LastPatchedDate", "TEMP" });
        guestProcessManager.TerminateProcessInGuest(vm.MoRef, auth, pid);
    }
不确定问题出在哪里,或者有其他方法来获取执行某个脚本块并获取值?

最后,我让它运行。 cmd.exe无法执行脚本,但powershell.exe可以。 有效的论点是:

var arguments = "invoke-command -scriptblock {[Environment]::SetEnvironmentVariable('LastPatchedDate', (((Get-HotFix | sort installedon)[-1]).InstalledOn), 'User')}";
另一个发现是,在使用cmd.exe时,可能需要根据参数终止进程。但是powershell.exe不需要这样做

guestProcessManager.TerminateProcessInGuest(vm.MoRef, auth, pid);

“-command”并不像你想象的那样。。如果执行“cmd.exe-command dir”,则不会发生任何情况。我猜这就是为什么您的环境变量从未显示您可能想要“/k…”谢谢您的帖子,但它仍然不起作用。我们成功的唯一方法是打开来宾的power策略(“set-executionpolicy remotesigned”),然后使用power shell运行一个文件。“var arguments=“-command\”[pathoffile.ps1\”;”