C# GuestProcess Manager.StartProgramingTest无法在来宾操作系统中运行powershell块
我想运行powershell块,将上次修补的日期保存到用户环境变量,但我尝试了cmd.exe和powersehl.exe,只在来宾操作系统的任务管理器中看到了进程,但环境变量中没有显示任何内容 以下是我的代码: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
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\”;”