PowerShellコマンド入門:cmd.exe・Unix系コマンドとの対応と基本の使い方
作成日:2026.10.27
cmd.exe(DOSコマンド)やUnix系コマンドに慣れた人向けに、PowerShellの基本操作を対応表付きで解説します。cd・dir・grep・tailなどに相当する操作から、別名と外部コマンドの違い、圧縮・展開、オブジェクトを扱うパイプラインまで、具体例で紹介します。
目次
コマンドプロンプトではcdやdirを使っていたのに、PowerShellの例を見るとSet-LocationやGet-ChildItemが出てきます。Unix系のコマンドに慣れていると、grepやtailに相当する操作も気になるところです。
PowerShellでは、見慣れた名前を使える場合もあります。ただ、名前が同じだからといって引数や出力まで同じとは限りません。今回は、基本的なコマンドの対応と、記法が違う理由を整理してみます。
対象はWindows上のPowerShell 7.6.9です。Windows PowerShell 5.1やLinux・macOS上のPowerShellでの実行は未確認です。以下で「cmd.exe」と書いているものは、普段「DOSコマンド」と呼ぶこともあるコマンドプロンプト側の操作を指します。
PowerShellのコマンド名が長い理由
PowerShellには、コマンドレットと呼ばれるコマンドがあります。基本的に「動詞-名詞」の名前になっていて、名前から操作の目的を読み取れるようになっています。
Get-Location:現在位置を取得するSet-Location:現在位置を変更するGet-ChildItem:指定した場所の子項目を取得する。フォルダーなら、中のファイルやフォルダーなどが対象Get-Content:ファイルの内容などを取得する
例えばファイルやフォルダーの一覧を表示するなら、次のように書きます。.は現在のフォルダーです。
Get-ChildItem -LiteralPath .
-LiteralPathは、パスを指定するパラメーターです。この指定では[や]を含むパスもワイルドカードとして解釈せず、そのまま扱います。ワイルドカードを使いたい場合は-Pathや-Filterなど、目的に合うパラメーターを選びます。
長く感じますが、名前と引数の役割が見えやすいのは利点ですね。もう一つの大きな違いは、一覧の出力を単なる表示用テキストではなく、情報を持った「オブジェクト」として次の処理へ渡せることです。こちらは後半で試します。
cdやdirも使えるが、cmd.exeのコマンドとは別
WindowsのPowerShellでは、cdやdirを、正式なコマンド名の別名(エイリアス)として使えます。
Get-Alias cd, dir, cat
今回の環境では、次の対応になっていました。
| 別名 | 呼び出されるコマンド |
|---|---|
cd | Set-Location |
dir | Get-ChildItem |
cat | Get-Content |
つまりPowerShellでdirと入力すると、cmd.exeのdirではなく、Get-ChildItemを呼び出します。cmd.exeのdir /bのようにファイル名だけを出したい場合は、次のように書きます。
Get-ChildItem -LiteralPath . -Name
別名は名前を短くするもので、cmd.exeやUnix系コマンドのオプションを変換するものではありません。手元で短く入力するときには便利ですが、記事や共有するスクリプトでは正式名を使うと意図が伝わりやすいかと思います。
cmd.exe・Unix系コマンドとの対応表
ここでは、同じ目的の操作を並べています。Unix系の列は一般的なシェルとコマンドの例で、オプションや細かな動作まで完全に一致するわけではありません。PowerShellの列はWindows上での例です。
| 目的 | cmd.exe | Unix系 | PowerShell |
|---|---|---|---|
| 現在位置 | cd | pwd | Get-Location |
| フォルダーへ移動 | cd "work files" | cd 'work files' | Set-Location -LiteralPath '.\work files' |
| 一覧表示 | dir | ls | Get-ChildItem |
| 名前だけ表示 | dir /b | ls -1 | Get-ChildItem -Name |
| ファイルの内容 | type app.log | cat app.log | Get-Content -LiteralPath .\app.log |
| 文字列を検索 | findstr /l /c:"ERROR" app.log | grep -F 'ERROR' app.log | Select-String -LiteralPath .\app.log -Pattern 'ERROR' -SimpleMatch -CaseSensitive |
| 末尾10行 | 専用の標準コマンドなし | tail -n 10 app.log | Get-Content -LiteralPath .\app.log -Tail 10 |
| 末尾を表示して追跡 | 専用の標準コマンドなし | tail -f app.log | Get-Content -LiteralPath .\app.log -Tail 10 -Wait |
| フォルダー作成 | mkdir output | mkdir output | New-Item -ItemType Directory -Path .\output |
| ファイルをコピー | copy app.log app-copy.log | cp app.log app-copy.log | Copy-Item -LiteralPath .\app.log -Destination .\app-copy.log |
| ファイル名を変更 | ren app-copy.log saved.log | mv app-copy.log saved.log | Rename-Item -LiteralPath .\app-copy.log -NewName saved.log |
| ファイルを削除 | del saved.log | rm saved.log | Remove-Item -LiteralPath .\saved.log |
引数なしのcdは特に注意で、cmd.exeでは現在位置の表示ですが、PowerShellではSet-Locationの別名としてホームディレクトリへ移動します。現在位置を知りたいならGet-Locationと書くと明確です。
Select-Stringは既定で正規表現を使い、大文字・小文字を区別しません。上の例では-SimpleMatchで文字列そのものを検索し、-CaseSensitiveで大小文字を区別しています。検索結果には一致した行だけでなくファイル名や行番号なども含まれるので、grepと表示まで同じにはなりません。
-Waitを付けたコマンドは終了せず、追記を待ちます。止めるときはCtrl + Cです。文字コードが分かっているファイルなら、例えば-Encoding utf8のように明示できます。コピーや削除の例は、既存ファイルに影響しない練習用フォルダーで試してください。
ping・ipconfigはPowerShellからそのまま使える
PowerShellはコマンドレットだけの環境ではありません。Windowsの実行ファイルも呼び出せるので、pingやipconfigを使うたびに別のコマンドへ書き換える必要はありません。
ping.exe -n 1 127.0.0.1
ipconfig.exe
pingの例はループバックアドレス、つまり自分のPCに1回だけ送るものです。外部サーバーへの到達性を調べているわけではありません。ipconfigはアドレスなどを表示するので、実行結果を記事や質問サイトへ貼るときは、公開してよい情報か確認しましょう。
PowerShell側で結果を扱いたい場合は、次のような候補もあります。
Test-Connection -TargetName 127.0.0.1 -Count 1 -Quiet
Get-NetIPConfiguration
このTest-Connectionの例は、応答の有無をTrue・Falseで返します。Get-NetIPConfigurationはWindowsのNetTCPIPモジュールのコマンドで、IPアドレスやゲートウェイなどの情報を取得できます。ただし、ipconfigのすべてのオプションを置き換えるものではありません。今回、Get-NetIPConfigurationはコマンドの存在と構文のみを確認し、実際の設定取得は行っていません。
tarによる圧縮・展開と、ZIP用のコマンドレット
今回のWindows環境にはtar.exeがあり、PowerShellから呼び出せました。tar.gzを扱うなら、外部コマンドとして使う方法があります。
例えば、練習用フォルダーにwork filesというサブフォルダーがあるとします。以下のコマンドは、その内容をアーカイブにし、一覧を確認してから別のフォルダーへ展開します。作成先のファイルやフォルダーがまだ存在しない状態で試してください。
tar.exe -czf sample.tar.gz -C '.\work files' .
tar.exe -tf .\sample.tar.gz
New-Item -ItemType Directory -Path .\tar-restored
tar.exe -xzf .\sample.tar.gz -C .\tar-restored
-cは作成、-xは展開、-tは一覧表示、-zはgzip、-fはアーカイブファイルの指定です。-Cは処理の基準となるフォルダーを指定します。この例はtar.gzなので、ZIPとは形式が異なります。
ZIPを作成・展開したい場合は、PowerShellのコマンドレットも使えます。
Compress-Archive -Path '.\work files\*' -DestinationPath .\sample.zip
Expand-Archive -LiteralPath .\sample.zip -DestinationPath .\zip-restored
この例はwork filesの中身をZIPにし、zip-restoredへ展開します。Compress-Archiveは隠しファイル・隠しフォルダーを対象に含めず、公式資料では使用するAPIの制限として1ファイルの最大サイズが2GBとされています。バックアップなどでは、必要なファイルが保存されるか別途確認してください。アーカイブを展開するときは内容を確認し、専用フォルダーを使うのがよいでしょう。
chmodをWindowsの権限変更へそのまま置き換えない
Unix系でパーミッションを変更するときはchmodを使いますが、Windowsのファイル権限はACL(アクセス制御リスト)で管理します。chmod 755を、そのまま一つのPowerShellコマンドへ置き換えるようには考えない方がよいです。
Windowsの権限を確認するならGet-Acl、変更にはSet-Aclやicacls.exeなどが候補になります。まず確認だけをするなら、次のように書けます。
Get-Acl -LiteralPath '.\work files' | Format-List
権限の変更では、誰に何を許可するかだけでなく、継承された設定なども考える必要があります。今回は権限を読み取るところまでとし、変更コマンドの例は扱いません。
WSL上でchmodを使う場合も、Linux側のファイルか、/mnt/cなどを通じてアクセスするWindows側のファイルかで条件が異なります。Windows側のファイルではWSLのメタデータ設定も関係するため、MicrosoftのWSLファイル権限の説明を確認してください。
コマンドの正体と使い方を調べる
見慣れた名前が何を呼び出しているか分からないときは、Get-Commandで調べられます。
Get-Command cd, dir, cat, ping.exe, ipconfig.exe, tar.exe |
Select-Object Name, CommandType, Source, Definition
今回の環境ではcd・dir・catはAlias、ping.exe・ipconfig.exe・tar.exeはApplicationでした。コマンドレットならCmdlet、関数ならFunctionと表示されます。同名のコマンドが複数あるか確認したいときは、Get-Command tar -Allのように調べます。
コマンドレットの構文や説明は、Get-CommandやGet-Helpで確認できます。
Get-Command Get-ChildItem -Syntax
Get-Help Get-ChildItem -Examples
ローカルのヘルプが未導入だと、例が十分に表示されないことがあります。その場合はGet-ChildItemの公式リファレンスなどを参照してください。
外部コマンドの引数は、そのプログラム自身のヘルプで確認します。例えばWindowsのpingとtarでは、次のようになります。ヘルプの指定方法もプログラムごとに異なります。
ping.exe /?
tar.exe --help
パイプラインでは、表示された文字列よりも「項目」を扱う
PowerShellの|は、前のコマンドの出力を次のコマンドへ渡します。ファイルをGet-ChildItemで取得すると、それぞれのファイルが、名前やサイズなどのプロパティを持つオブジェクトとして流れます。
そのため、「表示された行から何文字目を切り出すか」を考える前に、ファイル名ならName、サイズならLengthというプロパティを選べます。Get-Contentでログを読む場合は行ごとの文字列が流れますし、外部コマンドのテキスト出力が自動的にファイル情報のオブジェクトへ変換されるわけでもありません。
ファイル一覧で試す
空の練習用フォルダーで、次の準備をします。ここではwork filesや各ファイルがまだ存在しない前提です。Set-Contentは同名ファイルの内容を書き換えるので、既存の作業フォルダーでは実行しないでください。
New-Item -ItemType Directory -Path '.\work files'
Set-Content -LiteralPath '.\work files\a.txt' -Value 'alpha' -Encoding utf8
Set-Content -LiteralPath '.\work files\b.txt' -Value 'beta' -Encoding utf8
Set-Content -LiteralPath '.\work files\app.log' -Value 'INFO start', 'ERROR sample', 'INFO end' -Encoding utf8
まず、現在位置の変更と一覧表示を試します。パスに空白があるので、引用符で囲っています。
Set-Location -LiteralPath '.\work files'
Get-Location
Get-ChildItem -File
Set-Location -LiteralPath ..
続いて、work filesにあるファイルから、拡張子が.txtのものを選んでみます。
Get-ChildItem -LiteralPath '.\work files' -File |
Where-Object { $_.Extension -eq '.txt' } |
Sort-Object Name |
Select-Object Name, Length
$_は、処理中の項目を表します。ここではWhere-Objectで拡張子を比較し、Sort-Objectで名前順に並べ、Select-Objectで名前とサイズだけを取り出しています。-eqは等しいかどうかを比較する演算子です。
今回のWindows環境では、次の結果になりました。Lengthは文字数ではなくバイト数です。
Name Length
---- ------
a.txt 7
b.txt 6
表のように見えますが、これはオブジェクトを画面表示用に整形した結果です。名前という値だけが欲しい場合は、最後をSelect-Object -ExpandProperty Nameに変えると、名前の文字列だけを取り出せます。結果を後続の処理へ渡す場合は、途中でFormat-Tableなどの表示用コマンドを挟まず、最後に表示を整えるようにします。
ログの検索と末尾表示
準備したログを検索するなら、対応表のコマンドを次のように使えます。
Select-String -LiteralPath '.\work files\app.log' -Pattern 'ERROR' -SimpleMatch -CaseSensitive |
Select-Object LineNumber, Line
Get-Content -LiteralPath '.\work files\app.log' -Tail 2
検索結果には2行目のERROR sampleが含まれ、末尾2行の表示ではERROR sampleとINFO endが得られます。Select-Stringの結果も、LineNumberやLineを持つオブジェクトなので、必要な情報を選んで表示できます。
まずはcd・dirなどの操作と正式名の対応を覚え、その後に「出力から必要なプロパティを選ぶ」を試すと、PowerShellの記法にも慣れやすいかと思います。pingやtarのように、そのまま使える外部コマンドもあるので、Get-Commandで正体を確認しながら使い分けるとよいでしょう。
参考資料
奈良市を拠点に、27年以上の経験を持つフリーランスWebエンジニア、阿部辰也です。
これまで、ECサイトのバックエンド開発や業務効率化システム、公共施設の予約システムなど、多彩なプロジェクトを手がけ、企業様や制作会社様のパートナーとして信頼を築いてまいりました。
【制作会社・企業様向けサポート】
Webシステムの開発やサイト改善でお困りの際は、どうぞお気軽にご相談ください。小さな疑問から大規模プロジェクトまで、最適なご提案を心を込めてさせていただきます。
ぜひ、プロフィールやWeb制作会社様向け業務案内、一般企業様向け業務案内もご覧くださいね。
PowerShell 7.6.6が起動しない:totalWidthエラーの原因と対処法
2026.10.21
PowerShell 7.6.6が起動直後にtotalWidthエラーで終了する問題について、更新通知を無効にして復旧した手順を紹介します。多言語メッセージの整形処理にある不具合と、更新・通知を戻す際の注意点も説明します。
PowerShellでSSH接続先と秘密鍵を使い分ける:configの設定と確認方法
2026.10.08
WindowsのOpenSSHで、configに接続先ごとのホスト名・ユーザー名・秘密鍵を設定し、短い別名で接続する方法を紹介します。ssh -Gによる設定確認、ssh -vによる接続・認証の調べ方、複数鍵や共通設定の注意点も整理します。
VS Code版CodexのStopフックで応答終了をWindowsに通知する
2026.10.04
VS Code版CodexのStopフックとPowerShellを使い、最後の応答をWindows通知に表示する方法を紹介します。hooks.jsonの設定と非同期実行、日本語が文字化けした際のUTF-8による対処、通知が出ない場合の確認点をまとめます。
Windows版Codexで「CreateProcessAsUserW failed: 5」が出たときのPowerShell確認と対処
2026.08.07
Windows 11のCodexで、Get-Contentなどの読み取りコマンド実行時に「CreateProcessAsUserW failed: 5」が発生した事例をもとに、エラー内のpwsh.exeのパスやwhere.exe pwsh、Get-Commandの結果を確認し、PowerShellの導入形態を見直して改善するまでの切り分け手順を紹介します。