PowerShell のメモ
目次
はじめに
PowerShell の使い方に関する、自分用の備忘録を残しておく。 随時更新。
パイプラインを流れるのは文字列ではなくオブジェクト
Unix 系のシェルでは文字列データをパイプに流して処理するのに対して、 PowerShell では .NET のオブジェクトを流して処理する。 コマンドの結果表示が画面に収まらないので絞り込みたいと思ったとき、 Unix 系シェルならば「先頭 n 行目」とか「文字列 x を含む行だけ」 といった考え方で処理するけれど、 PowerShell ならば「先頭 n 個のオブジェクト」や「プロパティ p (の文字列表現)に x が含まれるオブジェクト」といった考え方で処理することになる。
基本操作
概要
以下 2 モジュールに属するコマンドレットで、一般的な CUI 操作は可能だと思う。
- Microsoft.PowerShell.Core: 基本的な操作
- Microsoft.PowerShell.Utility: 基本的な操作
表示形式の指定
Format-
で始まる名前のコマンドレットが使える。
-
Format-Wide
: 一覧形式。オブジェクトのもっとも代表的なプロパティの値だけを表示する。PS> Get-ChildItem | Format-Table ディレクトリ: C:\Users\sgryjp\src\sgryjp.gitlab.io .git .vscode cache files output pages posts themes __pycache__ .doit.db.bak .doit.db.dat .doit.db.dir .gitignore .gitlab-ci.yml .markdownlint.json conf.py requirements.txt
-
Format-Table
: 表形式。1 行が 1 オブジェクトに相当する表状の表示となる。PS> Get-ChildItem | Format-Table ディレクトリ: C:\Users\sgryjp\src\sgryjp.gitlab.io Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2021-01-09 14:32 .git d----- 2021-01-05 20:53 .vscode d----- 2021-01-09 14:13 cache d----- 2020-10-11 13:54 files d----- 2021-01-09 14:13 output d----- 2021-01-09 12:52 pages d----- 2021-01-05 23:32 posts d----- 2020-10-21 12:52 themes d----- 2021-01-09 14:28 __pycache__ -a---- 2021-01-09 18:34 10145 .doit.db.bak -a---- 2021-01-09 18:34 357128 .doit.db.dat -a---- 2021-01-09 18:34 10145 .doit.db.dir -a---- 2021-01-04 15:57 55 .gitignore -a---- 2021-01-04 15:57 329 .gitlab-ci.yml -a---- 2021-01-04 15:57 52 .markdownlint.json -a---- 2021-01-09 14:28 57743 conf.py -a---- 2021-01-09 14:15 81 requirements.txt
-
Format-List
: 詳細表示。オブジェクトごとに、各プロパティの値を表示するような表示となる。PS> Get-ChildItem | Format-Table ディレクトリ: C:\Users\sgryjp\src\sgryjp.gitlab.io Name : .git CreationTime : 2021-01-05 20:51:39 LastWriteTime : 2021-01-09 14:32:20 LastAccessTime : 2021-01-09 18:34:13 Mode : d----- LinkType : Target : {} Name : .vscode CreationTime : 2021-01-05 20:53:49 LastWriteTime : 2021-01-05 20:53:49 LastAccessTime : 2021-01-09 18:34:15 Mode : d----- LinkType : Target : {} 【中略】 Name : requirements.txt Length : 81 CreationTime : 2021-01-05 20:51:39 LastWriteTime : 2021-01-09 14:15:07 LastAccessTime : 2021-01-09 14:15:07 Mode : -a---- LinkType : Target : {} VersionInfo : File: C:\Users\sgryjp\src\sgryjp.gitlab.io\requirements.txt InternalName: OriginalFilename: FileVersion: FileDescription: Product: ProductVersion: Debug: False Patched: False PreRelease: False PrivateBuild: False SpecialBuild: False Language:
表示対象の絞り込み
パイプラインを流れるオブジェクトの種類を変えたくない場合、-Object
で終わる名前のコマンドレットが使える。
-
Select-Object
: 先頭 n 個、末尾 n 個、あるいは重複除去、といった絞り込みを行える。PS> # 起動中のプロセス名のうち、重複を除いた最初の 10 個を表示 PS> Get-Process | Select-Object -Unique | Select-Object -First 10 Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName ------- ------ ----- ----- ------ -- -- ----------- 217 18 3296 12440 0.75 9044 3 AppleMobileDeviceProcess 621 36 22616 45360 3.34 7268 3 ApplicationFrameHost 123 8 1572 5820 4804 0 armsvc
-
Where-Object
: プロパティの内容に応じた絞り込みを行える。PS> # インストールされているアプリのうち「PowerShell」で名前が始まるものをリストアップ PS> Get-Package | Where-Object {$_.Name -like "PowerShell*"} Name Version Source ProviderName ---- ------- ------ ------------ PowerShell 7-x64 7.1.0.0 msi
その他
コマンドレットの検索
-
Get-Command
(gcm
) コマンドレットで、インストールされており使用可能なコマンドレットを検索できる。PS> # hash という文字列を含むコマンドレットを検索 PS> Get-Command | Where-Object {$_.Name -like "*hash*"} Count : 24 Average : Sum : 110610 Maximum : Minimum : Property : Length
基本統計量の計算
-
Measure-Object
コマンドレットで基本統計量を計算できる。 対応している統計量は、総数、総和、平均、標準偏差、最小値、最大値の 6 つ。PS> # カレントディレクトリ以下にある Markdown ファイルの合計サイズを求める PS> Get-ChildItem -Recurse *.md | Measure-Object -Property Length -Sum Count : 24 Average : Sum : 110610 Maximum : Minimum : Property : Length
ハッシュ値の計算
-
Get-Hash
コマンドレットで基本統計量を計算できる。 対応している統計量は、総数、総和、平均、標準偏差、最小値、最大値の 6 つ。PS> # カレントディレクトリ以下にある Markdown ファイルの合計サイズを求める PS> Get-ChildItem -Recurse *.md | Measure-Object -Property Length -Sum Count : 24 Average : Sum : 110610 Maximum : Minimum : Property : Length
Unix コマンドとの比較
Unix コマンド | PowerShell | コマンドプロンプト |
---|---|---|
tee | Tee-Object |
N/A |
N/A1 | Set-Clipboard |
clip.exe |
-
macOS ならば
pbcopy
コマンドが使える ↩