На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Команды с ВМ Hyper-V из PowerShell
    Доброго времени суток, ув. форумчане!

    Delphi 11 Update 3

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

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

    Процедура:
    ExpandedWrap disabled
      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;


    Вызов:
    ExpandedWrap disabled
      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:
    ExpandedWrap disabled
      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[attach=66346][/attach]

    Прикреплённый файлПрикреплённый файлScreenshot_130.png (31,33 Кбайт, скачиваний: 45)
      А в чём проблема запускать Powershell-команды?
      Например https://stackoverflow.com/questions/3203767...ell-from-delphi
      Сообщение отредактировано: Mr.Delphist -
      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0487 ]   [ 17 queries used ]   [ Generated: 5.07.25, 03:34 GMT ]