Windows PowerShell 入門(2)-基本操作編 2
前回に引き続きMicrosoftが提供している新しいシェル、Windows Power Shellの基本操作方法を学びます。基本操作編第2弾の今回は、パイプの使用方法を中心としたコマンドレットの操作方法を学びます。
はじめに
前回の予告で、次回はスクリプトの説明を行うと書いたのですが、もう少しコマンドレット操作についての解説を行い、PowerShellの理解を深めてもらいたいと考えました。その上で、次回スクリプトの説明を行いたいと思います。スクリプトの説明を期待していた方には申し訳ありませんが、ご理解いただけると助かります。
今回は、パイプを中心にコマンドレットの使用方法を説明します。
これまでの記事
コマンドレットが返すもの
はじめにGet-Date
コマンドレットを紹介しましょう。
このコマンドレットは、現在の日付と時刻を取得します(Get-Dateの使用方法を確認したい場合は、Get-Help Get-Date
と入力してください。詳しくは前回の記事を参照してください)。
コンソールウィンドウで、
Get-Date
と入力しEnterキーを押します。

現在の日時が表示されました。
実は、Get-Dateコマンドレットは日時の文字を表示しているのではなく、.NET FrameworkのオブジェクトであるSystem.DateTimeを取得し、規定値である現在日時を表示しています。そのほかのコマンドレットも同様に.NET Frameworkのオブジェクトを返します。
ここで本当に.NET Frameworkのオブジェクトが返されるのか実験をしてみましょう。まずは、
(Get-Date).GetType()
と入力してみてください。

Name列にDateTimeと表示されています。これで.NET FrameworkのオブジェクトであるSystem.DateTimeであることが確認できました。
さて、コマンドレットの実行結果は.NET Frameworkのオブジェクトであることがわかりました。ということは、そのほかのDateTimeオブジェクトが持つメンバーにもアクセスが可能だということです。
Microsoft Visual Studioがインストールされている方はSystem.DateTimeのヘルプを参照してみてください。インストールされていない方はオンラインのMSDNライブラリにあるSystem.DateTimeで確認してみてください。
どうでしょう? System.DateTime1つとってもこれだけの多くのメンバーにアクセス可能です。試しにYear
プロパティにアクセスしてみましょう。コンソールウィンドウで、
(Get-Date).Year
と入力して、Enterキーを押してみてください。現在の年を取得することができます。

このようにコマンドレットは.NET Frameworkオブジェクトを返すということを覚えておくとよいでしょう。
PowerShellを使用していく上で、パイプラインは欠かせない機能の1つです。パイプライン(以下パイプ)とは|
であらわし、コマンドの実行結果を次のコマンドの入力へと引き渡します。
Get-Member
コマンドレットを使用しながら、パイプの機能を見てみましょう。まず、Get-Memberコマンドレットですが、オブジェクトが持つメンバー情報を取得する機能を持ちます。
先ほど使用したGet-Dateコマンドレットが返すオブジェクトのメンバー情報を取得してみましょう。コンソールウィンドウに、
Get-Date | Get-Member
と入力しEnterキーを押してください。これはGet-Dateコマンドレットの結果をパイプでGet-Memberコマンドレットに引き渡すことを意味しています。

Get-Dateコマンドレットが返すSystem.DateTimeオブジェクトのメソッドとプロパティの一覧を確認することができました。これは、Get-Dateコマンドレットが返すSyste.DateTimeオブジェクトがパイプを流れ、Get-Memberプロパティに渡されたからです。

このようにパイプにはオブジェクトが流れます。
Get-Memberコマンドレットは、
-MemberType
パラメータを使用すると、パイプで受け取ったオブジェクトが持つメソッドのみ表示したり、プロパティのみを表示したりすることが可能です。メソッドのみを表示させる場合は、
Get-Date | Get-Member -MemberType Method
プロパティのみを表示するには、
Get-Date | Get-Member -MemberType Property
のように入力します。
パイプラインについて理解ができると、使用できるコマンドレットの幅が広がります。ぜひ、ほかのコマンドレットでも試してみてください。
データの並べ替え
PowerShellでは、パイプを通して受け取ったオブジェクトを並べ替えるためSort-Object
コマンドレットがあります。ここでは最新のシステムイベント10件を取得し、EventIDで並べ替えを行ってみましょう。
まずイベントの取得ですが、Get-EventLog
コマンドレットを使用します。Get-EventLogコマンドレットには-logName
というパラメータがあります。このパラメータのあとにsystem
と記述するとシステムイベントを取得できます。また、application
と記述するとアプリケーションイベントを取得することができます。
「最新の10件」は-newest
パラメータを使用します。-newestのあとに10と書くことで最新の10件のデータを取得することができます。
まずはここまでのコマンドレット(並べ替えの操作なしの)を実行してみましょう。
Get-EventLog -logName system -newest 10
と入力しEnterキーを押してください。

システムログの最新の10件は取得できましたか?
では、この取得結果をeventID順に並べ替えてみましょう。先ほど説明したように並べ替えにはSort-Objectコマンドレットを使用するのですが、このコマンドレットへはパイプを流れてきたオブジェクトを並べ替えるので、次のような記述をするのが一般的です。
Get-EventLog -logName system -newest 10 | Sort-Object eventID
と入力しEnterキーを押してください。

実行結果を見るとわかるとおり昇順での並べ替えです。降順で並べ替えを行うには-descending
パラメータを付加します。
Get-EventLog -logName system -newest 10 | Sort-Object eventID
-descending
特定のプロパティを抜き出す
Select-Object
コマンドレットを使用すると、特定のプロパティのみを抜き出すことができます。
Get-ChildItem
コマンドレットを実行するとMode
、LastWriteTime
、Length
、Name
プロパティが表示されるのですが、Select-Objectコマンドレットを使用してNameプロパティとLengthプロパティのみを取得してみましょう。
Get-ChildItem *.* | Select-Object Name, Length
と入力しEnterキーを押してください。

NameプロパティとLengthプロパティだけを表示することができたと思います。
今度は、Select-Objectコマンドレットと、先ほど使用したSort-Objectをあわせて使用してみましょう。NameプロパティとLengthプロパティを取得し、Lengthプロパティで並べ替えを行ってみたいと思います。
Get-ChildItem *.* | Select-Object Name, Length | Sort-Object Length
と入力してEnterキーを押してください。

パイプの数が2つになりましたが、1つずつ区切って考えると簡単です。
このようにパイプごとに処理を区切って考えることがポイントです。
特定条件のデータを取得する
先ほどのSelect-Objectコマンドレットは、列データを取得するイメージでした。今度は特定条件に合致するデータを行で取得するコマンドレット、Where-Object
について説明します。
ローカルコンピュータ上のサービスを取得するコマンドレットとしてGet-Service
があります。まずはこのコマンドレットを実行してみましょう。
Get-Service
と入力してEnterキーを押してください。

稼働中のサービス、停止中のサービスを取得できます。
このとき「停止中のサービスだけを表示したい」となった場合はどうすればよいでしょう? こういう場合は、特定の条件に合致するデータを取得できるWhere-Objectコマンドレットを使用します。
get-service | Where-Object {$_.Status -eq "Stopped"}
と入力して、Enterキーを押してください。

停止中のサービスを取得できました。
Where-Objectコマンドレットでは条件式を{}
で囲まれた部分に記述します(これをスクリプトブロックと呼びます)。また$_
はパイプで渡されたオブジェクトが格納される特殊な変数です。この変数にドットを付けて$_.Status
のように記述すると、パイプで渡されたオブジェクトの「Status
プロパティ」を意味することとなります。-eq
は比較演算子で「等しい」という意味です。
つまりWhere-Object {$_.Status -eq "Stopped"}
は、パイプで渡されたオブジェクトのStatusプロパティが「Stopped」に等しいものだけを返します。
グルーピング
同じプロパティの値を持つオブジェクトでグルーピングをするコマンドレットとして、Group-Object
があります。
例えば、指定したディレクトリにあるファイル群を拡張子別にグルーピングするには、
Get-ChildItem *.* | Group-Object Extension
と入力してEnterキーを押します。

拡張子別にデータがグルーピングされ、グループごとのファイル数や拡張子、グループ化されたファイル名が表示されています。
まとめ
今回は、
- コマンドレットの実行結果はオブジェクトであること
- パイプ
- Sort-Object
- Select-Object
- Where-Object
- Group-Object
について見てきました。Windows PowerShellが強力であることを少しでも実感していただけたでしょうか?
次回は、お約束通りスクリプトについて説明したいと思います。
Windows PowerShell 入門(2)-基本操作編 2的更多相关文章
- Windows PowerShell 入門(3)-スクリプト編
これまでの記事 Windows PowerShell 入門(1)-基本操作編 Windows PowerShell 入門(2)-基本操作編 2 対象読者 Windows PowerShellでコマンド ...
- Windows PowerShell 入門(7)-関数編2
この連載では.Microsoftが提供している新しいシェル.Windows Power Shellの使い方を解説します.前回に引き続きPowerShellにおける関数の取り扱いとして.変数と関数のスコ ...
- Windows PowerShell 入門(1)-基本操作編
Microsoftが提供している新しいシェル.Windows Power Shellの基本操作方法を学びます.インストール.起動終了方法.コマンドレット.命名規則.エイリアス.操作方法の調べ方について ...
- Windows PowerShell 入門(10)-デバッグ編
対象読者 Windows PowerShellでコマンドレット操作ができる方 何らかのプログラミング経験があればなお良い 必要環境 Windows PowerShell デバッグメッセージの出力 Po ...
- Windows PowerShell 入門(9)-エラー編
対象読者 Windows PowerShellでコマンドレット操作ができる方 何らかのプログラミング経験があればなお良い 必要環境 Windows PowerShell エラーをリダイレクトする リダ ...
- Windows PowerShell 入門(8)-関数編3
この連載では.Microsoftが提供している新しいシェル.Windows PowerShellの使い方を解説します.今回は.フィルタ.スクリプトブロック.変数のスコープについて取り上げます. はじめ ...
- Windows PowerShell 入門(6)-関数編1
この連載では.Microsoftが提供している新しいシェル.Windows Power Shellの使い方を解説します.今回は.関数の作成基礎と引数.戻り値.Switchパラメータについて説明します. ...
- Windows PowerShell 入門(4)-変数と演算子
Windows PowerShellにおける変数と演算子の使用方法について学びます.今回は代表的な演算子として.算術演算子.代入演算子.論理演算子.比較演算子.範囲演算子.置換演算子.ビット演算子.型 ...
- Windows PowerShell 入門(5)-制御構文
Windows PowerShellにおける制御構文について学びます.数ある制御構文の中でもSwitch文は.他の言語に比べ豊富な機能が用意されています. 対象読者 Windows PowerShel ...
随机推荐
- 《Go并发编程实战》读书笔记-初识Go语言
<Go并发编程实战>读书笔记-初识Go语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在讲解怎样用Go语言之前,我们先介绍Go语言的特性,基础概念和标准命令. 一. ...
- Java 读取propertoes文件
我一直不懂,Java里面的路径是咋样的,怎么找到我的资源文件? 直到我看到了这篇文件,写的是真棒.这篇文章 看完之后,豁然开朗的感觉 下面做些笔记,首先,Java有一个targer文件,下面有一个c ...
- C++回顾day02---<引用>---待补充
一:引用概念---引用就是为一个变量起一个别名 每个变量都是指向一块内存空间的标识,引用就是重新设置一个标识,但是这个标识还是指向同一个内存空间 和指针类似(其实引用本质就是使用了一个常指针 cons ...
- angular,vue,react的基本语法—样式处理
基本语法 样式处理: vue: 动态属性: v-bind:class 简写 :class react: 变量:class={selecter} angular: 指令:[ngClass]=" ...
- Ubuntu修改Apache默认Web端口
改成你要的端口,默认为80,这里我改成了8080,https改成了444,保存之后寻找000/default.conf并修改成和ports.conf文件一样的http端口,然后重启Apache服务器即 ...
- Gson入门教程【原】
gson一个jar包就能纵横天下,不像Json-lib.jar依赖其它jar包. 点击右边图片下载jar包 或以下链接 http://central.maven.org/maven2/co ...
- Vertica系列: 表的分段和分区
Vertica 有两个数据分布的概念, segmentation 和 partition, 至少有下面几个区别: 1.目的方面:segmentation 解决各节点数据倾斜问题, 适用于木桶原理, 数 ...
- ****** 四十二 ******、软设笔记【软件知识产权保护】-Internet和Intranet基础
知识产权保护 著作权法及实施条例 <中华人民共和国著作权法>及其实施条例,明确了保护文学.艺术和科学作品作者的著作权,以及与其相关的权益. 依据改法,我国不仅对文字产品,口述作品,音乐.戏 ...
- 【SRM-06 D】五色战队&&【codeforces 788E】 New task
原题链接:788E - New task Description 游行寺家里人们的发色多种多样,有基佬紫.原谅绿.少女粉.高级黑.相簿白等. 日向彼方:吾令人观其气,气成五彩,此天子气也. 琉璃:我们 ...
- 修改教材P74 一行代码 NineNineTable.java, 让执行结果是个三角形
修改教材P74 一行代码 NineNineTable.java, 让执行结果是个三角形: 提交在IDEA或命令行中运行结查截图,加上学号水印,没学号的不给成绩 2*9=18 3*9=27 4*9=36 ...