<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=451745&amp;view=findpost&amp;p=3911964</guid>
        <pubDate>Mon, 21 Oct 2024 21:32:04 +0000</pubDate>
        <title>Команды с ВМ Hyper-V из PowerShell</title>
        <link>https://forum.sources.ru/index.php?showtopic=451745&amp;view=findpost&amp;p=3911964</link>
        <description><![CDATA[Mr.Delphist: А в чём проблема запускать Powershell-команды? <br>
Например <a class='tag-url' href='https://stackoverflow.com/questions/32037674/automation-of-powershell-from-delphi' target='_blank'>https://stackoverflow.com/questions/3203767...ell-from-delphi</a>]]></description>
        <author>Mr.Delphist</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=451745&amp;view=findpost&amp;p=3911341</guid>
        <pubDate>Wed, 09 Oct 2024 20:12:52 +0000</pubDate>
        <title>Команды с ВМ Hyper-V из PowerShell</title>
        <link>https://forum.sources.ru/index.php?showtopic=451745&amp;view=findpost&amp;p=3911341</link>
        <description><![CDATA[GrabbeR: Доброго времени суток, ув. форумчане&#33;<br>
<br>
Delphi 11 Update 3<br>
<br>
Имеется рабочая процедура вывода результата выполнения консольной команды из PowerShell (отрисовка консоли) в RichEdit.<br>
Задача: выполнить приостановку/запуск нескольких ВМ на Hyper-V при условии проверки их статуса:<br>
- если статус &quot;Running&quot; - приостановить;<br>
- если статус &quot;Paused&quot; - запустить.<br>
<br>
Прошу помощи. Возможно, реализуемо через WMI, например? У кого есть наработки, поделитесь, пожалуйста.<br>
<br>
Процедура:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">procedure RunDosInMemo(CmdLine: widestring; AMemo: TRichEdit);</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp;ReadBuffer = 2400;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;sa: PAnsiChar;</div><div class="code_line">&nbsp;&nbsp;Security: TSecurityAttributes;</div><div class="code_line">&nbsp;&nbsp;ReadPipe, WritePipe: THandle;</div><div class="code_line">&nbsp;&nbsp;start: TStartUpInfo;</div><div class="code_line">&nbsp;&nbsp;ProcessInfo: TProcessInformation;</div><div class="code_line">&nbsp;&nbsp;Buffer: PAnsiChar;</div><div class="code_line">&nbsp;&nbsp;BytesRead: DWord;</div><div class="code_line">&nbsp;&nbsp;Apprunning: DWord;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Screen.Cursor := CrHourGlass;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;with Security do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;nlength := SizeOf(TSecurityAttributes);</div><div class="code_line">&nbsp;&nbsp; &nbsp;binherithandle := true;</div><div class="code_line">&nbsp;&nbsp; &nbsp;lpsecuritydescriptor := nil;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;if Createpipe(ReadPipe, WritePipe,</div><div class="code_line">&nbsp;&nbsp; &nbsp;@Security, 0) then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;Buffer := AllocMem(ReadBuffer + 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;FillChar(Start, Sizeof(Start), #0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;start.cb := SizeOf(start);</div><div class="code_line">&nbsp;&nbsp; &nbsp;start.hStdOutput := WritePipe;</div><div class="code_line">&nbsp;&nbsp; &nbsp;start.hStdInput := ReadPipe;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// start.dwFlags := STARTF_USESHOWWINDOW;</div><div class="code_line">&nbsp;&nbsp; &nbsp;start.dwFlags := STARTF_USESTDHANDLES +</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;STARTF_USESHOWWINDOW;</div><div class="code_line">&nbsp;&nbsp; &nbsp;start.wShowWindow := SW_HIDE;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if CreateProcess(nil,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;PChar(CmdLine),</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;@Security,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;@Security,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;true,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;NORMAL_PRIORITY_CLASS,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;nil,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;nil,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;start,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ProcessInfo) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;repeat</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Apprunning := WaitForSingleObject</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(ProcessInfo.hProcess, 100);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ReadFile(ReadPipe, Buffer[0],</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ReadBuffer, BytesRead, nil);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Buffer[BytesRead] := #0;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sa := PAnsiChar(Buffer);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;OemToCharA(sa, sa);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;AMemo.Text := AMemo.text + sa;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Application.ProcessMessages;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;until (Apprunning &#60;&#62; WAIT_TIMEOUT);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;FreeMem(Buffer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CloseHandle(ProcessInfo.hProcess);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CloseHandle(ProcessInfo.hThread);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CloseHandle(ReadPipe);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CloseHandle(WritePipe);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;Screen.Cursor := CrDefault;</div><div class="code_line">end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Вызов:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">procedure TForm1.Button1Click(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;RichEdit1.Clear;</div><div class="code_line">&nbsp;&nbsp;RunDosInMemo(&#39;powershell.exe&#39; + &#39; /c &#39; + &#39;Get-VM -Name S2.ACPA.16,S2.W2022.Test | Format-Table -HideTableHeaders State&#39;, RichEdit1);</div><div class="code_line">end;</div></ol></div></div></div></div><br>
<br>
Листинг PowerShell:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">PS C:\Windows\system32&#62; Get-VM -Name S2.ACPA.16,S2.W2022.Test | Format-Table -HideTableHeaders State</div><div class="code_line">&nbsp;</div><div class="code_line">Running</div><div class="code_line">Running</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">PS C:\Windows\system32&#62; Suspend-VM -Name S2.ACPA.16,S2.W2022.Test -Verbose -Confirm:$false</div><div class="code_line">ПОДРОБНО: Suspend-VM приостановит работу виртуальной машины &quot;S2.W2022.Test&quot;.</div><div class="code_line">ПОДРОБНО: Suspend-VM приостановит работу виртуальной машины &quot;S2.ACPA.16&quot;.</div><div class="code_line">PS C:\Windows\system32&#62; Get-VM -Name S2.ACPA.16,S2.W2022.Test | Format-Table -HideTableHeaders State</div><div class="code_line">&nbsp;</div><div class="code_line">Paused</div><div class="code_line">Paused</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">PS C:\Windows\system32&#62; Resume-VM -Name S2.ACPA.16,S2.W2022.Test -Verbose -Confirm:$false</div><div class="code_line">ПОДРОБНО: Resume-VM возобновит работу виртуальной машины &quot;S2.W2022.Test&quot;.</div><div class="code_line">ПОДРОБНО: Resume-VM возобновит работу виртуальной машины &quot;S2.ACPA.16&quot;.</div><div class="code_line">PS C:\Windows\system32&#62; Get-VM -Name S2.ACPA.16,S2.W2022.Test | Format-Table -HideTableHeaders State</div><div class="code_line">&nbsp;</div><div class="code_line">Running</div><div class="code_line">Running[attach=66346][/attach]</div></ol></div></div></div></div>]]></description>
        <author>GrabbeR</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	