Learn-Software "PowerShell" -Basic

「シェル(コマンドラインインターフェイス)」の基本操作を習得する。

目次

はじめに

PowerShellを用いて「シェル(コマンドラインインターフェイス)」でコンピュータを操作する方法を学ぶ。当記事で紹介するのは、PowerShellへの文字列入力の仕方とコツ、それから、ぼくが日常的によく使うコマンドだ。

「シェル」の操作はすべて「コマンド」と呼ばれる文字入力で行う。操作方法は最初はとっつきにくいかもしれないが、試行錯誤するうちに慣れてくると思う。コマンド操作といってもその内容はGUIでの日常的な操作と同じで、ファイルやディレクトリ(フォルダ)の作成、移動、コピー、削除、名前の変更、起動、一覧表示などを取り扱う。

前提条件

コマンドを入力する

基本の操作

シェルにコマンドを入力してコンピュータを操作する基本的な手順は以下のとおり:

  1. シェルを開く:See → Launch-PowerShell
  2. コマンドを入力する: 例 lsと入力する
  3. コマンドを実行する:コマンド入力後、ENTER
  4. コマンドの出力を確認する
    • コマンドの実行結果が端末に出力される
    • エラーが発生した場合はエラーメッセージが出力される

例:現在の日時を取得するコマンド"Get-Date “を実行する。

Get-Date
Sunday, February 16, 2025 4:11:50 PM

例: PowerShellコマンド”Get-Content “のヘルプをブラウザで読む。

Get-Help Get-Content -Online

入力補完を用いて楽をする

PowerShellコマンドの命名規則は一貫して「<動詞>-<名詞>」という構造なので直観的に分かりやすいが、長いので手動でタイプするのが面倒でもある。コマンド入力をより楽に正確におこなうために入力補完機能を積極的に活用しよう。

  1. コマンド履歴 (History)
    • キーで以前入力したコマンドを再利用することができる
    • Get-History “コマンドで履歴の一覧を取得できる
      • See → about_History
      • 履歴ファイルのパスを取得: (Get-PSReadlineOption).HistorySavePath
  2. TAB補完Tab-Completion
    • コマンド(またはファイル名)を途中までタイプしTABを入力
    • 複数候補がある場合、TABTAB → …と入力すると候補を次々と切り替える
    • 例:Get-Contと入力 → TABGet-Contentと補完される
  3. CTRL+SPACE補完MenuComplete
    • コマンド(またはファイル名)を途中までタイプしCTRL+SPACEを入力
    • 候補がリストされるので、矢印キーで選択してENTER
    • 例:Get-Chと入力 → CTRL+SPACE → 候補リスト表示
  4. PSReadLineの予測機能IntelliSense
    • コマンド(またはファイル名)を途中までタイプすると、コマンド履歴などに基づく予測候補を表示
    • 操作:
      • InlineView:デフォルト:で受け入れ、ENTERで実行
      • ListView:F2で切り替え:,で選択、ENTERで実行
    • 設定確認:
      • Get-PSReadLineOption | Select-Object -Property PredictionSource
      • None以外(たとえばHistory)であれば有効な状態

短縮名(エイリアス)で楽に入力する

短縮名(エイリアス )が登録されているコマンドは、より短い別名で入力することができる。

  • PowerShellでエイリアスを使用する方法
    • エイリアスの確認:"Get-Alias “コマンドで登録されているエイリアスを確認する
    • エイリアスの使用:コマンド名の代わりにエイリアスを入力
      • 例:lsGet-ChildItemのエイリアス

以下の2つのコマンドは等価。(manGet-Helpのエイリアス。catGet-Contentのエリアス)

Get-Help Get-Content
# use aliases
man cat

コマンドのヘルプを読む

コマンドの概要や使い方は”Get-Help “コマンドで知ることができる。PowerShellのコマンドはヘルプが充実しているので、読むだけでPowerShellのよい学習になる。

  • Get-Help “の使い方
    • Get-Help <Name>
    • Get-Help <Name> -Online
      • -Onlineオプションは、web上にある情報をブラウザで表示する
Get-Help Get-Content
NAME
    Get-Content

SYNTAX
    Get-Content [-Path] <string[]>...
    Get-Content -LiteralPath <string[]>...

ALIASES
    gc
    cat
    type

REMARKS
    Get-Help cannot find the Help files for this cmdlet on this computer.
     It is displaying only partial help.
        -- To download and install Help files for the module that include
    s this cmdlet, use Update-Help.
        -- To view the Help topic for this cmdlet online, type: "Get-Help
     Get-Content -Online" or
           go to https://go.microsoft.com/fwlink/?LinkID=2096490.

コマンドを検索する

Get-Command “でコマンドを検索できる。

  • Get-Command “の使い方
    • Get-Command *:すべての種類のコマンドを取得
    • Get-Command Get-*Get-を含むコマンドを取得
    • Get-Command *-Content-Contentを含むコマンドを取得

PowerShellコマンドの命名規則が「<動詞>-<名詞>」という構造を知っておくと、コマンドを知らなくてもある程度存在を予想できる。オプション:-Noun-Verbでそれぞれ明示的に指定して検索することもできる。

# <名詞>に「Content」を含むコマンドを検索する
Get-Command -Noun "Content"
CommandType     Name            Version
-----------     ----            -------
Cmdlet          Add-Content     7.0.0…
Cmdlet          Clear-Content   7.0.0…
Cmdlet          Get-Content     7.0.0…
Cmdlet          Set-Content     7.0.0…

日常的なコマンド操作

ぼくにとっての日常的なコンピュータ操作とは、ファイルとディレクトリ(フォルダ)の操作である。その流れと対応するコマンドを以下に示す。同じことは、CLI(コマンドラインインターフェース)を用いずとも、エクスプローラとマウスクリックによる視覚的な操作でもできる。

操作 コマンド(短縮名)
1. ディレクトリを移動する cd , pushd , popd
2. ディレクトリ内のファイルを一覧表示する ls
3. ファイルのオープン・作成・移動・コピー・削除・名前変更 ii , mkdir , ni , mv , cp , rm , ren
4. ファイルを編集し、保存して閉じる アプリで編集・保存

実際の操作例。エイリアスやTAB補完、コマンド履歴呼び出し等を用いて入力作業を省力化している:

操作 コマンド
1. ディレクトリ内のファイルを一覧表示する
( → 結果、めあてのファイルがなかったとする😢)
ls path/to/the/directory
2. 別のディレクトリ内のファイルを一覧表示する
( → めあてのファイルを見つけたとする🙄)
ls path/to/the/another/directory
3. ディレクトリを移動する pushd path/to/the/another/directory
4. めあてのファイルを開く ii file.xlsx
5. ファイルを編集し、保存して閉じる アプリで編集・保存
6. もと居たディレクトリに戻る popd

以下、コマンドを個別に説明する。より詳しい情報はman <command> -Online参照。 とくにコマンド iiInvoke-Item のエイリアス)は便利で、ii <file>とすると、拡張子に応じたアプリでファイルが開く。 ii コマンドに慣れてきたら、よく使うフォルダやファイルはカレントディレクトリから移動することなく操作できるようになる:

操作 コマンド
1. めあてのファイル(またはディレクトリ)を開く ii path/to/file.xlsx
2. ファイルを編集し、保存して閉じる アプリで編集・保存

ls (Get-ChildItem )

Synopsis: 現在いるディレクトリ(カレントディレクトリ)にあるファイルとフォルダをリストする。

Param Command Note
Help man ls -Online
Example ls カレントディレクトリのファイルとフォルダ情報をリスト。
Example ls -Name カレントディレクトリのファイル名とフォルダ名のみ表示。
Example ls *.txt 名前が「*.txt」であるファイルをリスト。
Example ls *.txt -Recurse 名前が「*.txt」であるファイルをリスト。サブディレクトリも再帰的に検索。
Example Get-ChildItem | Select-Object -ExpandProperty FullName カレントディレクトリのファイルとディレクトリのフルパスを文字列として取得。

戻る :日常的なコマンド操作表

cd (Set-Location )

Synopsis: 指定したディレクトリに移動する。

Param Command Note
Help man cd -Online
Example cd, cd ~ ホームディレクトリに移動。
Example cd C:/Users/btklab/ 絶対パス指定:ユーザ「btklab」のホームディレクトリに移動。
Example cd ./ 相対パス指定:カレントディレクトリのまま(移動しない)。
Example cd ../ 相対パス指定:ひとつ上のディレクトリに移動。
Example cd - ひとつ前に居たディレクトリに戻る。

戻る :日常的なコマンド操作表

pushd (Push-Location )

Synopsis: 現在の場所を場所スタックの上に追加した上で指定したディレクトリに移動する。pushd したのちにpopd することで現在の場所(スタックの最上部に登録された場所)に戻ることができる。

Param Command Note
Help man pushd -Online
Example cd ~ ; pushd C:/Users/ 絶対パス指定:ホームディレクトリ → ディレクトリ「Users」に移動。
Example popd ディレクトリ「Users」の前にいた場所(ホームディレクトリ)に戻る。

戻る :日常的なコマンド操作表

popd (Pop-Location )

Synopsis: 最後にpushd した場所(場所スタックの最上段)に戻る。

Param Command Note
Help man popd -Online
Example cd ~ ; pushd C:/Users/ 絶対パス指定:ホームディレクトリ → ディレクトリ「Users」に移動。
Example popd ディレクトリ「Users」の前にいた場所(ホームディレクトリ)に戻る。

戻る :日常的なコマンド操作表

ii (Invoke-Item )

Synopsis: ファイルやフォルダを関連したアプリで開く。

Param Command Note
Help man ii -Online
Example ii . エクスプローラでカレントディレクトリを開く。
Example ii a.txt テキストエディタでファイルa.txtを開く。
Example ii a.xlsx エクセルでファイルa.xlsxを開く 。
Tips:
似たような機能をもつ「Start-Process 」というコマンドがある。以下はどちらもテキストエディタでa.txtを開く
Invoke-Item "C:/path/to/file.txt"
Start-Process "notepad.exe" "C:/path/to/file.txt"
ファイルやフォルダを簡単に開きたい場合は、Invoke-Item が便利
特定のアプリケーションで特定の引数とともに起動したい場合は、Start-Process が適す。

戻る :日常的なコマンド操作表

mkdir (New-Item )

Synopsis: ディレクトリ(フォルダ)を新規作成する。

Param Command Note
Help man mkdir -Online
Example mkdir "newdir" カレントディレクトリに新規ディレクトリnewdirを作成。
Example New-Item -Path . -Name "newdir" -ItemType "directory" 同上。

戻る :日常的なコマンド操作表

ni (New-Item )

Synopsis: ディレクトリやファイルを新規作成する。

Param Command Note
Help man ni -Online
Example ni -Path . -Name "a.txt" -ItemType "file" カレントディレクトリに空ファイルa.txtを新規作成。
Example New-Item -Path . -Name "a.txt" -ItemType "file" 同上。

戻る :日常的なコマンド操作表

mv (Move-Item )

Synopsis: ファイルやフォルダを移動する、もしくはリネームする。-WhatIfスイッチを追加すると、実行せずに動作だけを確認できる。

Param Command Note
Help man mv -Online
Example mv C:/a.txt E:/Temp/b.txt ファイルリネーム:ファイルa.txtC:ドライブからE:/Tempディレクトリに移動し、名前をb.txtに変更。
Example mv -Path C:/a.txt -Destination E:/Temp/b.txt 同上。
Example ls a.txt | mv -Destination E:/Temp/ ファイル移動:カレントディレクトリのファイルa.txtE:/Tempディレクトリに移動。この場合、-Destinationオプションを明示すること。

cp (Copy-Item )

Synopsis: ファイルやフォルダをコピーする。元のファイルは削除されない。-WhatIfスイッチを追加すると、実行せずに動作だけを確認できる。

Param Command Note
Help man cp -Online
Example cp ./a.txt ../hoge ファイルコピー:カレントディレクトリのファイルa.txtを一つ上の階層../にあるディレクトリhogeにコピー。
Example cp -Path ./a.txt -Destination ../hoge 同上。
Example cp -Path "C:/hoge" -Destination "C:/fuga" -Recurse ディレクトリコピー:ディレクトリC/hogeを中身ごとディレクトリC:/fugaにコピー
Example ls a.txt | cp -Destination E:/Temp/ カレントディレクトリのファイルa.txtE:/Tempディレクトリにコピー。この場合、-Destinationオプションを明示すること。コピー元および先のアイテムが存在しない場合はエラーを出力。

戻る :日常的なコマンド操作表

rm (Remove-Item )

Synopsis: ファイルやディレクトリを削除。指定したアイテムが存在しない場合はエラーを返し処理は実行されない。削除したアイテムは「ごみ箱」には移動されず、元に戻せない点に注意する。-WhatIfスイッチを追加すると、実行せずに動作だけを確認できる。

Param Command Note
Help man rm -Online
Example rm a.txt カレントディレクトリのファイルa.txtを削除。
Example ls a.txt | rm 同上。
Example Remove-Item -Path a.txt 同上。
Example rm *.txt カレントディレクトリから、拡張子が.txtである1つ以上のファイルを削除。
Example ls *.cache -Recurse | rm カレントディレクトリおよびサブディレクトリから、拡張子が.cacheである1つ以上のファイルを削除。
Example Remove-Item a.md -WhatIf ドライラン:実行せずに動作結果だけがコンソールに出力される。

戻る :日常的なコマンド操作表

ren (Rename-Item )

Synopsis: ファイルやフォルダのリネーム。-WhatIfスイッチを追加すると、実行せずに動作だけを確認できる。

Param Command Note
Help man ren -Online
Example ren "./a.txt" "b.txt" ファイルリネーム:カレントディレクトリのファイルa.txtB.txtにリネーム。
Example ren -Path "./a.txt" -NewName "b.txt" 同上。
Example Rename-Item -Path "./a.txt" -NewName "b.txt" 同上。
Example Get-ChildItem *.txt | Rename-Item -NewName { $_.Name -replace ‘.txt’,’.log’ } 複数ファイルのリネーム:カレントディレクトリにある拡張子が.txtであるファイルの拡張子を.logに一括リネーム。

戻る :日常的なコマンド操作表

用語

PowerShellのコマンド

PowerShellの世界では"コマンド"は"コマンドレット"と呼ばれる。コマンドレットの命名規則が<動詞>-<名詞>という構造であることを知っておくと、知らないコマンドの存在を(ある程度)予想できる。

リンク