
LinuxやmacOSでBashやZshを日常的に使っているエンジニアが、仕事やプロジェクトでWindows環境を操作する際、「Bashのあのコマンド、PowerShellでは何だっけ?」「PowerShellのコマンドレット名が長くて覚えられない」と戸惑うことは珍しくありません。
この記事は、Bashでよく使う定番コマンドとPowerShell 7(pwsh)のコマンドレットを網羅的に対比し、実務の現場で瞬時に答えが見つかるように設計した逆引きチートシートです。 開いた瞬間にコマンドが引ける早見表から、grep・find・which・tailの個別置換例、オブジェクトパイプラインの実務イディオム、PowerShell 7独自の並列処理機能、そして検索されやすい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 コマンドレット | エイリアス・短縮形 | 処理内容 |
|---|---|---|---|
| ls | Get-ChildItem | ls, dir, gci | カレント一覧表示 |
| ls -la | Get-ChildItem -Force | ls -Force | 隠しファイルを含めて一覧表示 |
| ls -R / find . | Get-ChildItem -Recurse | gci -r | ディレクトリを再帰的に一覧表示 |
| cd | Set-Location | cd, sl | ディレクトリ移動 |
| cd ~ | Set-Location ~ | cd ~ | ホームディレクトリへ移動 |
| pwd | Get-Location | pwd, gl | カレントディレクトリのパス表示 |
| cat | Get-Content | cat, gc, type | ファイル内容の表示 |
| rm | Remove-Item | rm, del, ri | ファイルの削除 |
| rm -rf | Remove-Item -Recurse -Force | rm -r -fo | ディレクトリごと強制再帰削除 |
| cp | Copy-Item | cp, copy | ファイルのコピー |
| cp -r | Copy-Item -Recurse | cp -r | フォルダの再帰コピー |
| mv | Move-Item | mv, move | 移動またはリネーム |
| mkdir -p | New-Item -ItemType Directory -Path-Force | mkdir | ディレクトリ作成(中間親含む) |
| touch | New-Item -ItemType File -Path -Force | ni -ItemType File | 空ファイル作成または更新 |
| test -e | Test-Path | なし | パスやファイルの存在確認(True/False) |
テキスト検索・加工・抽出
| Bashコマンド | PowerShell 7 コマンドレット | エイリアス・短縮形 | 処理内容 |
|---|---|---|---|
| grep “pattern” | Select-String -Pattern “pattern” -Path | sls “pattern” | パターン文字列・正規表現検索 |
| grep -i “pattern” | Select-String -Pattern “pattern”(デフォルト非区別) | sls “pattern” | 大文字小文字を無視して検索 |
| grep -F “pattern” | Select-String -Pattern “pattern” -SimpleMatch | sls “pattern” -SimpleMatch | 正規表現を使わず単純文字列検索 |
| grep -v “pattern” | Select-String -Pattern “pattern” -NotMatch | sls “pattern” -NotMatch | 一致しない行を抽出 |
| grep -r “pattern” . | Get-ChildItem -Recurse | Select-String “pattern” | gci -r | sls “pattern” | ディレクトリ全体から再帰検索 |
| find . -name “*.log” | Get-ChildItem -Filter *.log -Recurse | gci -Filter *.log -r | ファイル名パターンで検索 |
| head -n 10 | Get-Content -TotalCount 10 | gc -TotalCount 10 | 先頭10行を表示 |
| tail -n 10 | Get-Content -Tail 10 | gc -Tail 10 | 末尾10行を表示 |
| tail -f | Get-Content -Wait -Tail 10 | gc -Wait -Tail 10 | リアルタイムで追記ログを監視 |
| wc -l | (Get-Content ).Count | (gc ).Count | 行数のカウント |
| sed ‘s/old/new/g’ | (Get-Content ) -replace ‘old’, ‘new’ | (gc ) -replace ‘old’,’new’ | 文字列の一括置換 |
| sort | Get-Content | Sort-Object | gc | sort | 行の並べ替え |
| sort -u | Get-Content | Sort-Object -Unique | gc | sort -u | 重複行を排除して並べ替え |
| tee | コマンド | Tee-Object -FilePath | コマンド | tee | 画面出力とファイル保存を両立 |
システム・プロセス・サービス管理
| Bashコマンド | PowerShell 7 コマンドレット | エイリアス・短縮形 | 処理内容 |
|---|---|---|---|
| ps aux / ps -ef | Get-Process | ps, gps | 実行中の全プロセス一覧表示 |
| kill | Stop-Process -Id | kill , spps | プロセスの終了 |
| kill -9 | Stop-Process -Id -Force | kill -fo | プロセスの強制終了 |
| pkill | Stop-Process -Name | kill -Name | プロセス名で一括終了 |
| systemctl status | Get-Service -Name | gsv | サービスの状態確認 |
| systemctl start | Start-Service -Name | sasv | サービスの起動 |
| systemctl stop | Stop-Service -Name | spsv | サービスの停止 |
| systemctl restart | Restart-Service -Name | resv | サービスの再起動 |
| df -h | Get-PSDrive -PSProvider FileSystem | gdr | ドライブ容量・空き領域の確認 |
| uptime | (Get-Uptime) または (Get-CimInstance Win32_OperatingSystem).LastBootUpTime | なし | システム起動時間・稼働時間の確認 |
ネットワーク・通信
| Bashコマンド | PowerShell 7 コマンドレット | エイリアス・短縮形 | 処理内容 |
|---|---|---|---|
| curl -s | (Invoke-RestMethod ) | irm | APIを叩いてJSON/XMLを直接パース |
| curl -O | Invoke-WebRequest -Uri -OutFile | iwr -OutFile | ファイルをダウンロードして保存 |
| ping | Test-Connection -TargetName | ping | ICMP疎通確認 |
| nc -zv | Test-NetConnection -ComputerName -Port | tnc -p | 特定ポートのTCP疎通確認 |
| dig / nslookup | Resolve-DnsName -Name | なし | DNS名前解決・レコード確認 |
| traceroute | Test-NetConnection -ComputerName -TraceRoute | tnc -TraceRoute | ルーティング経路の追跡 |
環境変数・シェル組み込み機能
| Bashコマンド | PowerShell 7 コマンドレット | エイリアス・短縮形 | 処理内容 |
|---|---|---|---|
| which | Get-Command | gcm | 実行可能コマンドのフルパス確認 |
| env / printenv | Get-ChildItem env: | gci env: | 全環境変数の一覧表示 |
| echo $VAR | $env:VAR | なし | 特定の環境変数を参照 |
| export VAR=val | $env:VAR = “val” | なし | カレントセッションに環境変数を設定 |
| unset VAR | Remove-Item env:VAR | ri env:VAR | 環境変数を削除 |
| alias | Get-Alias | gal | 登録済みエイリアスの一覧 |
| history | Get-History | h, ghy | コマンド履歴の表示 |
| clear | Clear-Host | clear, cls | 画面のクリア |
権限・ユーザー操作(Unix系との相違点)
| Bashコマンド | PowerShell / Windows での対応 | 留意点 |
|---|---|---|
| sudo | Start-Process pwsh -Verb RunAs / Windows 11 の sudo | 管理者権限(UAC昇格)で新しいプロセスを起動 |
| chmod | 直接の対応コマンドなし(icacls /grant …) | WindowsはPOSIXパーミッションではなくACL(アクセス制御リスト)で管理 |
| chown | takeown.exe または icacls /setowner | 所有者権限の変更はWindows特有のユーティリティを使用 |
| whoami | whoami.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-RestMethod(irm)と、HTMLスクレイピングやファイルダウンロードに向いた Invoke-WebRequest(iwr)があります。
# 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.1 | PowerShell 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.exe | pwsh.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プログラミング開発環境の全体設計については、以下の完全まとめガイドで網羅的に解説しています。

