#0. はじめに
前回の続きでオブジェクト操作周りのコマンドレットについて記載します。
前回と同じく、あまり丁寧には書いていません。
#1. 予備知識
正規表現や比較演算子のような他の言語などでも一般的な要素については知っている前提で進めます。あまり見たことのなかった文字列演算子に関しては簡単にメモしておきます。
文字列演算子 | 説明 |
---|---|
-like | ワイルドカード比較(一致する場合、True) |
-nolike | ワイルドカード比較(一致しない場合、True) |
-match | 正規表現比較(一致する場合、True) |
-nomatch | 正規表現比較(一致しない場合、True) |
※ワイルドカード比較: ワイルドカード(*, ?, [])のみ使える
また、オブジェクト操作コマンドレットにはスクリプトブロック({}で囲まれた部分)というPowerShellのスクリプトが記載できるものがあります。その際、パイプラインで渡されたオブジェクトを指定するためのシェル変数($_)が用意されており、このシェル変数を用いてオブジェクトを指定することができます。PowerShell v3以降ではこのスクリプトブロックを省略する簡易表記も可能になっています。
下記の例ではGet-Serviceで取得したオブジェクトが$_に代入されています。
通常表記
PS> Get-Service | Where-Object {$_.DisplayName -match "^Windows*"}
簡易表記(PowerShell v3以降)
PS> Get-Service | Where-Object DisplayName -match "^Windows*"
#2. オブジェクト操作系コマンドレット
コマンドレット | エイリアス | 説明 | TechNet | 記事内 |
---|---|---|---|---|
Where-Object | ?, where | オブジェクトをフィルタ | Link | Link |
Select-Object | select | オブジェクトを選択 | Link | Link |
Sort-Object | sort | オブジェクトをソート | Link | Link |
##Where-Object
オブジェクトをフィルタするためのコマンドレットです。
下記の例ではDisplayNameがWindowsから始まるサービスを取得します。
PS> Get-Service | Where-Object {$_.DisplayName -match "^Windows*"}
Status Name DisplayName
------ ---- -----------
Running AudioEndpointBu... Windows Audio Endpoint Builder
Running Audiosrv Windows Audio
Running EventLog Windows Event Log
Running FontCache Windows Font Cache Service
Stopped FontCache3.0.0.0 Windows Presentation Foundation Fon...
Stopped fussvc Windows App Certification Kit Fast ...
(以下略)
##Select-Object
オブジェクトを選択するためのコマンドレットです。
下記の例ではサービスのステータスと表示名のみ出力します。
PS> Get-Service | Select-Object Status, DisplayName
Status DisplayName
------ -----------
Running Adobe Acrobat Update Service
Stopped Application Experience
Stopped Application Layer Gateway Service
Stopped Application Identity
Running Application Information
Stopped Application Management
(以下略)
パラメータで指定した順に出力されるの出力順番を入れ替えることもできます。
PS> Get-Service | Select-Object DisplayName, Status
DisplayName Status
----------- ------
Adobe Acrobat Update Service Running
Application Experience Stopped
Application Layer Gateway Service Stopped
Application Identity Stopped
Application Information Running
Application Management Stopped
(以下略)
また、-First, -Lastというパラメータを用いることでLinuxで言うところのhead, tailコマンドにパイプした時と同様の動作をさせることができます。
PS> Get-Service | Select-Object -First 3
Status Name DisplayName
------ ---- -----------
Running AdobeARMservice Adobe Acrobat Update Service
Stopped AeLookupSvc Application Experience
Stopped ALG Application Layer Gateway Service
PS> Get-Service | Select-Object -Last 3
Status Name DisplayName
------ ---- -----------
Running wuauserv Windows Update
Stopped wudfsvc Windows Driver Foundation - User-mo...
Stopped WwanSvc WWAN AutoConfig
##Sort-Object
オブジェクトをソートするためのコマンドレットです。
下記の例ではプロセスをHandles順にソート(昇順)しています。
※Get-ProcessはデフォルトではProcessName順
PS> Get-Process | Sort-Object Handles
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
0 0 0 24 0 0 Idle
30 1 448 820 4 0.16 272 smss
38 6 828 2528 40 0.02 1428 coherence
51 5 980 2520 18 0.02 1344 coherence
55 6 1180 3052 39 0.03 1416 coherence
71 8 1148 3328 42 0.03 1220 armsvc
81 10 1960 4344 57 0.17 412 wininit
99 8 2060 5760 36 0.05 1584 dllhost
99 12 1788 4608 50 0.08 1392 prl_tools_service
(以下略)
-Descendingパラメータを指定することで降順にソートすることができます。
PS> Get-Process | Sort-Object Handles -Descending
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
45217 17 9244 9380 77 0.36 1264 dms_svc
1166 56 23840 37060 497 17.46 936 svchost
790 33 10152 17488 91 2.31 892 svchost
721 73 24360 37896 281 4.51 2096 explorer
718 25 4512 10280 45 1.97 512 lsass
697 31 17716 12796 108 0.53 1180 SearchIndexer
580 27 18944 19648 110 1.34 776 svchost
(以下略)
#3. おわりに
たった3つしか書いていませんが、オブジェクト操作系のコマンドレットはたくさんあります。特にCSVやJSONと言ったよく使われる形式からのインポートやオブジェクトへのコンバート、エクスポートなどデータの取り扱いの部分がしっかり整っていると感じました。機会があったらこの辺りもまとめてみたいと思います。
基本的な操作のまとめは終わって、サーバOS管理する上で便利そうなコマンドレットについてまとめようかと思っています。ただ、ansibleを触ってみたいという欲求強いのでそっちの記事にするかもしれません。