PowerShell とコマンドプロンプトの組み合わせ実用例 - Windowsコマンド実用例
コマンドプロンプト(cmd
)と PowerShell を組み合わせることで、従来のバッチ資産を活かしつつ、より柔軟で実用的な自動化が可能になります。本ページでは、両方向の呼び出し(cmd→PowerShell / PowerShell→cmd)を小さな実例で紹介します。
使用コマンド
※ 本ページでは PowerShell も併用します (Windows 標準の Windows PowerShell 5.1 を想定)。
実用例 1: cmd から PowerShell を呼び出す
バッチ内から PowerShell の機能を必要なときだけ呼び出します。軽量な資産を活かしながら、文字列処理・整形などを補強できます。
現在日時を表示
powershell -Command "Get-Date"
PowerShell の出力をバッチ変数に取り込む
@echo off
set currentUser=
for /f "delims=" %%i in ('powershell -Command "$env:USERNAME"') do set currentUser=%%i
echo 現在のユーザー: %currentUser%
実用例 2: PowerShell から cmd のコマンドを呼び出す
既存の cmd コマンド・バッチを PowerShell のワークフローに組み込みます。大量ファイルのコピー・同期などは robocopy
が便利です。
バックアップ同期
cmd /c "robocopy C:\Data C:\Backup /MIR /MT:8"
実用例 3: 古いログの抽出と整形
forfiles
で 30 日以上前のログファイルを抽出し、PowerShell で CSV に整形します。
古いログの一覧を作成
forfiles /p "C:\Logs" /s /m *.log /d -30 /c "cmd /c echo @path" > C:\Logs\OldFiles.txt
一覧を CSV に整形
powershell -Command "Get-Content 'C:\Logs\OldFiles.txt' ^| ForEach-Object { [pscustomobject]@{ Path = $_ } } ^| Export-Csv -NoTypeInformation 'C:\Logs\OldFiles.csv'"
実用例 4: 権限変更 + 結果通知
権限変更は cmd の icacls
、通知は PowerShell で実施します。
フォルダ権限を一括変更
icacls C:\Data /grant Users:(R)
変更結果をメール送信 (Windows PowerShell)
powershell -Command "$out = cmd /c 'icacls C:\Data /grant Users:(R)'; Send-MailMessage -To 'admin@example.com' -Subject '権限変更結果' -Body $out -SmtpServer 'smtp.example.com'"
注: Send-MailMessage
は Windows PowerShell 5.1 では利用できますが、PowerShell 7 以降では非推奨/同等機能なしのため、必要に応じて外部サービスの Webhook (Invoke-RestMethod
) 等の代替をご検討ください。