GuestProcessManager.StartProgramInGuest不能在guest操作系统中运行PowerShell的块
问题描述:
我想运行一个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);
}
不知道哪里出了问题,或者还有另一种方式来获得执行一些脚本块,并获得价值?
答
最后,我使其运行。 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);
“指令”没有做你仿佛觉得它..如果你这样做“cmd.exe的-command目录”什么也没有发生。我猜这就是为什么你的环境变量永远不会显示你可能想要“/ K ...” –
BugFinder
感谢您的帖子,但它仍然无法正常工作。唯一我们成功的方法是打开guest虚拟机的电源策略('set-executionpolicy remotesigned'),然后使用power shell运行一个文件。'var arguments =“-command \”[pathoffile.ps1 \“”;' – even