WindowsコマンドとPowerShellを組み合わせて実行する方法

WindowsコマンドとPowerShellを組み合わせて実行する方法

Windows環境で、Windowsコマンドやバッチファイルを使っていると「この処理、PowerShellなら簡単に実行できるのに」と思うことや、逆にPowerShellを使っているときに「この処理、Windowsコマンドやバッチファイルなら簡単に実行できるのに」と思うことがないでしょうか。

そこでここでは、WindowsコマンドからPowerShellコマンドレットやスクリプトを実行する方法や、PowerShellからWindowsコマンドやバッチファイルを実行する方法を紹介します。

WindowsコマンドからPowerShellを実行

WindowsコマンドからPowerShellコマンドレットやPowerShellスクリプトを実行したいときは「powershell.exe」を利用します。

PowerShellコマンドレットを実行する

WindowsコマンドからPowerShellコマンドレットを実行したいときは、powershell.exeの「-command」オプションに続けて実行したいコマンドを記述します。

たとえば、Windowsコマンドで前日の日付を取得したい場合、Windowsコマンドだけで対応しようとすると結構複雑な処理を記述する必要がありますが、PowerShellコマンドレットを使えば、以下のようにシンプルな記述で日付を取得できます。

> powershell -command "(Get-Date).AddDays(-1).ToString(\"yyyyMMdd\")"

PowerShellスクリプトを実行する

WindowsコマンドからPowerShellスクリプトを実行したいときは、powershell.exeの「-File」オプションに続けてPowerShellスクリプトを指定して実行します。

> powershell -NoProfile -ExecutionPolicy Unrestricted -File sample.ps1

なお、PowerShellスクリプトの実行が禁止されていて実行できない場合は、上のように実行ポリシーを緩和するオプション「-ExecutionPolicy Unrestricted」を付ければ実行できます。

PowerShellからWindowsコマンドを実行

PowerShellからWindowsコマンドを実行したい場合、ほとんどのコマンドはそのまま記述して実行できますが、copy,ren,del,dirといった内部コマンドと呼ばれるコマンドやバッチファイルは、以下に紹介する方法で実行する必要があります。

Windowsコマンド(内部コマンド)を実行する

PowerShellからWindowsコマンド(内部コマンド)を実行したいときは、Start-Processコマンドレットとcmd.exeを組み合わせて実行します。

たとえば、PowrShellから「del *.log」というコマンドを実行したいときは、以下のようにコマンドを実行します。

PS> Start-Process "cmd.exe" '/c del *.log'

バッチファイルを実行する

PowerShellからバッチファイルを実行したいときも、Start-Processコマンドレットを使って実行します。

たとえば、PowerShellから「E:\sample1.bat」というバッチファイルを実行したいときは、以下のようにコマンドを実行します。

PS> Start-Process -FilePath 'E:\sample1.bat'

なお、上記のコードに「-Verb RunAs」オプションを付加して実行すれば、管理者としてバッチファイルを実行させることもできます。

参考URL

about PowerShell exe - PowerShell | Microsoft Learn

Start-Process (Microsoft.PowerShell.Management) - PowerShell | Microsoft Learn

あとがき

Windowsコマンドだけでは実現が難しい処理がたくさんありますが、PowerShellを組み合わせればさまざまな処理に対応できます。ご活用あれ。