Méthode AddKvpItems de la classe Msvm_VirtualSystemManagementService
Ajoute des paires clé-valeur à une machine virtuelle.
Syntaxe
uint32 AddKvpItems(
[in] CIM_ComputerSystem REF TargetSystem,
[in] string DataItems[],
[out] CIM_ConcreteJob REF Job
);
Paramètres
-
TargetSystem [in]
-
Type : CIM_ComputerSystem
Référence à un objet CIM_ComputerSystem qui représente la machine virtuelle sur laquelle les paires clé-valeur seront ajoutées.
-
DataItems [in]
-
Type : string[]
Tableau de paires clé-valeur à ajouter. Chaque élément du tableau est un instance incorporé de la classe Msvm_KvpExchangeDataItem. Cette méthode échoue si l’une des paires clé-valeur spécifiées existe déjà sur le système cible. Ce tableau peut contenir au maximum 128 éléments.
-
Travail [out]
-
Type : CIM_ConcreteJob
Si l’opération est effectuée de manière asynchrone, cette méthode retourne 4096 et ce paramètre contient une référence à un objet dérivé de CIM_ConcreteJob.
Valeur retournée
Type : uint32
Cette méthode retourne l’une des valeurs suivantes.
-
Terminé avec aucune erreur (0)
-
Paramètres de méthode vérifiés - Travail démarré (4096)
-
Échec (32768)
-
Accès refusé (32769)
-
Non pris en charge (32770)
-
L’état est inconnu (32771)
-
Délai d’expiration (32772)
-
Paramètre non valide (32773)
-
Le système est en cours d’utilisation (32774)
-
État non valide pour cette opération (32775)
-
Type de données incorrect (32776)
-
Le système n’est pas disponible (32777)
-
Mémoire insuffisante (32778)
Notes
L’accès à la classe Msvm_VirtualSystemManagementService peut être limité par le filtrage UAC. Pour plus d’informations, consultez Contrôle de compte d’utilisateur et WMI.
Exemples
L’exemple C# suivant ajoute des paires clé-valeur à une machine virtuelle. Les utilitaires référencés se trouvent dans Utilitaires communs pour les exemples de virtualisation (V2).
Important
Pour fonctionner correctement, le code suivant doit être exécuté sur le serveur hôte de la machine virtuelle et doit être exécuté avec des privilèges d’administrateur.
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’exemple Visual Basic Scripting Edition (VBScript) suivant ajoute des paires clé-valeur à une machine virtuelle.
Important
Pour fonctionner correctement, le code suivant doit être exécuté sur le serveur hôte de la machine virtuelle et doit être exécuté avec des privilèges d’administrateur.
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
Spécifications
Condition requise | Valeur |
---|---|
Client minimal pris en charge |
Windows 8 [applications de bureau uniquement] |
Serveur minimal pris en charge |
Windows Server 2012 [applications de bureau uniquement] |
Espace de noms |
Root\Virtualization\V2 |
MOF |
|
DLL |
|