Windowsではずっとバッチ派だったのですが、DockerのWindowsコンテナのDockerfileを書く機会があって、バッチだとwin10とserverの互換性の問題が出てきたため(具体例は書きませんが)遅ればせながらPowerShellデビューすることにしました。
ちなみに様々なシステムでPowerShellを利用するためのコンテナは下記になります。
PowerShell by Microsoft | Docker Hub
PowerShell By Microsoft
PowerShell for every system!
メッセージの表示
# "Hello."と表示する
Write-Host "Hello."
# 区切り文字により文字を結合する(1:2:3:4と表示)
Write-Host (1,2,3,4) -Separator ":"
# 背景色を白, 文字色を赤で表示
Write-Host "白地に赤文字にします" -ForegroundColor red -BackgroundColor white
# 途中で改行
Write-Host "ここで`r`n改行する"
# 最後の改行を行わない
Write-Host "改行しない" -NoNewline
文字列の入力
# 文字列の入力
$str = Read-Host "文字列を入力してください."
日時・時刻
# 現在の日時を yyyyMMdd_hms 形式で取得
$dateTime = Get-Date -Format "yyyyMMdd_HHmmss"
ディレクトリ移動
chdirと違ってドライブの移動も同時におこなう。
# Dドライブのtempディレクトリへ移動
Set-Location -Path 'D:\temp'
ファイルの存在チェック
#
if (Test-Path $file1) {
Write-Host "ファイル1は存在します."
}
if (-Not (Test-Path $file2) {
Write-Host "ファイル2は存在しません."
}
テキストファイルへの上書き・追記
# 上書き
Set-Content -Path C:\test.txt -Value "Hello."
# 追記
Add-Content -Path C:\test.txt -Value "World"
フォルダの作成
# C:\TempとC:\Temp\Workを作成する
New-Item -ItemType Directory -Path C:\Temp\Work
# 古のmdも使える
md C:\Temp
ファイル・フォルダの削除
# C:\folder配下を強制的に削除する
Remove-item -Recurse -Force C:\folder
# C:\Work\test.txt を削除する
Remove-Item -Path C:\Work\test.txt
# カレントディレクトリのファイルのうち拡張子がdocx以外のファイルを削除する
Remove-Item * -Exclude *.docx
# 拡張子がtxtのファイルを削除する
Remove-Item *.txt
Remove-Item * -Include *.txt
Remove-Item (Microsoft.PowerShell.Management) – PowerShell | Microsoft Learn
ファイル・フォルダの移動
# test.txtをtempフォルダへ移動
Move-Item C:\test.txt C:\Temp
#
Move-Item C:\test.txt D:\test.txt
遅延処理
# 3秒ウェイト
Start-Sleep 3
ZIPファイルの圧縮
# C:\Temp\file1.txtを圧縮して C:\Temp\myfiles.zipにする
Compress-Archive -Path "C:\Temp\file1.txt" -DestinationPath "C:\Temp\myfiles"
# 複数ファイルを圧縮して C:\Temp\myfiles.zipへ追加する(-Update)
Compress-Archive -Path "C:\Temp\file2.txt","C:\Temp\file3.txt","C:\Temp\file4.txt" -DestinationPath "C:\Temp\myfiles" -Update
# C:\Tempフォルダを圧縮して C:\tempFiles.zipにする. 同名ファイルがあったら上書き(-Force)する.
Compress-Archive -Path "C:\Temp" -DestinationPath "C:\tempFiles" -Force
圧縮できるファイルは最大2GB。
Compress-Archive (Microsoft.PowerShell.Archive) – PowerShell | Microsoft Learn
ZIPファイルの解凍
# C:\Temp\myfiles.zipをC:\Temp2へ解凍する. 同名ファイルがあったら上書き(-Force)する.
Expand-Archive -Path "C:\Temp\myfiles.zip" -DestinationPath "C:\Temp2" -Force
Expand-Archive (Microsoft.PowerShell.Archive) – PowerShell | Microsoft Learn
インクルード
# パス設定
."C:\set_path.ps1"
バッチ実行
# バッチ実行
& "test.bat" arg1 arg2 arg3
# 結果コード
Write-Host "結果コード=$LASTEXITCODE"