PowerShell 7 実務逆引きチートシート|Bash対比コマンド集

LinuxやmacOSでBashやZshを日常的に使っているエンジニアが、仕事やプロジェクトでWindows環境を操作する際、「Bashのあのコマンド、PowerShellでは何だっけ?」「PowerShellのコマンドレット名が長くて覚えられない」と戸惑うことは珍しくありません。

この記事は、Bashでよく使う定番コマンドとPowerShell 7(pwsh)のコマンドレットを網羅的に対比し、実務の現場で瞬時に答えが見つかるように設計した逆引きチートシートです。 開いた瞬間にコマンドが引ける早見表から、grep・find・which・tailの個別置換例、オブジェクトパイプラインの実務イディオム、PowerShell 7独自の並列処理機能、そして検索されやすい1問1答FAQまでを集約しました。日々の開発やサーバー運用の手元リファレンスとしてご活用ください。

  1. この記事でわかること
  2. 前提条件・対象読者
  3. 1. PowerShell 7 Quick Reference:Bash対比早見表
    1. ファイル・ディレクトリ操作
    2. テキスト検索・加工・抽出
    3. システム・プロセス・サービス管理
    4. ネットワーク・通信
    5. 環境変数・シェル組み込み機能
    6. 権限・ユーザー操作(Unix系との相違点)
  4. 2. Bashコマンド別 PowerShell 7 置換イディオム
    1. grep → Select-String
    2. which → Get-Command
    3. find → Get-ChildItem
    4. tail -f → Get-Content -Wait
    5. curl / wget → Invoke-RestMethod / Invoke-WebRequest
    6. sed / awk → オブジェクトパイプライン
  5. 3. PowerShellパイプライン早見表(Where / ForEach / Select)
    1. Where-Object:条件フィルタリング(?)
    2. ForEach-Object:各要素の反復処理(%)
    3. Select-Object:プロパティの抽出・並べ替え・件数制限
    4. データの並べ替えと集計(Sort / Group / Measure)
  6. 4. PowerShell 7ならではの強力な実務機能
    1. 1. ForEach-Object -Parallel(マルチスレッド並列処理)
    2. 2. パイプラインチェーン演算子(&& と ||)
    3. 3. 三項演算子(? :)とNull合体演算子(?? / ??=)
  7. 5. PowerShell 5.1 vs PowerShell 7.x 機能比較表
  8. 6. 実務でハマりやすい5つの落とし穴と回避策
    1. 1. curl エイリアスと本物の curl.exe の競合
    2. 2. 文字コードと外部プログラム連携
    3. 3. エスケープ文字はバックスラッシュ(\)ではなくバッククォート(`)
    4. 4. 外部コマンドの引数解釈と「–%」(ストップパージング)
    5. 5. スクリプト実行ポリシー(ExecutionPolicy)
  9. 7. 検索クエリ型FAQ(よくある質問)
    1. Q1: PowerShellでgrepに相当するコマンドは何ですか?
    2. Q2: PowerShellでwhich(コマンドのパス確認)はどうやりますか?
    3. Q3: PowerShellでtail -f(ログのリアルタイム追尾)はどう書きますか?
    4. Q4: PowerShellでsudo(管理者権限で実行)するにはどうすればよいですか?
    5. Q5: PowerShellでchmodやchownは使えますか?
    6. Q6: PowerShellでcurlを使う時の注意点は何ですか?
  10. まとめ
  11. 次に読むおすすめ記事
  12. 参考情報

この記事でわかること

  • 目的のコマンドに即座に到達できる「PowerShell 7 Bash対比早見表」
  • which、grep、find、sed、awk、tail、sudoなどのBash定番コマンドのPowerShell置換例
  • オブジェクトパイプライン(Where-Object、ForEach-Object、Select-Object)の活用法
  • PowerShell 7で追加された並列処理(-Parallel)や演算子(&&, ||, ??, 三項演算子)
  • PowerShell 5.1と7.xの違いを整理した機能比較表
  • curlエイリアス、文字コード、バッククォートエスケープなど実務上の罠と対策
  • 「PowerShellでgrepするには?」などの検索クエリに応える1問1答FAQ

前提条件・対象読者

  • 対象読者: Linux/macOS環境でBashやZshを使った経験があり、Windows環境でPowerShellを効率的に操作したいエンジニア
  • 想定環境: Windows 11 / Windows 10(PowerShell 7.x以降、pwsh)
  • 対応バージョン: PowerShell 7.4 / 7.5系以降(最終確認: 2026年9月)
  • 補足: Windows標準搭載の旧型「Windows PowerShell 5.1」ではなく、オープンソースの最新版「PowerShell 7系(pwsh)」を主対象としています。

1. PowerShell 7 Quick Reference:Bash対比早見表

日常業務で頻出するBashコマンドと、対応するPowerShell 7の正式コマンドレット・短縮エイリアスの一覧です。

ファイル・ディレクトリ操作

BashコマンドPowerShell 7 コマンドレットエイリアス・短縮形処理内容
lsGet-ChildItemls, dir, gciカレント一覧表示
ls -laGet-ChildItem -Forcels -Force隠しファイルを含めて一覧表示
ls -R / find .Get-ChildItem -Recursegci -rディレクトリを再帰的に一覧表示
cdSet-Locationcd, slディレクトリ移動
cd ~Set-Location ~cd ~ホームディレクトリへ移動
pwdGet-Locationpwd, glカレントディレクトリのパス表示
catGet-Contentcat, gc, typeファイル内容の表示
rmRemove-Itemrm, del, riファイルの削除
rm -rfRemove-Item -Recurse -Forcerm -r -foディレクトリごと強制再帰削除
cpCopy-Itemcp, copyファイルのコピー
cp -rCopy-Item -Recursecp -rフォルダの再帰コピー
mvMove-Itemmv, move移動またはリネーム
mkdir -pNew-Item -ItemType Directory -Path-Forcemkdirディレクトリ作成(中間親含む)
touchNew-Item -ItemType File -Path -Forceni -ItemType File空ファイル作成または更新
test -eTest-Pathなしパスやファイルの存在確認(True/False)

テキスト検索・加工・抽出

BashコマンドPowerShell 7 コマンドレットエイリアス・短縮形処理内容
grep “pattern”Select-String -Pattern “pattern” -Pathsls “pattern”パターン文字列・正規表現検索
grep -i “pattern”Select-String -Pattern “pattern”(デフォルト非区別)sls “pattern”大文字小文字を無視して検索
grep -F “pattern”Select-String -Pattern “pattern” -SimpleMatchsls “pattern” -SimpleMatch正規表現を使わず単純文字列検索
grep -v “pattern”Select-String -Pattern “pattern” -NotMatchsls “pattern” -NotMatch一致しない行を抽出
grep -r “pattern” .Get-ChildItem -Recurse | Select-String “pattern”gci -r | sls “pattern”ディレクトリ全体から再帰検索
find . -name “*.log”Get-ChildItem -Filter *.log -Recursegci -Filter *.log -rファイル名パターンで検索
head -n 10Get-Content -TotalCount 10gc -TotalCount 10先頭10行を表示
tail -n 10Get-Content -Tail 10gc -Tail 10末尾10行を表示
tail -fGet-Content -Wait -Tail 10gc -Wait -Tail 10リアルタイムで追記ログを監視
wc -l(Get-Content ).Count(gc ).Count行数のカウント
sed ‘s/old/new/g’(Get-Content ) -replace ‘old’, ‘new’(gc ) -replace ‘old’,’new’文字列の一括置換
sortGet-Content | Sort-Objectgc | sort行の並べ替え
sort -uGet-Content | Sort-Object -Uniquegc | sort -u重複行を排除して並べ替え
teeコマンド | Tee-Object -FilePathコマンド | tee画面出力とファイル保存を両立

システム・プロセス・サービス管理

BashコマンドPowerShell 7 コマンドレットエイリアス・短縮形処理内容
ps aux / ps -efGet-Processps, gps実行中の全プロセス一覧表示
killStop-Process -Idkill , sppsプロセスの終了
kill -9Stop-Process -Id -Forcekill -foプロセスの強制終了
pkillStop-Process -Namekill -Nameプロセス名で一括終了
systemctl statusGet-Service -Namegsvサービスの状態確認
systemctl startStart-Service -Namesasvサービスの起動
systemctl stopStop-Service -Namespsvサービスの停止
systemctl restartRestart-Service -Nameresvサービスの再起動
df -hGet-PSDrive -PSProvider FileSystemgdrドライブ容量・空き領域の確認
uptime(Get-Uptime) または (Get-CimInstance Win32_OperatingSystem).LastBootUpTimeなしシステム起動時間・稼働時間の確認

ネットワーク・通信

BashコマンドPowerShell 7 コマンドレットエイリアス・短縮形処理内容
curl -s(Invoke-RestMethod )irmAPIを叩いてJSON/XMLを直接パース
curl -OInvoke-WebRequest -Uri -OutFileiwr -OutFileファイルをダウンロードして保存
pingTest-Connection -TargetNamepingICMP疎通確認
nc -zvTest-NetConnection -ComputerName -Porttnc -p特定ポートのTCP疎通確認
dig / nslookupResolve-DnsName -NameなしDNS名前解決・レコード確認
tracerouteTest-NetConnection -ComputerName -TraceRoutetnc -TraceRouteルーティング経路の追跡

環境変数・シェル組み込み機能

BashコマンドPowerShell 7 コマンドレットエイリアス・短縮形処理内容
whichGet-Commandgcm実行可能コマンドのフルパス確認
env / printenvGet-ChildItem env:gci env:全環境変数の一覧表示
echo $VAR$env:VARなし特定の環境変数を参照
export VAR=val$env:VAR = “val”なしカレントセッションに環境変数を設定
unset VARRemove-Item env:VARri env:VAR環境変数を削除
aliasGet-Aliasgal登録済みエイリアスの一覧
historyGet-Historyh, ghyコマンド履歴の表示
clearClear-Hostclear, cls画面のクリア

権限・ユーザー操作(Unix系との相違点)

BashコマンドPowerShell / Windows での対応留意点
sudoStart-Process pwsh -Verb RunAs / Windows 11 の sudo管理者権限(UAC昇格)で新しいプロセスを起動
chmod直接の対応コマンドなし(icacls /grant …)WindowsはPOSIXパーミッションではなくACL(アクセス制御リスト)で管理
chowntakeown.exe または icacls /setowner所有者権限の変更はWindows特有のユーティリティを使用
whoamiwhoami.exeカレントユーザー名(ドメイン\ユーザー)を表示

2. Bashコマンド別 PowerShell 7 置換イディオム

Linuxエンジニアが日常的に多用する主要コマンドについて、実務で使える構文と注意点を解説します。

grep → Select-String

PowerShellの Select-String(エイリアス: sls)は正規表現検索がデフォルトです。 検索結果は単なるテキストではなく、ファイル名、行番号、一致した文字列を保持するオブジェクト(MatchInfo)として返されます。

# 基本検索(大文字小文字はデフォルトで無視)
Select-String -Pattern "ERROR" server.log

# 完全一致検索(正規表現を無効化)
Select-String -Pattern "[192.168.1.1]" server.log -SimpleMatch

# ディレクトリ配下の全ログから検索し、一致行のみ抽出
Get-ChildItem -Path ./logs -Filter *.log -Recurse | Select-String "Exception" | ForEach-Object { $_.Line }

which → Get-Command

実行可能ファイル、PowerShell関数、エイリアス、コマンドレットの場所を特定します。 Linuxの which や command -v に相当します。

# コマンドの場所を確認
Get-Command python

# PATH上に存在する同名コマンドをすべて一覧表示(which -a に相当)
Get-Command git -All | Select-Object Source, CommandType

find → Get-ChildItem

ファイル名検索だけでなく、ファイルサイズや更新日時による高度な絞り込みが可能です。

# 拡張子指定で再帰検索
Get-ChildItem -Path . -Filter *.json -Recurse

# 10MB以上の巨大ファイルを検索
Get-ChildItem -Path . -Recurse -File | Where-Object Length -gt 10MB

# 過去24時間以内に更新されたファイルを検索
Get-ChildItem -Path . -Recurse -File | Where-Object LastWriteTime -gt (Get-Date).AddDays(-1)

tail -f → Get-Content -Wait

開発中のログ監視で最も使われる tail -f は、Get-Content に -Wait と -Tail を組み合わせます。

# 末尾10行を表示し、追記をリアルタイム監視
Get-Content -Path app.log -Wait -Tail 10

curl / wget → Invoke-RestMethod / Invoke-WebRequest

PowerShell 7には、API呼び出しに特化した Invoke-RestMethodirm)と、HTMLスクレイピングやファイルダウンロードに向いた Invoke-WebRequestiwr)があります。

# JSON APIのレスポンスを直接パースしてオブジェクトとして取得
$data = Invoke-RestMethod -Uri "https://api.github.com/repos/PowerShell/PowerShell"
Write-Host "Stars:" $data.stargazers_count

# ファイルの直接ダウンロード
Invoke-WebRequest -Uri "https://example.com/file.zip" -OutFile "file.zip"

sed / awk → オブジェクトパイプライン

Bashでは文字列を切り貼りする sed や awk ですが、PowerShellではオブジェクトのプロパティを直接参照するため、正規表現で列を数える必要がありません。

# sed 's/foo/bar/g' 相当(ファイル内の文字列置換)
(Get-Content file.txt) -replace 'foo', 'bar' | Set-Content file.txt

# awk '{print $1, $3}' 相当(テキスト行の特定列抽出)
Get-Content file.txt | ForEach-Object {
    $cols = $_ -split '\s+'
    "$($cols[0]) $($cols[2])"
}

3. PowerShellパイプライン早見表(Where / ForEach / Select)

Bashが「テキストストリーム」を受け渡すのに対し、PowerShellは「.NETオブジェクト」をパイプラインで受け渡します。 以下の3大コマンドレットをマスターすれば、複雑なテキスト処理が一瞬で完結します。

Where-Object:条件フィルタリング(?)

# CPU使用率が10%以上のプロセスを抽出
Get-Process | Where-Object CPU -gt 10

# 名前が「chrome」から始まるプロセスを抽出(ワイルドカード)
Get-Process | Where-Object Name -like "chrome*"

# 複雑な条件判定(メモリ500MB以上 かつ 実行中)
Get-Process | Where-Object { $_.WorkingSet64 -gt 500MB -and $_.Responding -eq $true }

ForEach-Object:各要素の反復処理(%)

# 各プロセスのメモリ使用量をMB単位で計算して表示
Get-Process | ForEach-Object { "$($_.Name): $([math]::Round($_.WorkingSet64 / 1MB)) MB" }

Select-Object:プロパティの抽出・並べ替え・件数制限

# 特定のプロパティのみを抽出して表形式で表示
Get-Process | Select-Object -Property Name, Id, CPU, WorkingSet64 -First 5

# 値だけを純粋な配列として取り出す(-ExpandProperty)
$processNames = Get-Process | Select-Object -ExpandProperty Name

データの並べ替えと集計(Sort / Group / Measure)

# メモリ使用量の多い順にトップ10を表示
Get-Process | Sort-Object -Property WorkingSet64 -Descending | Select-Object -First 10

# 拡張子ごとのファイル数を集計
Get-ChildItem -Recurse -File | Group-Object Extension -NoElement | Sort-Object Count -Descending

# ファイルサイズの合計・平均を算出
Get-ChildItem -Recurse -File | Measure-Object -Property Length -Sum -Average

4. PowerShell 7ならではの強力な実務機能

Windows標準のPowerShell 5.1にはなく、PowerShell 7(pwsh)でのみ使用できる実務向けの新機能です。

1. ForEach-Object -Parallel(マルチスレッド並列処理)

複数のサーバーへの疎通確認や大量ファイルの並列処理を、外部モジュールなしで数行で記述できます。

# 複数のサーバーに対して同時に5並列でPing疎通確認
$servers = @("server1", "server2", "server3", "server4", "server5")
$servers | ForEach-Object -Parallel {
    $result = Test-Connection -TargetName $_ -Count 1 -Quiet
    [PSCustomObject]@{
        Server = $_
        Online = $result
    }
} -ThrottleLimit 5

2. パイプラインチェーン演算子(&& と ||)

前のコマンドが成功した場合(または失敗した場合)にのみ次のコマンドを実行する、Bashでおなじみの記法がPowerShell 7で公式対応しました。

# ビルドが成功したらテストを実行、失敗したらエラーメッセージを出力
npm run build && npm test || Write-Error "Build failed"

3. 三項演算子(? :)とNull合体演算子(?? / ??=)

# 三項演算子
$status = $isOnline ? "稼働中" : "停止中"

# Null合体演算子($configがnullならデフォルト値を代入)
$port = $customPort ?? 8080

# Null合体代入($env:APP_ENVが未定義の場合のみ初期化)
$env:APP_ENV ??= "development"

5. PowerShell 5.1 vs PowerShell 7.x 機能比較表

企業環境などで「Windows標準のPowerShell 5.1」と「最新のPowerShell 7」の両方を扱う場合に役立つ比較表です。

機能・仕様Windows PowerShell 5.1PowerShell 7.x(pwsh)
実行基盤.NET Framework(Windows専用).NET 8 / 9(クロスプラットフォーム)
並列処理(ForEach-Object -Parallel)非対応(Background Jobのみ)標準対応(高速なマルチスレッド)
パイプラインチェーン(&&, ||)非対応標準対応
三項演算子(? :)/ Null合体(??)非対応標準対応
デフォルトエンコーディングShift_JIS / ANSI(日本語環境)UTF-8(BOMなし)統一
JSON操作(ConvertFrom-Json -AsHashtable)非対応(PSCustomObjectのみ)標準対応(連想配列へ直接変換)
コマンド名powershell.exepwsh.exe

6. 実務でハマりやすい5つの落とし穴と回避策

1. curl エイリアスと本物の curl.exe の競合

旧来のWindows PowerShell 5.1では、curl というコマンドが Invoke-WebRequest のエイリアスとして登録されていました。 PowerShell 7でも環境や設定によって競合する場合があります。

# curlがどちらを指しているか確認する
Get-Command curl

# 確実にOS標準の curl.exe を実行したい場合は拡張子をつける
curl.exe -s "https://example.com"

# またはエイリアスを削除してcurl.exeを優先する
Remove-Alias -Name curl -ErrorAction SilentlyContinue

2. 文字コードと外部プログラム連携

PowerShell 7では内部処理がUTF-8に統一されていますが、Windowsネイティブの外部コマンド(ipconfigやpingなど)の日本語出力はShift_JIS(CP932)で返ってくる場合があります。 出力が文字化けする場合は、コンソールのエンコーディングを確認・設定します。

# 外部コマンド連携時の出力をUTF-8として正しく受け取る
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8

3. エスケープ文字はバックスラッシュ(\)ではなくバッククォート(`)

PowerShellでは、ファイルパスの区切りにバックスラッシュ(\)を使用するため、エスケープシーケンスにはバッククォート(`)を使用します。

# 改行を含めた文字列
$text = "1行目`n2行目"

# ドル記号をリテラルとして出力
$msg = "`$PATH の値を出力します"

# コマンドレットを複数行に折り返す(行末にバッククォート)
Get-ChildItem -Path . `
    -Filter *.log `
    -Recurse

4. 外部コマンドの引数解釈と「–%」(ストップパージング)

PowerShellが独自の引数パーサーを持っているため、DockerコマンドやGitコマンドに特殊なハイフンやクォートを渡すとエラーになることがあります。 その場合は --%(ストップパージングシンボル)を使用します。

# PowerShellの解釈を止め、以降の文字列をそのまま外部コマンドに渡す
cmd.exe --% /c dir /s /b

5. スクリプト実行ポリシー(ExecutionPolicy)

自作のスクリプト(.ps1)を実行しようとして Running scripts is disabled on this system エラーが出た場合は、カレントユーザー権限で実行ポリシーを緩和します。

# 現在のユーザーに対してスクリプト実行を許可(安全な標準設定)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

7. 検索クエリ型FAQ(よくある質問)

Q1: PowerShellでgrepに相当するコマンドは何ですか?

Select-String(短縮形: sls)を使用します。 例: Select-String -Pattern "ERROR" app.log ディレクトリ全体を検索したい場合は Get-ChildItem -Recurse | Select-String "ERROR" とパイプで繋ぎます。

Q2: PowerShellでwhich(コマンドのパス確認)はどうやりますか?

Get-Command(短縮形: gcm)を使用します。 例: Get-Command python PATH上に複数ある同名コマンドをすべて確認したい場合は Get-Command git -All と実行します。

Q3: PowerShellでtail -f(ログのリアルタイム追尾)はどう書きますか?

Get-Content に -Wait と -Tail を付けます。 例: Get-Content -Path app.log -Wait -Tail 10

Q4: PowerShellでsudo(管理者権限で実行)するにはどうすればよいですか?

PowerShellコンソールから管理者権限で別プロセスを起動する場合は以下を実行します。 Start-Process pwsh -Verb RunAs なお、最新のWindows 11では設定の「開発者向け」オプションで組み込みの sudo コマンドを有効化することも可能です。

Q5: PowerShellでchmodやchownは使えますか?

WindowsのファイルシステムはUnixのPOSIXパーミッションではなくACL(アクセス制御リスト)で動作しているため、直接の代替コマンドはありません。 権限の確認には Get-Acl <file>、権限の変更にはWindows標準の icacls.exe コマンドを使用します。

Q6: PowerShellでcurlを使う時の注意点は何ですか?

PowerShell 7では本物の curl.exe が呼び出されることが多いですが、古い設定やエイリアスが残っていると Invoke-WebRequest が動作して挙動が異なる場合があります。意図した動作を保証するには curl.exe と明示するか、Invoke-RestMethod を使用してください。

まとめ

BashからPowerShell 7へ移行する際の最大の鍵は、「テキストを切り貼りする思考」から「オブジェクトのプロパティを直接扱う思考」への切り替えです。

最初はコマンドレット名が長く感じるかもしれませんが、対話作業ではエイリアス(gci, sls, gc, ps等)を活用し、スクリプト作成時には正式名称を用いることで、極めて堅牢でメンテナンス性の高いコードが書けるようになります。

日常の開発作業で「Bashのあの操作をPowerShellでどう書くか」迷った際は、ぜひ本チートシートをブックマークして手元の辞書としてお役立てください。

次に読むおすすめ記事

PowerShell 7のプロファイル設定やプロンプトの装飾、OneDriveとの競合回避テクニックについて詳しく知りたい方は、以下の実践記事もあわせて参考にしてください。

WSL2とDockerを組み合わせたWindowsプログラミング開発環境の全体設計については、以下の完全まとめガイドで網羅的に解説しています。

参考情報