Método RequestStateChange de la clase Msvm_ComputerSystem
Solicita que el estado de la máquina virtual se cambie al valor especificado. Invocar el método RequestStateChange varias veces podría dar lugar a que las solicitudes anteriores se sobrescriban o pierdan. Este método solo se admite para instancias de la clase Msvm_ComputerSystem que representan una máquina virtual.
Mientras el cambio de estado está en curso, la propiedad RequestedState se cambia al valor del parámetro RequestedState .
Sintaxis
uint32 RequestStateChange(
[in] uint16 RequestedState,
[out] CIM_ConcreteJob REF Job,
[in] datetime TimeoutPeriod
);
Parámetros
-
RequestedState [in]
-
Tipo: uint16
El nuevo estado. Los valores mayores que 32767 son valores propuestos por DMTF y están sujetos a cambios.
Estos son los valores posibles:
-
Otros (1)
-
Corresponde a CIM_EnabledLogicalElement.EnabledState = Otros.
-
Habilitado (2)
-
Corresponde a CIM_EnabledLogicalElement.EnabledState = Enabled.
-
Deshabilitado (3)
-
Corresponde a CIM_EnabledLogicalElement.EnabledState = Disabled.
-
Apagar (4)
-
Válido solo en la versión 1 (V1) de Hyper-V. La máquina virtual se apaga a través del servicio de apagado. Corresponde a CIM_EnabledLogicalElement.EnabledState = ShuttingDown.
-
Sin conexión (6)
-
Corresponde a CIM_EnabledLogicalElement.EnabledState = Habilitado pero sin conexión.
-
Prueba (7)
-
Aplazar (8)
-
Quiesce (9)
-
Corresponde a CIM_EnabledLogicalElement.EnabledState = Quiesce, Habilitado pero en pausa.
-
Reinicio (10)
-
Transición de estado de Desactivado o Guardado a En ejecución.
-
Restablecimiento (11)
-
Restablezca la máquina virtual. Corresponde a CIM_EnabledLogicalElement.EnabledState = Reset.
-
Guardar (32773)
-
En la versión 1 (V1) de Hyper-V, corresponde a EnabledStateSaving.
-
Pausa (32776)
-
En la versión 1 (V1) de Hyper-V, corresponde a EnabledStatePausing.
-
Reanudación (32777)
-
En la versión 1 (V1) de Hyper-V, corresponde a EnabledStateResuming. Transición de estado de Pausa a En ejecución.
-
FastSaved (32779)
-
Corresponde a EnabledStateFastSuspend.
-
FastSaving (32780)
-
Corresponde a EnabledStateFastSuspending. Transición de estado de Running a FastSaved.
Estos valores representan estados críticos:
RunningCritical (32781)
OffCritical (32782)
DetenerCritical (32783)
SavedCritical (32784)
PausedCritical (32785)
StartingCritical (32786)
ResetCritical (32787)
SavingCritical (32788)
PausingCritical (32789)
ResumingCritical (32790)
FastSavedCritical (32791)
FastSavingCritical (32792)
Trabajo [salida]
Tipo: CIM_ConcreteJob
Referencia opcional a un objeto Msvm_ConcreteJob que se devuelve si la operación se ejecuta de forma asincrónica. Si está presente, la referencia devuelta se puede usar para supervisar el progreso y obtener el resultado del método .
TimeoutPeriod [in]
Tipo: datetime
Este parámetro no se utiliza.
Valor devuelto
Tipo: uint32
Este método devuelve uno de los valores siguientes.
Código o valor devuelto | Descripción |
---|---|
|
Correcto. |
|
La transición es asincrónica. |
|
Acceso denegado. |
|
|
|
|
|
|
|
|
|
|
|
|
|
No se admite el valor especificado en el parámetro RequestedState . |
|
|
|
|
|
Observaciones
El acceso a la clase Msvm_ComputerSystem puede estar restringido por el filtrado de UAC. Para obtener más información, consulte Control de cuentas de usuario y WMI.
Ejemplos
En el ejemplo de C# siguiente se inicia o deshabilita una máquina virtual. Las utilidades a las que se hace referencia se pueden encontrar en Utilidades comunes para los ejemplos de virtualización (V2).
Importante
Para funcionar correctamente, el código siguiente debe ejecutarse en el servidor host de la máquina virtual y debe ejecutarse con privilegios de administrador.
using System;
using System.Management;
namespace HyperVSamples
{
public class RequestStateChangeClass
{
public static void RequestStateChange(string vmName, string action)
{
ManagementScope scope = new ManagementScope(@"\\.\root\virtualization\v2", null);
ManagementObject vm = Utility.GetTargetComputer(vmName, scope);
if (null == vm)
{
throw new ArgumentException(
string.Format(
"The virtual machine '{0}' could not be found.",
vmName));
}
ManagementBaseObject inParams = vm.GetMethodParameters("RequestStateChange");
const int Enabled = 2;
const int Disabled = 3;
if (action.ToLower() == "start")
{
inParams["RequestedState"] = Enabled;
}
else if (action.ToLower() == "stop")
{
inParams["RequestedState"] = Disabled;
}
else
{
throw new Exception("Wrong action is specified");
}
ManagementBaseObject outParams = vm.InvokeMethod(
"RequestStateChange",
inParams,
null);
if ((UInt32)outParams["ReturnValue"] == ReturnCode.Started)
{
if (Utility.JobCompleted(outParams, scope))
{
Console.WriteLine(
"{0} state was changed successfully.",
vmName);
}
else
{
Console.WriteLine("Failed to change virtual system state");
}
}
else if ((UInt32)outParams["ReturnValue"] == ReturnCode.Completed)
{
Console.WriteLine(
"{0} state was changed successfully.",
vmName);
}
else
{
Console.WriteLine(
"Change virtual system state failed with error {0}",
outParams["ReturnValue"]);
}
}
public static void Main(string[] args)
{
if (args != null && args.Length != 2)
{
Console.WriteLine("Usage: <application> vmName action");
Console.WriteLine("action: start|stop");
return;
}
RequestStateChange(args[0], args[1]);
}
}
}
El siguiente ejemplo de Visual Basic Scripting Edition (VBScript) inicia o deshabilita una máquina virtual.
Importante
Para funcionar correctamente, el código siguiente debe ejecutarse en el servidor host de la máquina virtual y debe ejecutarse con privilegios de administrador.
dim objWMIService
dim fileSystem
const JobStarting = 3
const JobRunning = 4
const JobCompleted = 7
const wmiStarted = 4096
const Enabled = 2
const Disabled = 3
Main()
'-----------------------------------------------------------------
' Main routine
'-----------------------------------------------------------------
Sub Main()
set fileSystem = Wscript.CreateObject("Scripting.FileSystemObject")
strComputer = "."
set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\virtualization\v2")
set objArgs = WScript.Arguments
if WScript.Arguments.Count = 2 then
vmName= objArgs.Unnamed.Item(0)
action = objArgs.Unnamed.Item(1)
else
WScript.Echo "usage: cscript StartVM.vbs vmName start|stop"
WScript.Quit
end if
set computerSystem = GetComputerSystem(vmName)
if RequestStateChange(computerSystem, action) then
WriteLog "Done"
WScript.Quit(0)
else
WriteLog "RequestStateChange failed"
WScript.Quit(1)
end if
End Sub
'-----------------------------------------------------------------
' Retrieve Msvm_VirtualComputerSystem from base on its ElementName
'
'-----------------------------------------------------------------
Function GetComputerSystem(vmElementName)
On Error Resume Next
query = Format1("select * from Msvm_ComputerSystem where ElementName = '{0}'", vmElementName)
set GetComputerSystem = objWMIService.ExecQuery(query).ItemIndex(0)
if (Err.Number <> 0) then
WriteLog Format1("Err.Number: {0}", Err.Number)
WriteLog Format1("Err.Description:{0}",Err.Description)
WScript.Quit(1)
end if
End Function
'-----------------------------------------------------------------
' Turn on a virtual machine
'-----------------------------------------------------------------
Function RequestStateChange(computerSystem, action)
WriteLog Format2("RequestStateChange({0}, {1})", computerSystem.ElementName, action)
RequestStateChange = false
set objInParam = computerSystem.Methods_("RequestStateChange").InParameters.SpawnInstance_()
if action = "start" then
objInParam.RequestedState = Enabled
else
objInParam.RequestedState = Disabled
end if
set objOutParams = computerSystem.ExecMethod_("RequestStateChange", objInParam)
if (WMIMethodStarted(objOutParams)) then
if (WMIJobCompleted(objOutParams)) then
WriteLog Format1("VM {0} was started successfully", computerSystem.ElementName)
RequestStateChange = true
end if
end if
End Function
'-----------------------------------------------------------------
' Handle wmi return values
'-----------------------------------------------------------------
Function WMIMethodStarted(outParam)
WMIMethodStarted = false
if Not IsNull(outParam) then
wmiStatus = outParam.ReturnValue
if wmiStatus = wmiStarted then
WMIMethodStarted = true
end if
end if
End Function
'-----------------------------------------------------------------
' Handle wmi Job object
'-----------------------------------------------------------------
Function WMIJobCompleted(outParam)
dim WMIJob
set WMIJob = objWMIService.Get(outParam.Job)
WMIJobCompleted = true
jobState = WMIJob.JobState
while jobState = JobRunning or jobState = JobStarting
WScript.Sleep(1000)
set WMIJob = objWMIService.Get(outParam.Job)
jobState = WMIJob.JobState
wend
if (jobState <> JobCompleted) then
WriteLog Format1("ErrorDescription:{0}", WMIJob.ErrorDescription)
WMIJobCompleted = false
end if
End Function
'-----------------------------------------------------------------
' Create the console log files.
'-----------------------------------------------------------------
Sub WriteLog(line)
dim fileStream
set fileStream = fileSystem.OpenTextFile(".\StartVM.log", 8, true)
WScript.Echo line
fileStream.WriteLine line
fileStream.Close
End Sub
'------------------------------------------------------------------------------
' The string formatting functions to avoid string concatenation.
'------------------------------------------------------------------------------
Function Format2(myString, arg0, arg1)
Format2 = Format1(myString, arg0)
Format2 = Replace(Format2, "{1}", arg1)
End Function
'------------------------------------------------------------------------------
' The string formatting functions to avoid string concatenation.
'------------------------------------------------------------------------------
Function Format1(myString, arg0)
Format1 = Replace(myString, "{0}", arg0)
End Function
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible |
Windows 8 [solo aplicaciones de escritorio] |
Servidor mínimo compatible |
Windows Server 2012 [solo aplicaciones de escritorio] |
Espacio de nombres |
Root\Virtualization\V2 |
MOF |
|
Archivo DLL |
|