Metodo AddKvpItems della classe Msvm_VirtualSystemManagementService
Aggiunge coppie chiave-valore a una macchina virtuale.
Sintassi
uint32 AddKvpItems(
[in] CIM_ComputerSystem REF TargetSystem,
[in] string DataItems[],
[out] CIM_ConcreteJob REF Job
);
Parametri
-
TargetSystem [in]
-
Tipo: CIM_ComputerSystem
Riferimento a un oggetto CIM_ComputerSystem che rappresenta la macchina virtuale in cui verranno aggiunte le coppie chiave-valore.
-
DataItems [in]
-
Tipo: string[]
Matrice di coppie chiave-valore da aggiungere. Ogni elemento della matrice è un'istanza incorporata della classe Msvm_KvpExchangeDataItem . Questo metodo ha esito negativo se una delle coppie chiave-valore specificate esiste già nel sistema di destinazione. Questa matrice può contenere al massimo 128 elementi.
-
Processo [out]
-
Tipo: CIM_ConcreteJob
Se l'operazione viene eseguita in modo asincrono, questo metodo restituirà 4096 e questo parametro conterrà un riferimento a un oggetto derivato da CIM_ConcreteJob.
Valore restituito
Tipo: uint32
Questo metodo restituisce uno dei valori seguenti.
-
Completato senza errore (0)
-
Parametri del metodo controllati - Processo avviato (4096)
-
Errore (32768)
-
Accesso negato (32769)
-
Non supportato (32770)
-
Lo stato è sconosciuto (32771)
-
Timeout (32772)
-
Parametro non valido (32773)
-
Il sistema è in uso (32774)
-
Stato non valido per questa operazione (32775)
-
Tipo di dati non corretto (32776)
-
Il sistema non è disponibile (32777)
-
Memoria insufficiente (32778)
Commenti
L'accesso alla classe Msvm_VirtualSystemManagementService potrebbe essere limitato dal filtro dell'interfaccia utente. Per altre informazioni, vedere Controllo account utente e WMI.
Esempio
L'esempio C# seguente aggiunge coppie chiave-valore a una macchina virtuale. Le utilità a cui si fa riferimento sono disponibili nelle utilità comuni per gli esempi di virtualizzazione (V2).
Importante
Per funzionare correttamente, il codice seguente deve essere eseguito nel server host della macchina virtuale e deve essere eseguito con privilegi di amministratore.
public static void AddKvpItems(string vmName, string itemName, string itemValue)
{
ManagementScope scope = new ManagementScope(@"root\virtualization\v2", null);
ManagementObject virtualSystemService = Utility.GetServiceObject(scope, "Msvm_VirtualSystemManagementService");
ManagementBaseObject inParams = virtualSystemService.GetMethodParameters("AddKvpItems");
ManagementClass kvpExchangeDataItem = new ManagementClass(scope, new ManagementPath("Msvm_KvpExchangeDataItem"), null);
ManagementObject dataItem = kvpExchangeDataItem.CreateInstance();
dataItem["Data"] = itemValue;
dataItem["Name"] = itemName;
dataItem["Source"] = 0;
string[] dataItems = new string[1];
dataItems[0] = dataItem.GetText(TextFormat.CimDtd20);
ManagementObject vm = Utility.GetTargetComputer(vmName, scope);
inParams["TargetSystem"] = vm.Path.Path;
inParams["DataItems"] = dataItems;
ManagementBaseObject outParams = virtualSystemService.InvokeMethod("AddKvpItems", inParams, null);
if ((UInt32)outParams["ReturnValue"] == ReturnCode.Started)
{
if (Utility.JobCompleted(outParams, scope))
{
Console.WriteLine("Resources were added successfully.");
}
else
{
Console.WriteLine("Failed to add resources");
}
}
else if ((UInt32)outParams["ReturnValue"] == ReturnCode.Completed)
{
Console.WriteLine("Resources were added successfully.");
}
else
{
Console.WriteLine("Add virtual system Kvp items failed with error {0}", outParams["ReturnValue"]);
}
if (inParams != null)
{
inParams.Dispose();
}
if (outParams != null)
{
outParams.Dispose();
}
}
L'esempio Visual Basic Scripting Edition (VBScript) seguente aggiunge coppie chiave-valore a una macchina virtuale.
Importante
Per funzionare correttamente, il codice seguente deve essere eseguito nel server host della macchina virtuale e deve essere eseguito con privilegi di amministratore.
option explicit
dim objWMIService
dim managementService
dim fileSystem
const JobStarting = 3
const JobRunning = 4
const JobCompleted = 7
const wmiStarted = 4096
const wmiSuccessful = 0
Main()
'-----------------------------------------------------------------
' Main
'-----------------------------------------------------------------
Sub Main()
dim computer, vmName, itemName, itemValue, myVm, objArgs
set fileSystem = Wscript.CreateObject("Scripting.FileSystemObject")
computer = "."
set objWMIService = GetObject("winmgmts:\\" & computer & "\root\virtualization\v2")
set managementService = objWMIService.ExecQuery("select * from Msvm_VirtualSystemManagementService").ItemIndex(0)
set objArgs = WScript.Arguments
if WScript.Arguments.Count = 3 then
vmName = objArgs.Unnamed.Item(0)
itemName = objArgs.Unnamed.Item(1)
itemValue = objArgs.Unnamed.Item(2)
else
WScript.Echo "usage: cscript AddKvpItems.vbs vmName itemName itemValue"
WScript.Quit(1)
end if
set myVm = GetComputerSystem(vmName)
if AddKvpItems(myVm, itemName, itemValue) then
WriteLog "Done"
WScript.Quit(0)
else
WriteLog "AddKvpItems failed"
WScript.Quit(1)
end if
End Sub
'-----------------------------------------------------------------
' Retrieve Msvm_VirtualComputerSystem from base on its ElementName
'-----------------------------------------------------------------
Function GetComputerSystem(vmElementName)
On Error Resume Next
dim query
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
'-----------------------------------------------------------------
' AddKvpItems
'-----------------------------------------------------------------
Function AddKvpItems(computerSystem, itemName, itemValue)
dim dataItem, dataItems, objInParam, objOutParams
AddKvpItems = false
set dataItem = objWMIService.Get("Msvm_KvpExchangeDataItem").SpawnInstance_()
dataItem.Data = itemValue
dataItem.Name = itemName
dataItem.Source = 0
dataItems = Array(1)
dataItems(0) = dataItem.GetText_(1)
set objInParam = managementService.Methods_("AddKvpItems").InParameters.SpawnInstance_()
objInParam.TargetSystem = computerSystem.Path_.Path
objInParam.DataItems = dataItems
set objOutParams = managementService.ExecMethod_("AddKvpItems", objInParam)
if objOutParams.ReturnValue = wmiStarted then
if (WMIJobCompleted(objOutParams)) then
AddKvpItems = true
end if
elseif (objOutParams.ReturnValue = wmiSuccessful) then
AddKvpItems = true
else
WriteLog Format1("AddKvpItem failed with error {0}", objOutParams.ReturnValue)
end if
End Function
'-----------------------------------------------------------------
' Handle wmi Job object
'-----------------------------------------------------------------
Function WMIJobCompleted(outParam)
dim WMIJob, jobState
WMIJobCompleted = true
set WMIJob = objWMIService.Get(outParam.Job)
jobState = WMIJob.JobState
while jobState = JobRunning or jobState = JobStarting
WriteLog Format1("In progress... {0}% completed.",WMIJob.PercentComplete)
WScript.Sleep(1000)
set WMIJob = objWMIService.Get(outParam.Job)
jobState = WMIJob.JobState
wend
if (WMIJob.JobState <> JobCompleted) then
WriteLog Format1("ErrorDescription:{0}", WMIJob.ErrorDescription)
WriteLog Format1("ErrorCode:{0}", WMIJob.ErrorCode)
WMIJobCompleted = false
end if
End Function
'-----------------------------------------------------------------
' Create the console log files.
'-----------------------------------------------------------------
Sub WriteLog(line)
dim fileStream
set fileStream = fileSystem.OpenTextFile(".\AddKvpItems.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
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato |
Windows 8 [solo app desktop] |
Server minimo supportato |
Windows Server 2012 [solo app desktop] |
Spazio dei nomi |
Root\Virtualization\V2 |
MOF |
|
DLL |
|