Использование Vix API для получения домена и списка пользователей виртуальной машины

Я пытаюсь использовать Vix API и пытаюсь получить некоторую информацию о виртуальных машинах, над которыми я работаю. Информация, которая мне нужна, - это домен, к которому подключена виртуальная машина, и список пользователей, которые зарегистрированы (то есть имеют доступ) к конкретной виртуальной машине. Я пытался использовать Google и документацию ( https://www.vmware.com/support/developer/vc-sdk/visdk2xpubs/ReferenceGuide/), но не могу найти, как получить эту информацию. Попытка выделить несколько объектов, которые могут содержать домен, но это не помогло.

1 ответ

Я не уверен, поможет ли это вам, но ниже приводится выдержка из небольшого проекта Delphi (который использует тот же интерфейс Vix COM/OLE, что и vbScript), который извлекает имя текущего пользователя из среды виртуальной машины Win7. Надеюсь, код будет легко перевести на vbScript или VBA. Очевидно, что вы можете получить значение любой другой переменной среды, например, домена пользователя, аналогичным образом.

Я довольно тщательно изучил Vix COM API и не нашел ничего, что могло бы получить список доступных идентификаторов входа для виртуальной машины. Поэтому, если бы мне пришлось это сделать, я бы написал небольшое служебное приложение для запуска на ВМ, чтобы получить их. (Возможно, вы уже знаете, но запустить приложение на виртуальной машине через интерфейс Vix просто.)

Код

type  
  TForm1 = class(TForm)
    [...]
    VixLib : IVixLib;
    Job : IJob;
    Host : IHost;
    VM : IVM;
    Err : Int64;
    vWaitParams : OleVariant;
    vResults : OleVariant;
    vValue : OleVariant;
    Msg : String;
  end;
[...]
procedure TForm1.GetUserName;
begin
  // Prior to calling this code, you need to have successfully called
  // LogInGuest on the VM via Vix
  // change USERNAME to USERDOMAIN in the following line to get the domain
  Job := VM.ReadVariable(VIX_GUEST_ENVIRONMENT_VARIABLE, 'USERNAME', 0, Nil);
  vWaitParams := VarArrayOf([VIX_PROPERTY_JOB_RESULT_VM_VARIABLE_STRING]);
  Err := Job.Wait(vWaitParams, vValue);
  if Err <> 0 then
    raise Exception.Create('Error %d', [Err]);

  Msg := vValue[0];
  Caption := Msg;
end;
Другие вопросы по тегам