Sign in to follow this  
Followers 0
coffeysm

Trying to create VM in Hyper-V with AutoIT

11 posts in this topic

#1 ·  Posted (edited)

I'm relatively new to AutoIT, but very familiar with Unix and Perl Scripting and even VBScript. I am having an issue converting this to AutoIT though was wondering if someone could point me in the right direction? I am having issues with the second spawn command and not sure where to look next.

Option Explicit

Dim HyperVServer

Dim VMName

Dim WMIService

Dim VSManagementService

Dim VSGlobalSettingData

Dim Result

Dim Job

Dim InParam

Dim OutParam

'Prompt for the Hyper-V Server to use

HyperVServer = InputBox("Specify the Hyper-V Server to create the virtual machine on:")

'Prompt for the new VM name

VMName = InputBox("Specify the name for the new virtual machine:")

'Get an instance of the WMI Service in the virtualization namespace.

Set WMIService = GetObject("winmgmts:\\" & HyperVServer & "\root\virtualization")

'Get the VirtualSystemManagementService object

Set VSManagementService = WMIService.ExecQuery("SELECT * FROM Msvm_VirtualSystemManagementService").ItemIndex(0)

' Initialize a new global settings for the VM

Set VSGlobalSettingData = WMIService.Get("Msvm_VirtualSystemGlobalSettingData").SpawnInstance_()

'Set the VM name

VSGlobalSettingData.ElementName = VMName

'Setup the input parameter list

Set InParam = VSManagementService.Methods_("DefineVirtualSystem").InParameters.SpawnInstance_()

InParam.SystemSettingData = VSGlobalSettingData.GetText_(1)

'Execute the method and store the results in OutParam

Set OutParam = VSManagementService.ExecMethod_("DefineVirtualSystem", InParam)

'Check to see if the job completed synchronously

if (OutParam.ReturnValue = 0) then

Wscript.Echo "Virtual machine created."

elseif (OutParam.ReturnValue <> 4096) then

Wscript.Echo "Failed to create virtual machine"

else

'Get the job object

set Job = WMIService.Get(OutParam.Job)

'Wait for the job to complete (3 == starting, 4 == running)

while (Job.JobState = 3) or (Job.JobState = 4)

Wscript.Echo Job.PercentComplete

WScript.Sleep(1000)

'Refresh the job object

set Job = WMIService.Get(OutParam.Job)

Wend

'Provide details if the job fails (7 == complete)

if (Job.JobState <> 7) then

Wscript.Echo "Failed to create virtual machine"

Wscript.Echo "ErrorCode:" & Job.ErrorCode

Wscript.Echo "ErrorDescription:" & Job.ErrorDescription

else

Wscript.Echo "Virtual machine created."

end If

end if

Edited by coffeysm

Share this post


Link to post
Share on other sites



Is this a vbscript?

Share this post


Link to post
Share on other sites

What do you mean by "I am having issues with the second spawn command"?

I assume you have converted this VBScript example to AutoIt and now get an error when running the script. What error messages do you get?


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

Is this a vbscript?

Yes, the original is VBScript and I am trying to get it to work under AutoIT.

Share this post


Link to post
Share on other sites

What do you mean by "I am having issues with the second spawn command"?

I assume you have converted this VBScript example to AutoIt and now get an error when running the script. What error messages do you get?

Yea, I have it running upto here:

Set InParam = VSManagementService.Methods_("DefineVirtualSystem").InParameters.SpawnInstance_()

I get an error about invalid object or something it's an WMI method.

This is what I have in AutoIT so far:

$objWMI = ObjGet("winmgmts:\\localhost\root\virtualization")

$VSManagementService = $ObjWMI.ExecQuery("SELECT * FROM Msvm_VirtualSystemManagementService", "WQL", 0x10 + 0x20)

$VSGlobalSettingData = $ObjWMI.Get("Msvm_VirtualSystemGlobalSettingData").SpawnInstance_()

$VSGlobalSettingData.ElementName = "Test3"

$InParam = $VSManagementService.Methods_("DefineVirtualSystem").inParameters.SpawnInstance_() ; This is the line I am having issues with

$InParam.SystemSettingData = $VSGlobalSettingData.GetText_(1)

Msgbox(0,"test",$VSGlobalSettingData.GetText_(1))

Share this post


Link to post
Share on other sites

What exactly do you mean by "having issues"? Do you get an error message? Do you get wrong results? M

My crystal ball seems a bit foggy today.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

I get an error saying "Test.au3 (7) => The Requested action with this object has failed."

$InParam = $VSManagementService.Methods_("DefineVirtualSystem").inParameters.SpawnInstance_()

$InParam = $VSManagementService.Methods_("DefineVirtualSystem")^ERROR

Share this post


Link to post
Share on other sites

Is it possible that inParameters should be InParameters? Some times case is important.


If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Share this post


Link to post
Share on other sites

I tried that and I get the same error.

Share this post


Link to post
Share on other sites

Is your query, in this line $VSManagementService = $ObjWMI.ExecQuery("SELECT * FROM Msvm_VirtualSystemManagementService", "WQL", 0x10 + 0x20), written correctly? I don't deal much with objects, but the syntax is different from the VBScript code above.


If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Share this post


Link to post
Share on other sites

I figured it out that's what it was, I forgot to include ItemIndex(0)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0