前回に引き続き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コマンドレット
 せっかくなので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パラメータを付加します。

(実際には1行)
Get-EventLog -logName system -newest 10 | Sort-Object eventID

 -descending

特定のプロパティを抜き出す

 Select-Objectコマンドレットを使用すると、特定のプロパティのみを抜き出すことができます。

 Get-ChildItemコマンドレットを実行するとModeLastWriteTimeLengthNameプロパティが表示されるのですが、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つずつ区切って考えると簡単です。

 *.*のファイル情報取得 | ファイル情報の中のNameとLengthを取得 | Lengthで並べ替え

 このようにパイプごとに処理を区切って考えることがポイントです。

特定条件のデータを取得する

 先ほどの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的更多相关文章

  1. Windows PowerShell 入門(3)-スクリプト編

    これまでの記事 Windows PowerShell 入門(1)-基本操作編 Windows PowerShell 入門(2)-基本操作編 2 対象読者 Windows PowerShellでコマンド ...

  2. Windows PowerShell 入門(7)-関数編2

    この連載では.Microsoftが提供している新しいシェル.Windows Power Shellの使い方を解説します.前回に引き続きPowerShellにおける関数の取り扱いとして.変数と関数のスコ ...

  3. Windows PowerShell 入門(1)-基本操作編

    Microsoftが提供している新しいシェル.Windows Power Shellの基本操作方法を学びます.インストール.起動終了方法.コマンドレット.命名規則.エイリアス.操作方法の調べ方について ...

  4. Windows PowerShell 入門(10)-デバッグ編

    対象読者 Windows PowerShellでコマンドレット操作ができる方 何らかのプログラミング経験があればなお良い 必要環境 Windows PowerShell デバッグメッセージの出力 Po ...

  5. Windows PowerShell 入門(9)-エラー編

    対象読者 Windows PowerShellでコマンドレット操作ができる方 何らかのプログラミング経験があればなお良い 必要環境 Windows PowerShell エラーをリダイレクトする リダ ...

  6. Windows PowerShell 入門(8)-関数編3

    この連載では.Microsoftが提供している新しいシェル.Windows PowerShellの使い方を解説します.今回は.フィルタ.スクリプトブロック.変数のスコープについて取り上げます. はじめ ...

  7. Windows PowerShell 入門(6)-関数編1

    この連載では.Microsoftが提供している新しいシェル.Windows Power Shellの使い方を解説します.今回は.関数の作成基礎と引数.戻り値.Switchパラメータについて説明します. ...

  8. Windows PowerShell 入門(4)-変数と演算子

    Windows PowerShellにおける変数と演算子の使用方法について学びます.今回は代表的な演算子として.算術演算子.代入演算子.論理演算子.比較演算子.範囲演算子.置換演算子.ビット演算子.型 ...

  9. Windows PowerShell 入門(5)-制御構文

    Windows PowerShellにおける制御構文について学びます.数ある制御構文の中でもSwitch文は.他の言語に比べ豊富な機能が用意されています. 対象読者 Windows PowerShel ...

随机推荐

  1. 10.外观模式(Facade Pattern)

    动机(Motivate):    在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化.那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的 ...

  2. SpringMVC+Shiro不拦截静态资源配置

    最近在弄SpringMVC与Shiro整合,发现如果将DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果DispatcherServlet改为拦截“/” ...

  3. JVM 虚拟机笔记

    GC算法 标记-清除算法复制算法标记-整理算法分代收集 新生代--[15次GC]-->老年代新生代:复制算法老年代: 标记-清除算法或标记-整理算法 GC策略采用的何种算法引用计数算法根搜索算法 ...

  4. Linux 内核里的数据结构:位图(bitmap)

    注: 本文由 LCTT 原创翻译,Linux中国 荣誉推出 Linux 内核中的位数组和位操作 除了不同的基于链式和树的数据结构以外,Linux 内核也为位数组(或称为位图(bitmap))提供了 A ...

  5. bzoj千题计划319:bzoj2865: 字符串识别(后缀自动机 + 线段树)

    https://www.lydsy.com/JudgeOnline/problem.php?id=2865 同上一篇博客 就是卡卡空间,数组改成map #include<map> #inc ...

  6. Mac Office 2016 破解

    官方最新版本office 是2016.15.38 此版本主要是修复了Excel内存损害漏洞. 官方下载的版本大小是1.67G,因为其他途径下载的版本,不确保是最新版本且为完整的版本.不知道我说的这个大 ...

  7. MySQL的随笔

    数据库引擎 MySQL5.0支持的存储引擎包括MyISAM,InnoDB.MEMORY.MERGE.BDB等等,其中InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表. MyISAM M ...

  8. 使用JAVA数组实现顺序表

    1,引入了JAVA泛型类,因此定义了一个Object[] 类型的数组,从而可以保存各种不同类型的对象. 2,默认构造方法创建了一个默认大小为16的Object数组:带参数的构造方法创建一个指定长度的O ...

  9. 将.csv数据导入到mysql中

    1.首先看一下我需要导入的数据: 用excel打开的时候显示: 用notepad++打开显示为: 2.使用notepad++打开改变字符集为UTF-8 3,建立表,表中的字段要和文件中的一致 3.执行 ...

  10. MVC异步AJAX的三种方法(JQuery的Get方法、JQuery的Post方法和微软自带的异步方法)

    异步是我们在网站开发过程中必不可少的方法,MVC框架的异步方法也有很多,这里介绍三种方法: 一.JQuery的Get方法 view @{ Layout = null; } <!DOCTYPE h ...