2017-04-11 34 views
0

我想运行一个PowerShell块,去年修补日期保存到用户环境变量,但我想双方的cmd.exe和powersehll.exe,只看到在任务管理器的进程guest os,但环境变量中没有任何内容。GuestProcessManager.StartProgramInGuest不能在guest操作系统中运行PowerShell的块

这里是我的代码:

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); 
    } 

不知道哪里出了问题,或者还有另一种方式来获得执行一些脚本块,并获得价值?

+0

“指令”没有做你仿佛觉得它..如果你这样做“cmd.exe的-command目录”什么也没有发生。我猜这就是为什么你的环境变量永远不会显示你可能想要“/ K ...” – BugFinder

+0

感谢您的帖子,但它仍然无法正常工作。唯一我们成功的方法是打开guest虚拟机的电源策略('set-executionpolicy remotesigned'),然后使用power shell运行一个文件。'var arguments =“-command \”[pathoffile.ps1 \“”;' – even

回答

0

最后,我使其运行。 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); 
相关问题