A1. 逆引き

症状・コマンド名・JavaScript・用語 — 4つの入口から本編へ

📅 作成: 2026-08-25 / 更新: 2026-08-25 / 付録(順に読む必要はありません)

この付録の使い方

本編 01〜10 は順に読む資料でした。この付録は必要になったときに引くためのものです。読み物ではなく索引なので、目的の行を見つけたら本編へ飛んでください。

A1.1 症状から 「0 件しか返らない」 「文字化けする」 A1.2 コマンドから Cmdlet 名 → 用途 と解説箇所 A1.3 JavaScript から filter → Where-Object の対応表 A1.4 用語から Cmdlet・BOM 非終了エラー ほか 困っている内容によって入口を選ぶ エラーや異常が起きている → A1.1 / コマンド名は分かる → A1.2 JS ならこう書ける → A1.3 / 言葉の意味が分からない → A1.4
図 A1.0 — 4つの入口。どれも本編の該当箇所へのリンクで終わる

A1.1 症状から引く

動かない・止まらない

症状疑うところ参照
スクリプトを実行できない実行ポリシー03.2
ダウンロードした ps1 が動かないZone.Identifier の印。Unblock-File03.2
.ps1 をダブルクリックしても動かない仕様。cmd ランチャーを添える02.4
try/catch で捕まらない非終了エラー。-ErrorAction Stop が要る08.1
外部コマンドの失敗に気づけない例外にならない。$LASTEXITCODE で判定08.3
CI やタスクが失敗扱いになる末尾に exit 0 が無い08.3
手元では動くのにタスクからは動かないカレント・画面・実行ユーザーが違う09.4
入れたモジュールが見つからない別バージョンで探している03.3
プロファイルの設定が効かない5.1 と 7 で置き場所が違う03.3
古いサンプルが 7 で動かないGet-WmiObject は削除済み03.1

結果がおかしい

症状疑うところ参照
Get-ChildItem が 0 件しか返さないワイルドカードパス × -Filter-Include-Recurse が無い / 名前に [ ]07.2
日本語が文字化けするBOM の有無と -Encoding02.2 / 07.3
JSON の解析に失敗するGet-Content-Raw が無い07.3
JSON の一部が文字列に化けるConvertTo-Json-Depth(既定 2)07.4
CSV の列がずれる5.1 で -NoTypeInformation が無い07.4
CSV の数値がおかしいすべて文字列。[int] で変換する07.4
大小文字だけの変更が反映されない既定で区別しない。-cne / -creplace04.3
関数の戻り値に余計な値が混ざる出力がすべて戻り値になる06.3
要素1件のとき配列でなくなるアンロール。return ,$a / 受け側は @()06.3
.Count がエラーになる0 件だと $null@() で包む06.3
関数に渡した引数が1つにまとまるカンマ+括弧で呼んでいる06.2
パイプで流しても最後の1件しか処理されないprocess ブロックが無い06.2
switch が複数の分岐を実行する仕様。break を書く06.1
文字列にならない(オブジェクトが返る)-ExpandProperty が要る05.3
.Delete() などのメソッドが消えるSelect-Object を通すと型が変わる05.3
パイプの途中から動かなくなるFormat-* は行き止まり05.1
数値のはずが文字列結合になる左辺の型が演算を決める04.5
空配列なのに真になる/偽になる@() は False、@{} は True04.5
ハッシュテーブルの順序が変わる[ordered]@{} を使う04.4
スクリプトが途中から遅くなる配列の +=List かパイプラインへ04.4
関数内の変更が外に反映されないスコープ。読めるが書けない06.4

調べ方が分からない

やりたいこと手段参照
何が返るか知りたい| Get-Member05.2
いま入っている値を全部見たい| Select-Object -First 1 | Format-List *05.2
コマンドを探したいGet-Command *keyword*05.5
使い方を知りたいGet-Help <名前> -Examples05.5
どのバージョンで動いているか$PSVersionTable.PSEdition03.1
エラーの詳細を見たいGet-Error pwsh 708.2
変数がいつ変わったか追いたいSet-PSBreakpoint -Variable x -Mode Write08.4

PowerShell だけでは届かない

やりたいこと・症状手がかり参照
ループが遅い。C# で書き直したいAdd-Type -TypeDefinition11.2
C# にしたのに速くならない1件ずつ呼ぶと逆に遅い。ループごと渡す11.6
The type name 'X' already exists.セッション内で型は再定義できない。ソース文字列が1文字でも違うと別物扱い11.4
Win32 API を呼びたいAdd-Type -MemberDefinition11.5
PowerShell なしで動く exe にしたいcsc.exe11.7
Word・Excel・PowerPoint を操作したいNew-Object -ComObject12.1
Office ファイルを PDF にしたいExportAsFixedFormat / SaveAs12.2
EXCEL.EXE / WINWORD.EXE が残るReleaseComObject12.3
Office が入っていない PC で Excel を扱いたいImportExcel12.4A3.3
どのモジュールを入れるべきか分からない更新日と依存の重さで選ぶA3.1
ネットに繋がらない PC にモジュールを入れたいSave-ModuleA3.4

A1.2 コマンドから引く

本編に登場する Cmdlet の一覧です。この表は docs/*.html を走査して自動生成しています。

資料で定義している例示用の関数は除いています。
Get-LogSummaryWrite-Log のような本編で自作した関数は実在の Cmdlet ではないため、この表には含めていません。
表の更新は src/scripts/index/build-index.ps1 で行います。用途の説明はそのスクリプト内に持っており、新しい Cmdlet が資料に入ると実行時に警告が出ます
Cmdlet用途登場する章
Add-Contentファイルの末尾に追記する09
Add-TypeC# のソースをその場でコンパイルして型を読み込む10 / 11 / 12
Convert-Path相対パスを絶対パスの文字列にする07
Copy-Itemファイル・フォルダをコピーする09
Export-Clixmlオブジェクトを型ごと保存する(PowerShell 専用形式)07
Export-CsvCSV に書き出す。5.1 では -NoTypeInformation が要る05 / 07 / 10 / 12
Export-ExcelImportExcel モジュール。Excel に直接書き出す12
Find-ModulePowerShell Gallery のモジュールを検索する03
Format-List全プロパティを縦に並べて表示する。行き止まり05 / 08 / 10
Format-Table表形式で表示する。パイプラインの最後にだけ置く05 / 09 / 10 / 11 / 12
Get-Aliasエイリアスの一覧・逆引き05
Get-ChildItemファイル・フォルダを列挙する01 / 05 / 06 / 07 / 08 / 09 / 10 / 11
Get-CimInstanceWMI 情報を取得する(7 では Get-WmiObject の代替)03
Get-Commandコマンドを探す。動詞・名詞・モジュールで絞れる05 / 09 / 10 / 11
Get-Contentファイルを読む。既定は行の配列、-Raw で 1 文字列01 / 02 / 05 / 06 / 07 / 08 / 09 / 10 / 11
Get-Date現在日時の取得と書式化05 / 09 / 10
Get-Error直前のエラーを全プロパティ展開して表示する08
Get-ExecutionPolicy実行ポリシーを確認する。-List でスコープ別03
Get-Helpコマンドの使い方。-Examples が最も実用的05 / 10
Get-Item1 つの項目を取得する03 / 04 / 11
Get-ItemPropertyレジストリの値やファイルの属性を取得する12
Get-Locationカレントディレクトリを取得する07
Get-Memberオブジェクトの型・プロパティ・メソッドを調べる03 / 04 / 05 / 08 / 10 / 11 / 12
Get-Module読み込み済み・利用可能なモジュールを見る03
Get-Process実行中のプロセスを取得する01 / 05 / 06 / 07 / 10 / 12
Get-PSBreakpoint設定済みのブレークポイントを一覧する08
Get-Random乱数・ランダムな要素を得る10
Get-ServiceWindows サービスを取得する05
Get-Verb承認された動詞の一覧(100 個)05 / 06
Get-WmiObject7 で削除済み。Get-CimInstance に置き換える01 / 03 / 05
Group-Objectキーでまとめる。Name / Count / Group を返す05 / 09 / 10
Import-ClixmlExport-Clixml で保存したオブジェクトを復元する07
Import-CsvCSV を読む。値はすべて文字列になる05 / 07 / 12
Import-ExcelImportExcel モジュール。Excel を読む12
Import-Moduleモジュールを明示的に読み込む03
Install-Moduleモジュールを導入する。-Scope CurrentUser 推奨03 / 12
Invoke-Commandリモートやスクリプトブロックを実行する01
Invoke-WebRequestHTTP 要求。5.1 では curl がこれのエイリアスだった05
Join-Pathパスを連結する。区切りの重複を吸収する06 / 07 / 09 / 10 / 11 / 12
Measure-Command実行時間を計測する11
Measure-Object件数・合計・平均・最大最小を求める05 / 11
Move-Itemファイル・フォルダを移動する09
New-Itemファイル・フォルダを作る。-Force で親ごと03 / 05 / 09 / 10 / 12
New-Object.NET のインスタンスや COM オブジェクトを作る11 / 12
New-ScheduledTaskActionタスクスケジューラの実行内容を定義する09
New-ScheduledTaskTriggerタスクスケジューラの起動条件を定義する09
Out-Fileファイルに書き出す。5.1 の既定は UTF-16LE02 / 07
Out-Null出力を捨てる。ループ内では $null = のほうが速い06 / 09 / 10 / 12
Register-ScheduledTaskタスクを登録する09
Remove-Item削除する。-WhatIf で事前確認できる01 / 08 / 09 / 12
Remove-PSBreakpointブレークポイントを削除する08
Rename-Item名前を変更する。-WhatIf で事前確認できる09
Resolve-Path絶対パスに解決する(存在しないとエラー)07
Save-Moduleインストールせずにモジュールを取得する12
Select-Objectプロパティを選ぶ。-ExpandProperty で値そのもの01 / 05 / 10 / 11 / 12
Set-Aliasエイリアスを定義する03 / 05
Set-Contentファイルに書く。-Encoding を必ず明示する02 / 05 / 06 / 07 / 10
Set-ExecutionPolicy実行ポリシーを変更する。-Scope CurrentUser 推奨03 / 10
Set-PSBreakpoint行・変数・コマンドにブレークポイントを置く08
Set-PSDebug実行行のトレースを有効にする08
Set-StrictMode未定義変数などを即エラーにする。先頭に書く04 / 06 / 09 / 10 / 11 / 12
Split-Pathパスを親・末尾に分解する07
Start-Sleep指定秒だけ待つ05 / 12
Stop-Processプロセスを終了する01
Stop-Serviceサービスを停止する05
Test-Path存在を確認する。-PathType でファイル/フォルダを区別03 / 07 / 08 / 09 / 10 / 11 / 12
Unblock-Fileダウンロード由来の印(Zone.Identifier)を外す03
Update-Helpヘルプを取得・更新する05
Wait-Debuggerその場でデバッガに入る08
Write-Debug-Debug 指定時だけ出るメッセージ08
Write-Error非終了エラーを出す。catch には入らない08
Write-Host画面に出す。戻り値には混ざらない01 / 02 / 04 / 06 / 08 / 09 / 10 / 11
Write-Output本来の出力。戻り値に混ざる08
Write-Progress進捗を表示する03
Write-Verbose-Verbose 指定時だけ出る。消さずに残せる06 / 08 / 09 / 10
Write-Warning警告を出す08 / 09

A1.3 JavaScript から引く

配列の操作

JavaScriptPowerShell参照
arr.filter(x => x.size > 10)$arr | Where-Object { $_.Size -gt 10 }05.3
arr.map(x => x.name)$arr | ForEach-Object { $_.Name }05.3
arr.sort()$arr | Sort-Object05.4
arr.length$arr.Count04.4
arr.includes(x)$arr -contains $x04.3
arr[arr.length - 1]$arr[-1]04.4
arr.slice(1, 3)$arr[1..2]04.4
arr.reduce(...)$arr | Measure-Object -Sum05.4

文字列と変数

JavaScriptPowerShell参照
const x = 5;$x = 504.1
`Hello ${name}`"Hello $name"04.2
`${obj.prop}`"$($obj.prop)"04.2
"C:\\temp"'C:\temp'(エスケープ不要)04.2
\n(改行)`n04.2
a === b$a -eq $b(大小文字を区別しない)04.3
a !== b$a -ne $b04.3
&& / || / !-and / -or / -not04.3
RegExp.test(s)$s -match 'pattern'04.3
s.replace(/a/g, 'b')$s -replace 'a', 'b'04.3

オブジェクトと関数

JavaScriptPowerShell参照
const o = { a: 1 };$o = @{ a = 1 }04.4
Object.keys(o)$o.Keys04.4
"a" in o$o.ContainsKey("a")04.4
function f(a, b) { }function Verb-Noun { param($A, $B) }06.2
f(1, 2)Verb-Noun -A 1 -B 2 括弧は使わない06.2
"use strict"Set-StrictMode -Version Latest06.4
console.dir(o)$o | Format-List *05.2
JSON.parse(s)$s | ConvertFrom-Json07.4
JSON.stringify(o)$o | ConvertTo-Json -Depth 1007.4
npm install -gInstall-Module -Scope CurrentUser03.3
対応表はあくまで出発点です。
filterWhere-Object は似ていますが、PowerShell はオブジェクトを1件ずつ流すため、巨大なデータでもメモリを使い切りません。JavaScript の配列メソッドは全件をメモリに載せてから処理します。
書き換えの目安として使い、挙動の違いは本編で確認してください。

A1.4 用語から引く

用語意味参照
ANSI特定の文字コードではなく、その環境の既定のコードページ。日本語環境では CP93202.1
BOMファイル先頭に置く文字コードの目印。UTF-8 では EF BB BF02.1
Cmdlet「動詞-名詞」の名前を持つ小さな専門コマンド05.5
CRLF / LF改行コード。CRLF は 0D 0A の2バイト、LF は 0A02.3
Desktop / CorePSEdition の値。Desktop は 5.1、Core は 703.1
ISE5.1 専用の旧スクリプト編集環境。開発終了。VS Code を使う03.4
Zone.Identifier「ネットから来た」という印。NTFS の代替データストリームに入る03.2
アンロール配列がパイプラインで要素にばらされること。1件だと配列でなくなる06.3
エイリアスコマンドの別名。5.1 と 7 で中身が違うのでスクリプトには書かない05.5
calculated property
(計算プロパティ)
@{ N='名前'; E={ 式 } } で新しい列を作る書き方05.3
実行ポリシースクリプト実行の制限。セキュリティ機能ではない03.2
終了エラー処理が止まるエラー。catch に入る08.1
スコープ変数の見える範囲。読めるが書けないという非対称がある06.4
ドットソース. .\lib.ps1。別ファイルの関数を現在のスコープに読み込む06.4
ドライラン-WhatIf による事前確認。実際には変更しない09.2
非終了エラー報告するが処理は続くエラー。既定では catch に入らない08.1
ヒアストリング@'...'@ による複数行の文字列。終端は必ず行頭04.2
プロバイダファイルシステムやレジストリを同じ操作で扱う仕組み07.2
プロファイル起動時に自動実行される ps1。5.1 と 7 で場所が違う03.3
モジュール機能拡張の単位。npm パッケージにあたる03.3
型制約[int]$x。実行時に効き続け、代入のたびに変換される04.1
共通パラメータ[CmdletBinding()] で使えるようになる -Verbose など06.2
自動変数PowerShell が用意する変数。$_ $matches $PSScriptRoot など05.3
代替データストリームNTFS でファイル本体とは別に付く領域。Zone.Identifier が入る03.2
動詞-名詞Cmdlet の命名規則。動詞は承認された 100 個から選ぶ05.5