技術資料

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

今回の環境では、次の対応になっていました。

別名呼び出されるコマンド
cdSet-Location
dirGet-ChildItem
catGet-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.exeUnix系PowerShell
現在位置cdpwdGet-Location
フォルダーへ移動cd "work files"cd 'work files'Set-Location -LiteralPath '.\work files'
一覧表示dirlsGet-ChildItem
名前だけ表示dir /bls -1Get-ChildItem -Name
ファイルの内容type app.logcat app.logGet-Content -LiteralPath .\app.log
文字列を検索findstr /l /c:"ERROR" app.loggrep -F 'ERROR' app.logSelect-String -LiteralPath .\app.log -Pattern 'ERROR' -SimpleMatch -CaseSensitive
末尾10行専用の標準コマンドなしtail -n 10 app.logGet-Content -LiteralPath .\app.log -Tail 10
末尾を表示して追跡専用の標準コマンドなしtail -f app.logGet-Content -LiteralPath .\app.log -Tail 10 -Wait
フォルダー作成mkdir outputmkdir outputNew-Item -ItemType Directory -Path .\output
ファイルをコピーcopy app.log app-copy.logcp app.log app-copy.logCopy-Item -LiteralPath .\app.log -Destination .\app-copy.log
ファイル名を変更ren app-copy.log saved.logmv app-copy.log saved.logRename-Item -LiteralPath .\app-copy.log -NewName saved.log
ファイルを削除del saved.logrm saved.logRemove-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

PowerShellでSSH接続先と秘密鍵を使い分ける:configの設定と確認方法

2026.10.08

WindowsのOpenSSHで、configに接続先ごとのホスト名・ユーザー名・秘密鍵を設定し、短い別名で接続する方法を紹介します。ssh -Gによる設定確認、ssh -vによる接続・認証の調べ方、複数鍵や共通設定の注意点も整理します。

PowerShell SSH

VS Code版CodexのStopフックで応答終了をWindowsに通知する

2026.10.04

VS Code版CodexのStopフックとPowerShellを使い、最後の応答をWindows通知に表示する方法を紹介します。hooks.jsonの設定と非同期実行、日本語が文字化けした際のUTF-8による対処、通知が出ない場合の確認点をまとめます。

Codex PowerShell VS Code

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の導入形態を見直して改善するまでの切り分け手順を紹介します。

Codex PowerShell

阿部辰也へのお仕事の依頼・お問い合わせ

軽いご相談もお気軽にどうぞ!

個人情報の取り扱いについて *必須 プライバシーポリシーをご確認いただき、同意いただける場合は「同意する」にチェックをしてください。

keyboard_double_arrow_up
TOP