HRESULT
RunScriptInGuest([in] BSTR interpreter,
[in] BSTR scriptText,
[in] LONG options,
[in] IVixHandle* propertyList,
[in] ICallback* jobDoneCallback,
[out,retval] IJob** runJob);
This function runs a script in the guest operating system.
VBScript:Dim lib Dim host Dim job Dim vm Dim result Set lib = CreateObject("VixCOM.VixLib") Set job = lib.Connect(VixCOM.Constants.VIX_API_VERSION, VixCOM.Constants.VIX_SERVICEPROVIDER_VMWARE_WORKSTATION, Empty, 0, Empty, Empty, 0, Nothing, Nothing) ' results needs to be initialized before it's used, even if it's just going to be overwritten. Set results = Nothing err = job.Wait(Array(VixCOM.Constants.VIX_PROPERTY_JOB_RESULT_HANDLE), results) If lib.ErrorIndicatesFailure(err) Then ' Handle the error... End If Set host = results(0) Set job = host.OpenVM("c:\Virtual Machines\vm1\win2000.vmx", Nothing) err = job.Wait(Array(VixCOM.Constants.VIX_PROPERTY_JOB_RESULT_HANDLE), results) If lib.ErrorIndicatesFailure(err) Then ' Handle the error... End If Set vm = results(0) Set job = vm.PowerOn(VixCOM.Constants.VIX_VMPOWEROP_LAUNCH_GUI, Nothing, Nothing) err = job.WaitWithoutResults() If lib.ErrorIndicatesFailure(err) Then ' Handle the error... End If Set job = vm.WaitForToolsInGuest(300, Nothing) err = job.WaitWithoutResults() If lib.ErrorIndicatesFailure(err) Then ' Handle the error... End If Set job = vm.LoginInGuest("vixuser", "secret", 0, Nothing) err = job.WaitWithoutResults() If lib.ErrorIndicatesFailure(err) Then ' Handle the error... End If Dim scriptText scriptText = "if (!open IN, ""<"", ""in.txt"") { die ""failed to open input file""};\n" scriptText = scriptText & "if (!open OUT, "">"", ""out.txt"") { die ""failed to open output file""};\n" scriptText = scriptText & "@input = <IN>;\n" scriptText = scriptText & "@reverse = reverse @input;\n" scriptText = scriptText & "print OUT @reverse;\n" Set job = vm.RunScriptInGuest("c:\perl\perl.exe", scriptText, 0, Nothing, Nothing) err = job.WaitWithoutResults() If lib.ErrorIndicatesFailure(err) Then ' Handle the error... End If Set results = Nothing Set job = Nothing Set vm = Nothing host.Disconnect()C#:class Program { static void Main(string[] args) { VixCOM.VixLibClass lib = new VixCOM.VixLibClass(); UInt64 err; object results = null; VixCOM.IJob job = lib.Connect(VixCOM.Constants.VIX_API_VERSION, VixCOM.Constants.VIX_SERVICEPROVIDER_VMWARE_WORKSTATION, null, 0, null, null, 0, null, null); err = job.Wait(new int[] { VixCOM.Constants.VIX_PROPERTY_JOB_RESULT_HANDLE }, ref results); if (lib.ErrorIndicatesFailure(err)) { // Handle the error... } VixCOM.IHost host = (VixCOM.IHost)((object[])results)[0]; CloseVixObject(job); job = host.OpenVM("c:\\Virtual Machines\\vm1\\win2000.vmx", null); err = job.Wait(new int[] { VixCOM.Constants.VIX_PROPERTY_JOB_RESULT_HANDLE }, ref results); if (lib.ErrorIndicatesFailure(err)) { // Handle the error... } VixCOM.IVM2 vm = (VixCOM.IVM2)((object[])results)[0]; CloseVixObject(job); job = vm.PowerOn(VixCOM.Constants.VIX_VMPOWEROP_LAUNCH_GUI, null, null); job.WaitWithoutResults(); if (lib.ErrorIndicatesFailure(err)) { // Handle the error... } CloseVixObject(job); // Wait up to 300 seconds for tools to start job = vm.WaitForToolsInGuest(300, null); err = job.WaitWithoutResults(); if (lib.ErrorIndicatesFailure(err)) { // Handle the error... } CloseVixObject(job); job = vm.LoginInGuest("vixuser", "secret", 0, null); err = job.WaitWithoutResults(); if (lib.ErrorIndicatesFailure(err)) { // Handle the error... } CloseVixObject(job); string perlScript = ""; // Fill perlScript with desired perl script text job = vm.RunScriptInGuest("c:\\perl\\perl.exe", perlScript, 0, null, null); err = job.WaitWithoutResults(); if (lib.ErrorIndicatesFailure(err)) { // Handle the error... } CloseVixObject(job); CloseVixObject(vm); host.Disconnect(); } static void CloseVixObject(Object vixObject) { try { ((IVixHandle2)vixObject).Close(); } catch(Exception) { //Close is not supported in this version of Vix COM - Ignore } } }