GuestProcessManager.StartProgramInGuest 不能 运行 来宾中的 powershell 块 os
GuestProcessManager.StartProgramInGuest cannot run powershell block in guest os
我想要 运行 一个将最后修补日期保存到用户环境变量的 powershell 块,但我尝试了 cmd.exe 和 powersehll.exe,只看到任务管理器中的进程来宾 os,但环境变量中没有任何内容。
这是我的代码:
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);
我想要 运行 一个将最后修补日期保存到用户环境变量的 powershell 块,但我尝试了 cmd.exe 和 powersehll.exe,只看到任务管理器中的进程来宾 os,但环境变量中没有任何内容。
这是我的代码:
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);