- この記事は何か
- コマンドラインシェル比較
- PowerShellでできること
- ヘルプの参照方法
- ファイル一覧の取得の例
- ネットワークドライブからクイックアクセスへ
- 実行ポリシーの初期値
- 参考サイト
- 更新履歴
この記事は何か
Windowsのコマンドラインシェルとして長らくコマンドプロンプトを利用していたが、エクスプローラの Shift+右クリックメニューで表示されるのがいつのまにか「コマンドウィンドウをここで開く」から「PowerShellウィンドウをここで開く」に変更になっているのに気づいて、「いい加減PowerShellに移行するしかないか」と考えたけれど、ちょっと調べると、PowerShellは複数のバージョンがあったりして困惑しているという人に、PowerShellの知っておくとよいことを案内するものです。
コマンドラインシェル比較
用途は似たようなものなので、何が違うのか簡単に表にします。PowerShell 7.x のみ、別途インストールが必要です。
コマンドラインシェル | 実行ファイル | フレームワーク | サポート期間 | プラットホーム | 文字コード | 起動時間 |
---|---|---|---|---|---|---|
コマンドプロンプト | cmd.exe | なし | OS依存 | Win | CP932(ShiftJIS) | 瞬時 |
Windows PowerShell 5.1 | powershell.exe | .NET Framework | OS依存 | Win | UTF16(BOMあり) | 気にならない程度 |
PowerShell 7.x | pwsh.exe | .NET Core 及び .NET | リリースから1.5~3年 | Win, Mac, Linux | UTF8(BOMなし) | 引っ掛かりを覚える |
※ここで文字コードと言っているのは、標準出力で出力した日本語をファイルにリダイレクトしたときに生成されるテキストファイルの文字コードです(バッチファイル、スクリプトファイルを作成する場合のテキストファイルの文字コードでもあります)。また、起動時間は PC のスペックに依存します。
コマンドプロンプトと比較して、PowerShellの大きなメリットは、UNCパス(共有フォルダ)を直接開けることです。コマンドプロンプトだとネットワークドライブの割り当てが必要でした。
また、PowerShell 5.1は、PowerShell ISEという開発環境が利用可能です。拡張子ps1のファイルを右クリック「編集」で起動できます。 「MacやLinuxでも使う」、「デフォルトの文字コードはUTF8でないとイヤだ」、「PowerShell 7.x にしかない機能を使いたい」という人以外は、プレインストールされており、サポート期間が長く、起動が早いPowerShell 5.1 を使うのがよいでしょう。
7.x系のサポート期間は、ベースとなる .NET のバージョンに依存しており、だいたいLTS(長期サポートバージョン)は3年、それ以外は1.5年です。7.x系を使う場合は、基本的にLTS-Current(現行の長期サポートバージョン、2023年2月時点ではPowerShell 7.2)をお勧めします。PowerShell 7.2起動時に「最新版があります」と親切に教えてくれますが、最新版の7.3に更新するとサポート期間が短くなります。あと、Microsoftのページのダウンロードリンクは最新版になってしまっており、LTS-Currentを入手しようとすると、GitHubの方に行かないといけないのは注意が必要です。
PowerShellでできること
PowerShell はオープンソースで開発されており、レポジトリの GitHub に「Learning PowerShell」という記事があり、この中にあった「Map Book for Experienced Bash users」がよいガイドになっていたのですが、なくなってしまったので、bashをコマンドプロンプトに置き換えた対応表を置いておきます。
コマンドプロンプト | PowerShell | 説明 |
---|---|---|
dir | dir, Get-ChildItem | ファイルとフォルダーを一覧表示する |
tree | dir -Recurse, Get-ChildItem -Recurse | すべてのファイルとフォルダーを一覧表示する |
cd | cd, Set-Location | ディレクトリを変更する |
cd(引数なしで実行) | pwd, $pwd, Get-Location | 作業ディレクトリを表示 |
cls | cls, clear | 画面をクリアする |
mkdir | New-Item -ItemType Directory | 新しいフォルダーを作成する |
なし1 | New-Item -Path test.txt | 新しい空のファイルを作成します |
type test1.txt test2.txt | Get-Content test1.txt, test2.txt | ファイルの内容を表示する |
copy ./source.txt ./dest/dest.txt | Copy-Item source.txt dest/dest.txt | ファイルをコピーする |
robocopy /MIR ./source ./dest | Copy-Item ./source ./dest -Recurse | あるフォルダーから別のフォルダーに再帰的にコピーする |
move ./source.txt ./dest/dest.txt | Move-Item ./source.txt ./dest/dest.txt | ファイルを他のフォルダーに移動する |
del test.txt | Remove-Item test.txt | ファイルを削除する |
rmdir /s |
Remove-Item |
フォルダーを削除する |
dir /s build* | Get-ChildItem build* -Recurse | 「build」で始まるファイルまたはフォルダーを検索します |
findstr /s /i sometext *.cs | Get-ChildItem -Recurse -Filter *.cs| Select-String -Pattern "sometext" | 大文字と小文字を区別せずにファイル内のテキストを再帰的に検索する |
curl https://github.com | Invoke-RestMethod https://github.com | Webからデータを転送する |
more test.txt | Get-Contents text.txt|Out-Host -Paging | 出力を1画面ずつ表示する |
fc text1.txt text2.txt | Compare-Object (Get-Content text1.txt) (Get-Content text2.txt) | ファイルを比較し、相違点を表示する |
あと、コマンドプロンプトでは難しかった、ZIP圧縮と解凍が可能になりました。
- Compress-Archive (Microsoft.PowerShell.Archive) - PowerShell | Microsoft Learn
- Expand-Archive (Microsoft.PowerShell.Archive) - PowerShell | Microsoft Learn
ヘルプの参照方法
コマンドプロンプトだとヘルプの参照方法はそのコマンドのオプションに「/?」スイッチをつけて実行する形でしたが、PowerShellの場合は Get-Help コマンドレットの引数に調べたいコマンドを指定します。
dir /?
Get-Help Get-ChildItem
ファイル一覧の取得の例
これまたいつの間にか、エクスプローラのファイル選択状態での Shift+右クリックメニューに「パスのコピー」が加わったことにより、必要性が低下しましたが、個人的にはネットワーク調査コマンド以外で、コマンドラインシェルで一番使用頻度が高いのが、ファイル一覧の取得だと思います。ファイル一覧を取得して、クリップボードにコピーする操作は、コマンドプロンプトだと以下でした。
dir /b | clip
PowerShellだと以下になりますが、TABで入力補間ができるので、字面ほどタイプする文字数は増えていません。
Get-Childitem -Name | Set-Clipbord
ネットワークドライブからクイックアクセスへ
PowerShellへの切り替えにより、ネットワークドライブを捨てて、クイックアクセスに一本化できます。 クイックアクセスの利点は次のとおり。
クイック アクセスでのピン留め、削除、カスタマイズ - Microsoft サポート
実行ポリシーの初期値
- クライアントOS:Restricted(個々のコマンドを許可しますが、スクリプトは許可しません。)
- サーバーOS:RemoteSigned(インターネットからダウンロードされたスクリプトにデジタル署名を要求。ローカルスクリプトは許可。)
必要に応じて、実行ポリシーについてを参考に変更してください。
参考サイト
- PowerShellとは何か
- Windows PowerShell 5.1 と PowerShell 7.x の相違点
- Windows版のインストール状況
- クロスプラットホーム版のサポートライフサイクル
- クロスプラットホーム版のインストーラの所在
- 管理者としての実行、実行ポリシー
- コマンドプロンプトで空ファイル(touchみたいな)を作成する方法
更新履歴
- 2023-02-04 初版作成。
- 2023-07-21 GitHubの「Learning PowerShell」削除に伴い、対応表を追加。ついでに実行ポリシーの記載を追加。