- 技術 💻
PowerShellコマンド一覧|用途別50選とbash対応表・実行例付き
PowerShellのコマンド(コマンドレット)とは、「動詞-名詞」の形で名前が付いた、Windows・macOS・Linuxで使える操作命令です。 Get-ChildItem(一覧を取得)、Copy-Item(項目をコピー)のように、名前を見れば何をするかがわかります。最大の特徴は、コマンドの間を文字列ではなく「オブジェクト」が流れることです。
この記事では、よく使うコマンドレットを用途別に50個選び、エイリアス(短縮名)と bash / cmd で同じことをするコマンドを1つの表にまとめました。さらに、2026年10月時点の最新 LTS である PowerShell 7.6.6 を実際に動かし、ほぼすべてのコマンドの実行結果を掲載しています。実行環境は Linux(Ubuntu 24.04)上の PowerShell 7.6.6 です。Windows 専用のコマンド(Get-Service など)は本記事では未実行で、公式ドキュメントに沿って記載しています。
PowerShellコマンドの早見表(用途別50選)
エイリアス列は Windows 版 PowerShell 7 の既定です。Linux / macOS 版では ls・cp・rm・cat・ps などのエイリアスは定義されておらず、OS 標準のコマンドが動きます(後述の実行結果参照)。
ファイル・フォルダ操作
| No | コマンドレット | エイリアス | bash | cmd | 用途 |
|---|---|---|---|---|---|
| 1 | Get-Location | pwd, gl | pwd | cd | 現在のフォルダを表示 |
| 2 | Set-Location | cd, sl, chdir | cd | cd | フォルダを移動 |
| 3 | Get-ChildItem | ls, dir, gci | ls, find | dir | ファイル一覧 |
| 4 | New-Item | ni | mkdir, touch | mkdir | ファイル・フォルダ作成 |
| 5 | Copy-Item | cp, copy, cpi | cp | copy, xcopy | コピー |
| 6 | Move-Item | mv, move, mi | mv | move | 移動 |
| 7 | Rename-Item | ren, rni | mv | ren | 名前の変更 |
| 8 | Remove-Item | rm, del, rd, ri | rm | del, rd | 削除 |
| 9 | Test-Path | – | test -e | if exist | 存在確認(True/False) |
| 10 | Get-Item | gi | stat | – | 1件の情報を取得 |
| 11 | Join-Path / Split-Path | – | dirname, basename | – | パスの結合・分解 |
| 12 | Compress-Archive / Expand-Archive | – | zip / unzip | tar | ZIP 圧縮・展開 |
テキスト・データ形式
| No | コマンドレット | エイリアス | bash | cmd | 用途 |
|---|---|---|---|---|---|
| 13 | Get-Content | cat, gc, type | cat, head, tail | type | ファイルを読む |
| 14 | Set-Content | – | > |
> |
上書き保存 |
| 15 | Add-Content | ac | >> |
>> |
追記 |
| 16 | Out-File | – | > |
> |
出力をファイルへ |
| 17 | Select-String | sls | grep | findstr | 文字列・正規表現検索 |
| 18 | Get-FileHash | – | sha256sum | certutil -hashfile | ハッシュ値 |
| 19 | Import-Csv | ipcsv | – | – | CSV を読みオブジェクト化 |
| 20 | Export-Csv | epcsv | – | – | オブジェクトを CSV へ |
| 21 | ConvertTo-Json / ConvertFrom-Json | – | jq | – | JSON 変換 |
| 22 | Format-Table / Format-List | ft / fl | column | – | 表示形式の変更 |
プロセス・システム
| No | コマンドレット | エイリアス | bash | cmd | 用途 |
|---|---|---|---|---|---|
| 23 | Get-Process | ps, gps | ps | tasklist | プロセス一覧 |
| 24 | Stop-Process | kill, spps | kill | taskkill | プロセス終了 |
| 25 | Start-Process | start, saps | &, nohup |
start | プログラム起動 |
| 26 | Get-Service | gsv | systemctl status | sc query | サービス一覧(Windows) |
| 27 | Get-Date | – | date | date /t | 日時 |
| 28 | Start-Sleep | sleep | sleep | timeout | 待機 |
| 29 | Measure-Command | – | time | – | 実行時間の計測 |
| 30 | Start-Job / Receive-Job | sajb / rcjb | & / wait |
– | バックグラウンド実行 |
| 31 | Clear-Host | cls, clear | clear | cls | 画面クリア |
ネットワーク
| No | コマンドレット | エイリアス | bash | cmd | 用途 |
|---|---|---|---|---|---|
| 32 | Invoke-WebRequest | iwr | curl -i | curl | HTTP リクエスト(応答全体) |
| 33 | Invoke-RestMethod | irm | curl + jq | – | API を呼び JSON をオブジェクト化 |
| 34 | Test-Connection | – | ping | ping | 疎通確認 |
| 35 | Test-NetConnection | tnc | nc -zv | – | ポート疎通(Windows) |
| 36 | Resolve-DnsName | – | dig | nslookup | 名前解決(Windows) |
| 37 | Get-NetIPAddress | – | ip addr | ipconfig | IP アドレス(Windows) |
オブジェクト操作(パイプライン)
| No | コマンドレット | エイリアス | bash | cmd | 用途 |
|---|---|---|---|---|---|
| 38 | Where-Object | ?, where | grep, awk | findstr | 条件で絞り込み |
| 39 | Select-Object | select | cut, head, tail | – | 列の選択・先頭 N 件 |
| 40 | Sort-Object | sort | sort | sort | 並べ替え |
| 41 | Group-Object | group | sort | uniq -c | – | グループ化・件数 |
| 42 | Measure-Object | measure | wc, awk | – | 件数・合計・平均 |
| 43 | ForEach-Object | %, foreach | xargs, while read | for | 1件ずつ処理 |
| 44 | Get-Member | gm | – | – | 型・プロパティ・メソッドを調べる |
| 45 | Compare-Object | compare | diff | fc | 2つの集合の差分 |
| 46 | Tee-Object | tee | tee | – | 途中の結果を保存しつつ流す |
変数・出力・ヘルプ
| No | コマンドレット | エイリアス | bash | cmd | 用途 |
|---|---|---|---|---|---|
| 47 | Write-Output | echo, write | echo | echo | パイプラインへ出力 |
| 48 | Set-Variable / Get-Variable | set / gv | x=1 / set |
set | 変数の設定・取得 |
| 49 | Get-Help | help, man | man | help | ヘルプ表示 |
| 50 | Get-Command / Get-Alias | gcm / gal | which, type / alias | where | コマンド・エイリアス検索 |
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「PowerShellコマンド一覧|用途別50選とbash対応表・実行例付き」
PowerShellの最新版と動かし方
2026年10月時点の最新は PowerShell 7.6(LTS=長期サポート版、2026年3月18日リリース、サポート期限 2028年11月14日)で、最新パッチは 7.6.6 です(Microsoft Learn の「PowerShell Support Lifecycle」で確認)。7.6 は .NET 10 上で動きます。
| バージョン | 種類 | 基盤 | 位置づけ |
|---|---|---|---|
| Windows PowerShell 5.1 | Windows 同梱 | .NET Framework | Windows に最初から入っている。機能追加は終了し、保守のみ |
| PowerShell 7.4 | LTS | .NET 8 | 2026年11月10日までサポート |
| PowerShell 7.5 | Stable | .NET 9 | 2026年11月10日までサポート |
| PowerShell 7.6 | LTS | .NET 10 | 現在の推奨版 |
| PowerShell 7.7 | Preview | .NET 11 | プレビュー |
インストール方法の例です。
# Windows(winget)
winget install --id Microsoft.PowerShell --source winget
# 起動は pwsh(5.1 は powershell.exe)
pwsh
# Linux(tar.gz を展開して動かす方法。本記事の検証はこの方法)
mkdir ps && tar xzf powershell-7.6.6-linux-x64.tar.gz -C ps
chmod +x ps/pwsh && ./ps/pwsh -NoLogo
本記事の実行環境で $PSVersionTable を表示した結果です。
Name Value
---- -----
PSVersion 7.6.6
PSEdition Core
GitCommitId 7.6.6
OS Ubuntu 24.04.4 LTS
Platform Unix
ファイル・フォルダ操作のコマンドと実行結果
以下のサンプルデータを置いたフォルダで実行しています。
orders.csv
id,item,category,qty,price
1,ノート,文具,3,300
2,ボールペン,文具,10,150
3,USBメモリ,備品,2,1200
4,付箋,文具,5,200
5,モニター台,備品,1,3500
app.log
INFO start
WARN disk 85%
INFO job ok
ERROR timeout task=42
INFO end
作成・コピー・移動・削除
New-Item -ItemType Directory -Name work | Select-Object Name
New-Item -Path work/memo.txt -ItemType File -Value "hello" | Select-Object Name, Length
Copy-Item work/memo.txt work/memo_copy.txt; Get-ChildItem work -Name
Name
----
work
Name Length
---- ------
memo.txt 5
memo_copy.txt
memo.txt
Rename-Item work/memo_copy.txt memo2.txt
Move-Item work/memo2.txt ./memo2.txt
Test-Path ./memo2.txt; Remove-Item ./memo2.txt; Test-Path ./memo2.txt
True
False
中身のあるフォルダを Remove-Item work で消そうとすると、確認プロンプト([Y] Yes / [A] Yes to All …)が出て止まります。 スクリプトでは -Recurse を付けます。
Remove-Item work -Recurse -Force; Test-Path work
False
削除前に -WhatIf を付けると、何が消えるかを表示するだけで実行しません。 大量削除の前の確認に便利です。
一覧・検索・パス操作
Get-ChildItem -File | Select-Object Name, Length | Sort-Object Name
Get-ChildItem -Recurse -Filter *.txt | Select-Object -ExpandProperty Name
Join-Path work sub file.txt
Split-Path /var/log/app.log -Leaf
Get-Item orders.csv | Select-Object Name, Extension, Length
Name Length
---- ------
app.log 68
items.json 159
orders.csv 167
memo.txt
work/sub/file.txt
app.log
Name Extension Length
---- --------- ------
orders.csv .csv 167
Join-Path は OS に合わせて区切り文字を選びます(Linux では /、Windows では \)。パスを文字列連結で作るより安全です。
ZIP 圧縮と展開
Compress-Archive -Path work -DestinationPath work.zip
Expand-Archive work.zip -DestinationPath unzip
Get-ChildItem unzip -Recurse -Name
work
work/memo.txt
テキスト・CSV・JSONのコマンドと実行結果
読む・書く・追記する
Get-Content app.log -TotalCount 2 # head -n 2
Get-Content app.log -Tail 1 # tail -n 1
(Get-Content app.log).Count # wc -l
Set-Content note.txt "1行目"; Add-Content note.txt "2行目"; Get-Content note.txt
INFO start
WARN disk 85%
INFO end
5
1行目
2行目
Get-Content は1行ずつ文字列の配列として読み込みます。 1つの文字列として読みたいときは -Raw を付けます。ログを追いかける tail -f は Get-Content app.log -Wait -Tail 10 です。
grep の代わり:Select-String
Select-String -Path app.log -Pattern "ERROR|WARN"
Select-String -Path app.log -Pattern "task=(\d+)" | ForEach-Object { $_.Matches[0].Groups[1].Value }
app.log:2:WARN disk 85%
app.log:4:ERROR timeout task=42
42
Select-String の結果もオブジェクトなので、正規表現のグループ(Matches)を直接取り出せます。 大文字小文字を区別したいときは -CaseSensitive、一致しない行は -NotMatch です。
ハッシュ値
(Get-FileHash orders.csv -Algorithm SHA256).Hash.Substring(0,16)
D42D166BD57668C9
CSV を読み込む
Import-Csv orders.csv | Format-Table
id item category qty price
-- ---- -------- --- -----
1 ノート 文具 3 300
2 ボールペン 文具 10 150
3 USBメモリ 備品 2 1200
4 付箋 文具 5 200
5 モニター台 備品 1 3500
Import-Csv は1行を1つのオブジェクトにし、列名がそのままプロパティ名になります。 ただし値はすべて文字列です(後述のよくあるエラーで扱います)。
プロセス・システムのコマンドと実行結果
Get-Process -Id $PID | Select-Object ProcessName, Id
$p = Start-Process sleep -ArgumentList 30 -PassThru
Stop-Process -Id $p.Id; $p.WaitForExit(); $p.HasExited
ProcessName Id
----------- --
pwsh 14194
True
Get-Date -Format "yyyy-MM-dd"
(Get-Date "2026-10-01").AddDays(30).ToString("yyyy-MM-dd ddd")
(Measure-Command { Start-Sleep -Milliseconds 200 }).TotalMilliseconds -ge 200
$j = Start-Job { 1..3 | ForEach-Object { $_ * 10 } }; Receive-Job $j -Wait -AutoRemoveJob
2026-10-01
2026-10-31 Sat
True
10
20
30
Get-Date の戻り値は DateTime オブジェクトなので、.AddDays() で日付計算ができます。 Measure-Command はスクリプトの処理時間を比べるときに使います。
Windows 専用のサービス管理は次のとおりです(本記事の Linux 環境では Get-Service が存在せず未実行)。
# Windows のみ(未実行)
Get-Service | Where-Object Status -eq Running | Select-Object -First 5 Name, Status
Restart-Service -Name Spooler # 管理者として実行
ネットワークのコマンドと実行結果
ローカルで JSON を返すサーバー(items.json)を立てて確認しました。
Invoke-RestMethod http://127.0.0.1:7841/items.json | Format-Table
(Invoke-WebRequest http://127.0.0.1:7841/items.json).StatusCode
name price qty
---- ----- ---
ノート 300 2
ボールペン 150 4
付箋 200 1
200
Invoke-RestMethod は JSON を自動でオブジェクトに変換するので、jq なしで絞り込みや並べ替えができます。 ヘッダーやステータスコードまで見たいときは Invoke-WebRequest を使います。
| やりたいこと | 書き方 |
|---|---|
| POST で JSON を送る | Invoke-RestMethod $url -Method Post -ContentType 'application/json' -Body ($obj | ConvertTo-Json) |
| ヘッダーを付ける | -Headers @{ Authorization = "Bearer $token" } |
| タイムアウト | -TimeoutSec 10 |
| ファイルに保存 | Invoke-WebRequest $url -OutFile data.zip |
| ポート疎通(Windows) | Test-NetConnection example.com -Port 443(未実行) |
| 名前解決(Windows) | Resolve-DnsName example.com(未実行) |
パイプラインのしくみ(オブジェクトが流れる)
bash のパイプは「文字列」を次のコマンドに渡しますが、PowerShell のパイプは「オブジェクト(プロパティを持つデータ)」を渡します。 そのため、列の位置を数えて cut や awk で切り出す代わりに、qty や price といったプロパティ名で直接扱えます。
flowchart LR
A["Import-Csv orders.csv"] -->|"オブジェクト(id, item, qty, price)"| B["Where-Object(絞り込み)"]
B --> C["Select-Object(列の選択・計算列)"]
C --> D["Sort-Object(並べ替え)"]
D --> E["Export-Csv / ConvertTo-Json(出力)"]
流れているものの型は Get-Member で確認できます。
"abc" | Get-Member | Select-Object -First 1 TypeName
(Get-ChildItem orders.csv).GetType().FullName
TypeName
--------
System.String
System.IO.FileInfo
パイプラインのレシピ
以下は $o = Import-Csv orders.csv を実行したあとの例です。
1. Where-Object で絞り込む
$o | Where-Object { [int]$_.qty -ge 3 } | Select-Object item, qty
item qty
---- ---
ノート 3
ボールペン 10
付箋 5
2. Select-Object で計算列を作り、Sort-Object で並べ替える
$o | Select-Object item, @{Name="amount"; Expression={ [int]$_.qty * [int]$_.price }} |
Sort-Object amount -Descending
item amount
---- ------
モニター台 3500
USBメモリ 2400
ボールペン 1500
付箋 1000
ノート 900
3. Group-Object で件数を数える
$o | Group-Object category | Select-Object Name, Count
Name Count
---- -----
備品 2
文具 3
4. Group-Object と Measure-Object でカテゴリ別合計
$o | Group-Object category | ForEach-Object {
[pscustomobject]@{
category = $_.Name
total = ($_.Group | ForEach-Object { [int]$_.qty * [int]$_.price } | Measure-Object -Sum).Sum
}
}
category total
-------- -----
備品 5900.00
文具 3400.00
5. Measure-Object で件数・合計・平均・最大・最小
$o | Measure-Object -Property price -Sum -Average -Maximum -Minimum |
Select-Object Count, Sum, Average, Maximum, Minimum
Count : 5
Sum : 5350
Average : 1070
Maximum : 3500
Minimum : 150
6. Export-Csv で保存する
$o | Where-Object category -eq "備品" | Export-Csv equip.csv
Get-Content equip.csv
"id","item","category","qty","price"
"3","USBメモリ","備品","2","1200"
"5","モニター台","備品","1","3500"
PowerShell 7 の Export-Csv は、5.1 で先頭に付いていた #TYPE 行を出力しません。 5.1 で同じ結果にするには -NoTypeInformation を付けます。
7. ConvertTo-Json で JSON にする
$o | Select-Object -First 2 id, item | ConvertTo-Json
$o | Select-Object -First 2 id, item | ConvertTo-Json -Compress
[
{
"id": "1",
"item": "ノート"
},
{
"id": "2",
"item": "ボールペン"
}
]
[{"id":"1","item":"ノート"},{"id":"2","item":"ボールペン"}]
入れ子が深いデータは既定の深さ(2)で切り詰められるため、ConvertTo-Json -Depth 10 のように指定します。
8. ForEach-Object -Parallel で並列処理(7以降)
1..10 | ForEach-Object -Parallel { $_ * $_ } -ThrottleLimit 4 | Sort-Object | Select-Object -Last 3
64
81
100
9. Compare-Object・Tee-Object・Get-Unique
Compare-Object (1,2,3) (2,3,4)
1..5 | Tee-Object -Variable saved | Measure-Object -Sum | Select-Object Count, Sum; $saved -join ","
1,1,2,3,3 | Get-Unique
InputObject SideIndicator
----------- -------------
4 =>
1 <=
Count Sum
----- ---
5 15.00
1,2,3,4,5
1
2
3
SideIndicator の => は右側(2つ目)にだけある値、<= は左側にだけある値です。
変数・文字列・ヘルプの使い方
$env:HOME_TEST = "abc"; $env:HOME_TEST # 環境変数
Set-Variable -Name limit -Value 10; Get-Variable limit
$h = @{ name = "ノート"; qty = 3 }; $h.qty; $h.Keys -join "," # ハッシュテーブル
"a,b;c" -split "[,;]"
"Order-2026-10" -replace "\d{4}", "YYYY"
"abc" -like "a*"; "abc" -match "^a(.)"; $Matches[1]
abc
Name Value
---- -----
limit 10
3
qty,name
a
b
c
Order-YYYY-10
True
True
b
比較演算子は記号ではなく -eq・-ne・-gt・-lt・-like・-match を使います。 > はリダイレクト(ファイル出力)になるので注意しましょう。ハッシュテーブルのキーの順序は保証されないため、順序が必要なら [ordered]@{...} を使います。
コマンドを探すときの3点セットです。
Get-Command -Verb Get -Noun *Item* | Select-Object Name
Get-Command Get-ChildItem | Select-Object CommandType, Name, Source
Get-Help Get-ChildItem -Examples # 使用例だけ表示(Update-Help で最新化)
Name
----
Get-ChildItem
Get-Item
Get-ItemProperty
Get-ItemPropertyValue
CommandType Name Source
----------- ---- ------
Cmdlet Get-ChildItem Microsoft.PowerShell.Management
この環境で使えるコマンドレットは (Get-Command -CommandType Cmdlet).Count で 257 個でした(追加モジュールなしの Linux 版 7.6.6)。
エイリアスとbashコマンドの関係(Linux / macOS の注意点)
Linux 上の PowerShell 7.6.6 で、エイリアスの有無を調べた結果です。
foreach ($n in "ls","cp","mv","rm","cat","ps","kill","sleep","sort","diff","tee",
"echo","cd","pwd","dir","type","cls","clear","man","curl","wget","gc","sls","iwr","irm") {
$a = Get-Alias $n -ErrorAction SilentlyContinue
"{0,-6} {1}" -f $n, $(if ($a) { $a.Definition } else { "(エイリアスなし)" })
}
ls (エイリアスなし)
cp (エイリアスなし)
mv (エイリアスなし)
rm (エイリアスなし)
cat (エイリアスなし)
ps (エイリアスなし)
kill (エイリアスなし)
sleep (エイリアスなし)
sort (エイリアスなし)
diff (エイリアスなし)
tee (エイリアスなし)
echo Write-Output
cd Set-Location
pwd Get-Location
dir Get-ChildItem
type Get-Content
cls Clear-Host
clear (エイリアスなし)
man (エイリアスなし)
curl (エイリアスなし)
wget (エイリアスなし)
gc Get-Content
sls Select-String
iwr Invoke-WebRequest
irm Invoke-RestMethod
Linux / macOS では、ls と打つと PowerShell の Get-ChildItem ではなく OS の /usr/bin/ls が動きます。 戻り値は文字列なので、プロパティでの絞り込みはできません。スクリプトにはエイリアスではなく正式名(Get-ChildItem など)を書くと、どの OS でも同じ動きになります。また PowerShell 7 では Windows でも curl・wget のエイリアスはなく、OS の curl.exe が動きます(5.1 では Invoke-WebRequest のエイリアス)。
Windows PowerShell 5.1とPowerShell 7の違い
| 項目 | Windows PowerShell 5.1 | PowerShell 7.6 |
|---|---|---|
| 実行ファイル | powershell.exe | pwsh(pwsh.exe) |
| 対応 OS | Windows のみ | Windows / macOS / Linux |
| 基盤 | .NET Framework | .NET 10 |
| 既定の文字コード | コマンドによって UTF-16LE や ANSI など | UTF-8(BOM なし) |
&& / ||(前のコマンドの成否で続行) |
使えない | 使える |
??(null のとき既定値)/ 三項演算子 |
使えない | 使える |
ForEach-Object -Parallel |
なし | あり |
Export-Csv の #TYPE 行 |
出る(-NoTypeInformation で消す) |
出ない |
curl / wget エイリアス |
Invoke-WebRequest | なし(OS の curl が動く) |
| 実行ポリシー | Windows で有効 | Windows で有効、Linux / macOS は常に Unrestricted |
7 の新しい演算子の実行結果です。
$x = $null; $x ?? "default"
$n = 7; $n % 2 -eq 0 ? "even" : "odd"
default
odd
文字コードは、日本語1文字を Out-File で書き出したバイト列で確認しました。
Out-File(既定) : e3 81 82 0a ← UTF-8(BOM なし)
Out-File -Encoding utf8BOM : ef bb bf e3 81 82 0a ← 先頭に BOM
5.1 で作った CSV を Excel で開いたり、7 で作ったファイルを 5.1 で読んだりするときは、-Encoding を明示すると文字化けを防げます。Excel 向けの CSV は -Encoding utf8BOM が扱いやすいです。
実行ポリシーの確認と変更
実行ポリシーとは、Windows で .ps1 スクリプトを実行してよいかを決める設定です。 セキュリティの境界というより、意図しないスクリプト実行を防ぐための安全装置です。
| ポリシー | 意味 |
|---|---|
| Restricted | スクリプトは実行しない(Windows クライアントの既定) |
| RemoteSigned | ローカルで作ったものは実行可、ダウンロードしたものは署名が必要(Windows Server の既定) |
| AllSigned | すべて署名が必要 |
| Bypass | 何も制限しない(一時的な実行向け) |
| Unrestricted | 制限なし(ダウンロードしたものは警告) |
Get-ExecutionPolicy -List # スコープごとの設定を確認
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser # 自分だけ変更(管理者権限不要)
pwsh -ExecutionPolicy Bypass -File .\task.ps1 # その実行だけ一時的に許可
Unblock-File .\downloaded.ps1 # ダウンロード印を外す
Linux 上での結果は次のとおりで、Linux / macOS では実行ポリシーは常に Unrestricted で、変更はできません。
PS> Get-ExecutionPolicy
Unrestricted
PS> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Operation is not supported on this platform.
よくあるエラー文と対処
| エラー文(抜粋) | 原因 | 対処 | 確認 |
|---|---|---|---|
| The term 'Get-Prosess' is not recognized as a name of a cmdlet, function, script file, or executable program. | コマンド名の打ち間違い、モジュール未読み込み、その OS にないコマンド | Get-Command *process* で正しい名前を探す |
実行 |
| A parameter cannot be found that matches parameter name 'Recrse'. | パラメーター名の打ち間違い | Tab キーで補完、Get-Help コマンド -Parameter * |
実行 |
| Cannot find path '…/nosuch.txt' because it does not exist. | パスが違う、カレントフォルダが違う | Get-Location と Test-Path で確認 |
実行 |
| Cannot convert value "abc" to type "System.Int32". | 数値にできない文字列を [int] で変換 |
入力を確認、-as [int] で失敗時 $null にする |
実行 |
| Cannot find drive. A drive with the name 'C' does not exist. | Linux / macOS で Windows のパスを指定 | Join-Path と相対パスで書く |
実行 |
| Connection refused | 接続先のサーバーが起動していない、ポート違い | URL とポートを確認、-TimeoutSec を付ける |
実行 |
| Operation is not supported on this platform. | Linux / macOS で Windows 専用の操作 | その OS では不要(実行ポリシーなど) | 実行 |
| …cannot be loaded because running scripts is disabled on this system. | 実行ポリシーが Restricted | Set-ExecutionPolicy RemoteSigned -Scope CurrentUser |
Windows の表示(未実行) |
| Access to the path '…' is denied. | 権限不足、ファイルが使用中 | 管理者として実行、使用中のアプリを閉じる | 未実行 |
エラーが出ないのに結果が空になる例(文字列比較)
Import-Csv の値は文字列なので、数値のつもりで比較すると文字列として比較されます。
$o[0].qty.GetType().Name
$o | Where-Object { $_.qty -gt 5 } | Select-Object item, qty # 直す前
$o | Where-Object { [int]$_.qty -gt 5 } | Select-Object item, qty # 直した後
String
(直す前:何も出力されない)
item qty
---- ---
ボールペン 10
"10" -gt 5 は文字列 "10" と "5" の比較になり、先頭の "1" が "5" より小さいので False になります。 [int] で型変換すれば期待どおりになります。同じ理由で "10" + 5 は 105、5 + "10" は 15 です(左辺の型に合わせて変換されるため)。
エラーを try / catch で受け止める
try { Get-Content nosuch.txt -ErrorAction Stop } catch { "捕捉: " + $_.Exception.GetType().Name }
捕捉: ItemNotFoundException
多くのコマンドレットのエラーは「続行可能なエラー」で、そのままでは catch に入りません。 -ErrorAction Stop(またはスクリプト冒頭で $ErrorActionPreference = 'Stop')を付けると捕捉できます。
&& は「True / False」ではなく「成功 / 失敗」で判定する
Test-Path nosuch.txt && "ok" || "ng"
ls /nosuchdir && "ok" || "ng"
False
ok
/usr/bin/ls: cannot access '/nosuchdir': No such file or directory
ng
Test-Path は False を返しても「コマンドとしては成功」なので ok に進みます。 値で分岐したいときは if (Test-Path nosuch.txt) { ... } と書きます。
よくある質問
Q. コマンドプロンプト(cmd)のコマンドはPowerShellでも使えますか?
A. dir・cd・copy・del・type などはエイリアスとして動きます。ただしオプションの書き方は異なり、dir /s は Get-ChildItem -Recurse と書きます。ipconfig や ping のような実行ファイルはそのまま実行できます。
Q. 5.1と7はどちらを使えばよいですか?
A. 新しく書くスクリプトは 7.6(LTS)がおすすめです。Windows 専用の古いモジュールなど、5.1 でしか動かないものを使う場合だけ 5.1 を使います。両方は共存でき、powershell(5.1)と pwsh(7)で起動し分けられます。
Q. コマンドの名前を覚えられません。
A. 「動詞-名詞」の規則を覚えると推測できます。動詞は Get(取得)・Set(設定)・New(作成)・Remove(削除)・Start / Stop などに限られています(Get-Verb で一覧表示)。あとは Get-Command *キーワード* と Tab 補完で探せます。
Q. bashのようにテキストで処理したい場合は?
A. Out-String -Stream で文字列にしてから Select-String に渡せます。ただし、多くの場合はプロパティで絞り込むほうが短く確実に書けます。
まとめ
- PowerShell のコマンドレットは「動詞-名詞」形式で、
Get-Commandと Tab 補完で探せます。 - 2026年10月時点の最新は PowerShell 7.6(LTS)、パッチは 7.6.6。 Windows・macOS・Linux で動きます。
- パイプラインを流れるのはオブジェクトなので、
Where-Object・Select-Object・Group-Object・Measure-Objectをプロパティ名で組み合わせられます。 - Linux / macOS では
lsなどのエイリアスがないため、スクリプトは正式名で書くとどこでも同じ動きになります。 - 5.1 と 7 は文字コード・演算子・
Export-Csvの出力が違うので、ファイルをやり取りするときは-Encodingを明示します。 - CSV の値は文字列なので、数値比較の前に
[int]で変換します。 - エラーは
-ErrorAction Stopと try / catch で受け止めます。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「PowerShellコマンド一覧|用途別50選とbash対応表・実行例付き」
株式会社RJCでは、PowerShellによる作業の自動化を仲間と学び合っています。こうした知識を共有しながら、日々技術を磨いています。
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。