Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.10.2024, 21:42
GrabbeR GrabbeR вне форума
Новичок
 
Регистрация: 15.03.2012
Сообщения: 54
Версия Delphi: 7
Репутация: 10
По умолчанию Команды с ВМ Hyper-V из PowerShell

Доброго времени суток, ув. форумчане!

Delphi 11 Update 3

Имеется рабочая функция вывода результата выполнения консольной команды из PowerShell (отрисовка консоли) в RichEdit.
Задача: выполнить приостановку/запуск нескольких ВМ на Hyper-V при условии проверки их статуса:
- если статус "Running" - приостановить;
- если статус "Paused" - запустить.

Прошу помощи. Возможно, реализуемо через WMI, например? У кого есть наработки, поделитесь, пожалуйста.

Функция:
Код:
...
uses ShellAPI;
...
procedure RunDosInMemo(CmdLine: widestring; AMemo: TRichEdit);
const
  ReadBuffer = 2400;
var
  sa: PAnsiChar;
  Security: TSecurityAttributes;
  ReadPipe, WritePipe: THandle;
  start: TStartUpInfo;
  ProcessInfo: TProcessInformation;
  Buffer: PAnsiChar;
  BytesRead: DWord;
  Apprunning: DWord;
begin
  Screen.Cursor := CrHourGlass;

  with Security do
  begin
    nlength := SizeOf(TSecurityAttributes);
    binherithandle := true;
    lpsecuritydescriptor := nil;
  end;
  if Createpipe(ReadPipe, WritePipe,
    @Security, 0) then
  begin
    Buffer := AllocMem(ReadBuffer + 1);
    FillChar(Start, Sizeof(Start), #0);
    start.cb := SizeOf(start);
    start.hStdOutput := WritePipe;
    start.hStdInput := ReadPipe;
    // start.dwFlags := STARTF_USESHOWWINDOW;
    start.dwFlags := STARTF_USESTDHANDLES +
      STARTF_USESHOWWINDOW;
    start.wShowWindow := SW_HIDE;

    if CreateProcess(nil,
      PChar(CmdLine),
      @Security,
      @Security,
      true,
      NORMAL_PRIORITY_CLASS,
      nil,
      nil,
      start,
      ProcessInfo) then
    begin
      repeat
        Apprunning := WaitForSingleObject
          (ProcessInfo.hProcess, 100);
        ReadFile(ReadPipe, Buffer[0],
          ReadBuffer, BytesRead, nil);
        Buffer[BytesRead] := #0;

        sa := PAnsiChar(Buffer);
        OemToCharA(sa, sa);
        AMemo.Text := AMemo.text + sa;

        Application.ProcessMessages;
      until (Apprunning <> WAIT_TIMEOUT);
    end;
    FreeMem(Buffer);
    CloseHandle(ProcessInfo.hProcess);
    CloseHandle(ProcessInfo.hThread);
    CloseHandle(ReadPipe);
    CloseHandle(WritePipe);
  end;
  Screen.Cursor := CrDefault;
end;

Вызов:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  RichEdit1.Clear;
  RunDosInMemo('powershell.exe' + ' /c ' + 'Get-VM -Name S2.ACPA.16,S2.W2022.Test | Format-Table -HideTableHeaders State', RichEdit1);
end;

Листинг PowerShell:
Код:
PS C:\Windows\system32> Get-VM -Name S2.ACPA.16,S2.W2022.Test | Format-Table -HideTableHeaders State

Running
Running


PS C:\Windows\system32> Suspend-VM -Name S2.ACPA.16,S2.W2022.Test -Verbose -Confirm:$false
ПОДРОБНО: Suspend-VM приостановит работу виртуальной машины "S2.W2022.Test".
ПОДРОБНО: Suspend-VM приостановит работу виртуальной машины "S2.ACPA.16".
PS C:\Windows\system32> Get-VM -Name S2.ACPA.16,S2.W2022.Test | Format-Table -HideTableHeaders State

Paused
Paused


PS C:\Windows\system32> Resume-VM -Name S2.ACPA.16,S2.W2022.Test -Verbose -Confirm:$false
ПОДРОБНО: Resume-VM возобновит работу виртуальной машины "S2.W2022.Test".
ПОДРОБНО: Resume-VM возобновит работу виртуальной машины "S2.ACPA.16".
PS C:\Windows\system32> Get-VM -Name S2.ACPA.16,S2.W2022.Test | Format-Table -HideTableHeaders State

Running
Running
Изображения
Тип файла: png Screenshot-130.png (31.3 Кбайт, 2 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter