Создайте снимок с помощью WMI в C # с помощью пространства имен microsoft.management.infrastructure

Многие описания в Интернете не упоминают, что указать Access-Control-Allow-Origin недостаточно. Вот полный пример, который работает для меня:

<?php
    if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
        header('Access-Control-Allow-Origin: *');
        header('Access-Control-Allow-Methods: POST, GET, DELETE, PUT, PATCH, OPTIONS');
        header('Access-Control-Allow-Headers: token, Content-Type');
        header('Access-Control-Max-Age: 1728000');
        header('Content-Length: 0');
        header('Content-Type: text/plain');
        die();
    }

    header('Access-Control-Allow-Origin: *');
    header('Content-Type: application/json');

    $ret = [
        'result' => 'OK',
    ];
    print json_encode($ret);
0
задан Davidek 5 March 2019 в 15:25
поделиться

1 ответ

Вам нужно будет создать пустой CimInstance соответствующего типа и использовать метод Add коллекции CimInstanceProperties, чтобы добавить необходимые свойства ключа. Затем используйте метод GetInstance класса CimSession, чтобы получить полный CimInstance со всеми его заполненными данными. Необходимые ключевые свойства задокументированы онлайн для каждого класса, но я сталкивался с ситуациями, когда документация неполная. Чтобы автоматически создаваемая документация не отвлекала вас от того, что вы видите своими глазами, я рекомендую просмотреть свойство __RELPATH для экземпляра класса WMI, на который вы нацелены. Это обеспечит пары ключ-значение.

В PowerShell:

gwmi -Namespace root\virtualization\v2 -Class Msvm_VirtualSystemSnapshotService | select __relpath | fl

, чтобы получить ...

__RELPATH : Msvm_VirtualSystemSnapshotService.CreationClassName="Msvm_VirtualSystemSnapsho
            tService",Name="vssnapsvc",SystemCreationClassName="Msvm_ComputerSystem",Syste
            mName="MYHOSTNAME"

Что означает в C #, вам нужно сделать это:

// Using Microsoft.Management.Infrastructure
private const string _namespace = @"root\virtualization\v2";
private const string _hypervHost = "MYHOSTNAME";

using (var cimSession = CimSession.Create(_hyperVHost))
{
    // Create generic instance with no instance data
    var keyInstance = new CimInstance("Msvm_VirtualSystemSnapshotService");
    // Attach key CimProperties
    keyInstance.CimInstanceProperties.Add(CimProperty.Create("CreationClassName", "Msvm_VirtualSystemSnapshotService", CimFlags.Key));
    keyInstance.CimInstanceProperties.Add(CimProperty.Create("SystemCreationClassName", "Msvm_ComputerSystem", CimFlags.Key));
    keyInstance.CimInstanceProperties.Add(CimProperty.Create("Name", "vssnapsvc", CimFlags.Key));
    keyInstance.CimInstanceProperties.Add(CimProperty.Create("SystemName", _hyperVHost, CimFlags.Key));
    // Retrieve the object
    snapShotService = cimSession.GetInstance(_namespace, keyInstance);
}
0
ответ дан Chris Thompson 5 March 2019 в 15:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: