Start-Job でジョブとして登録すれば良いのでは?
stop-vm
PowerShellのStop-VMコマンドを複数の仮想マシンに対して同時に実行したいのですが、どなたかご教示いただけないでしょうか。
Stop-VM Name <仮想マシン1> -Force
Stop-VM Name <仮想マシン2> -Force
Stop-VM Name <仮想マシン3> -Force
とした場合、仮想マシン1から順番にシャットダウンされ、時間を要してしまいます。
尚、下記でも目的は達成できたのですが、コマンドプロンプトから実行すると -AsJob の部分が反映されず順番にシャットダウンされます。。。
Get-VM | Where-Object {$_.Name -like "*WAP*"} | Stop-VM -Force -AsJob
ロックされた質問。 This question was migrated from the Microsoft Support Community. You can vote on whether it's helpful, but you can't add comments or replies or follow the question. To protect privacy, user profiles for migrated questions are anonymized.
-
Anonymous
2025-01-12T04:42:20+00:00 -
Anonymous
2025-01-12T13:28:41+00:00 ご教示ありがとうございます。
下記をPowerhelllで実行はできたのですが、コマンドプロンプトだと起動しません。
Start-Job -ScriptBlock {Stop-VM PC1 -Force}
Start-Job -ScriptBlock {Stop-VM PC2 -Force}
Start-Job -ScriptBlock {Stop-VM PC3 -Force}
PowerShell のスクリプトの実行ポリシーかと思いましたが、Bypassでも実行されません。。。
-
Anonymous
2025-01-13T03:04:29+00:00 PowerShell コマンドレットなのでコマンドプロンプトでは実行できません。
コマンドプロンプトから
powershell -Command PowerShellで実行するコマンド
を実行します。
-
Anonymous
2025-01-13T06:22:31+00:00 説明不足で申し訳ありません。
コマンドプロンプトから
powershell -Command
は付けた状態でも同様です。
-
Anonymous
2025-01-13T10:49:32+00:00 状況が今一つよく分からないのですが、
> Powerhelllで実行はできたのですが
というのは PowerShell で
Start-Job -ScriptBlock {Stop-VM PC1 -Force}
でバックグラウンドジョブとして Stop-VM が実行できたということですか?
そして
> コマンドプロンプトだと起動しません。
とはコマンドプロンプトで
powershell -Command Start-Job -ScriptBlock {Stop-VM PC1 -Force}
では実行できないということですか? ※このコマンドは期待(VM を停止する)通りには実行されないと思いますが。
about_PowerShell_exe - PowerShell | Microsoft Learn
を見ると、コマンドプロンプトでスクリプトブロックを実行する場合は
powershell -Command {Get-WinEvent -LogName security}
ではなく
powershell.exe -Command "& {Get-WinEvent -LogName security}"
とするように書かれていますね。
なので
powershell -Command "Start-Job -ScriptBlock &{Stop-VM PC1 -Force}"
とかになるのかな(未確認)。