PowerShellのコマンドレットを学ぶ方法

【改訂新版】 Windows PowerShell ポケットリファレンス

【改訂新版】 Windows PowerShell ポケットリファレンス

Windows PowerShellクックブック

Windows PowerShellクックブック

1. PowerShell入門(コマンドレット)

動作確認は Windows 10 / PowerShell Version 5 にて行います。

1.1. 作業フォルダの作成

作業フォルダとして D:\tmp を作成します。

1.2. PowerShellの開き方

エクスプローラD:\tmpを開き、アドレスバーに powershellと入力し、Enterを押すと、PowerShellプロンプトが開きます。

1.3. コマンドレット

動作確認のスクリプトは、コマンドレットのエイリアスを使用していきます。

1.3.1. エイリアスの一覧

エイリアスの一覧は、次のコマンドレットで確認します。

> get-alias

1.3.2. エイリアスに関連付けられたコマンドレット

エイリアスからコマンドレットを知りたい場合は、次のコマンドで確認します。

> get-alias -Name ac

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           ac -> Add-Content

1.3.3. ヘルプを取得

指定したコマンドレットのヘルプを取得します。

> get-help -name gc

名前
    Get-Content
構文
    Get-Content [-Path] <string[]>  [<CommonParameters>]
    Get-Content  [<CommonParameters>]
エイリアス
    gc
    cat
    type
注釈
    Get-Help を実行しましたが、このコンピューターにこのコマンドレットのヘルプ ファイルは見つかりませんでした。ヘルプの一部だけが表示されています。
        -- このコマンドレットを含むモジュールのヘルプ ファイルをダウンロードしてインストールするには、Update-Help を使用してください。
        -- このコマンドレットのヘルプ トピックをオンラインで確認するには、「Get-Help Get-Content -Online」と入力するか、
           https://go.microsoft.com/fwlink/?LinkID=113310 を参照してください。

1.4. スクリプトの実行権限

TODO あとから書きます

1.5. ファイル

1.5.1. 空のファイルを作成

utf8のファイル作成します。

> ni -ItemType File t1.txt

1.5.2. 作成したファイルの存在を確認

> gci -File ./

    ディレクトリ: D:\tmp

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2018/03/01     23:06             74 main.ps1
-a----       2018/03/01     23:02              0 t1.txt

1.5.3. ファイルへテキストを出力

> ac t1.txt "12345"

1.5.4. ファイルの内容を確認

> gc t1.txt
12345

1.5.5. ファイルの削除

> rm t1.txt

これでファイルの作成、確認、削除を行えるようになりました。

1.6. ディレクト

1.6.1. ディレクトリの作成

> ni -ItemType Directory d1

1.6.2. 作成したディレクトリの確認

> gci -Directory ./

ディレクトリ: D:\tmp
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2018/03/01     23:34                d1

1.6.3. ディレクトリの削除

指定したディレクトリを削除します。

> rm -Recurse ./d1

パラメータ -Recurse により、サブディレクトリを削除する場合に確認メッセージを表示しないようにしています。

これでディレクトリの作成、確認、削除を行えるようになりました。

1.7. パスの操作

1.7.1. パスの結合

パスとパスを結合します。

> join-path d:\tmp t1.txt
d:\tmp\t1.txt

結合するとき、プロバイダに応じたパス区切り文字(¥など)が適切に付加さ れます。

これでファイルのパスを結合することができるようになりました。

1.7.2. パスを分割

パスから要素を取り出します。

パスから親ディレクトリを取り出します。

> split-path d:\tmp\t1.txt -parent
d:\tmp

パスから親ファイル名を取り出します。

> split-path d:\tmp\t1.txt -leaf
t1.txt

これでファイルのパスから要素を取り出すことができるようになりました。

1.7.3. パスの存在を確認

パスが存在するかどうかを確認します。

> test-path ./t1.txt
True

>  test-path ./t99.txt
False

これでファイルのパスが存在を確認できるようになりました。

1.8. オブジェクト操作

1.8.1. オブジェクトを列挙する

> gci | foreach FullName
D:\tmp\main.ps1
D:\tmp\t1.txt
D:\tmp\t2.txt
D:\tmp\t3.txt

> gci | foreach {Write-warning $_.FullName}
警告: D:\tmp\main.ps1
警告: D:\tmp\t1.txt
警告: D:\tmp\t2.txt
警告: D:\tmp\t3.txt

入力オブジェクトで指定された複数のオブジェクトに対し、1オブジェクトずつ列挙スクリプトブロックで指定したスクリプトブロックを実行します。

これで複数のオブジェクトを列挙できるようになりました。

1.8.2. ソート

ファイル t3.txt に下記のデータが含まれるとします。

banana
apple
orange
banana
banana
apple

ファイル t3.txt を読み取り、並べ替えます。

> gc t3.txt | sort
apple
apple
banana
banana
banana
orange

これでファイルの内容をソートすることができるようになりました。

1.8.3. ユニーク

重複しないようにするにはguを使用します。

> gc t3.txt | sort | gu

apple
banana
orange

これでファイルの内容をユニークにすることができるようになりました。

1.8.4. フィルター

> gci | where Name -Match "^t1"

ディレクトリ: D:\tmp
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2018/03/01     23:29              7 t1.txt

これでオブジェクトをフィルタリングすることができるようになりました。

1.8.5. セレクト

オブジェクトの指定した項目を選択します。

> gci | select Name,Length

Name     Length
----     ------
main.ps1     74
t1.txt        7
t2.txt       30
t3.txt       49

これでオブジェクトを選択することができるようになりました。

1.9. ロケーション

1.9.1. ロケーションを取得

PowerShellドライブ内で位置を取得します。

> gl

Path
----
D:\tmp

これでドライブ内で位置を取得することができるようになりました。

1.10. ユーティリティ

1.10.1. ファイルを検索する

> sls -Path D:\tmp\*.* -Pattern orange

t3.txt:3:orange

パラメータ -Pathディレクトリのみを指定するとエラーになります。 ファイルを検索する場合は、ディレクトリパス\*.*を指定します。

これでフォルダ内を検索することができるようになりました。

1.10.2. 文字列を検索する

> gc t3.txt | sls -pattern apple

apple
apple

これでファイルから文字列を検索することができるようになりました。

1.10.3. ファイルの行数を数える

> (gc ./t3.txt).length
6

これでファイルの行数を数えるとができるようになりました。

1.10.4. コマンドの実行時間を計測する

> measure-command {gci}

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 2
Ticks             : 21077
TotalDays         : 2.43946759259259E-08
TotalHours        : 5.85472222222222E-07
TotalMinutes      : 3.51283333333333E-05
TotalSeconds      : 0.0021077
TotalMilliseconds : 2.1077

これでコマンドの実行時間を計測できるようになりました。

1.10.5. メッセージを書き込む

> write-host -ForegroundColor Yellow test
test

このコマンドレットで文字列を表示する場合、後続パイプラインへの出力は行いません。

これでコンソールに文字列を表示できるようになりました。

1.10.6. オブジェクトを書き込む

> write test
test

オブジェクトを標準ストリームに出力し、次のパイプラインに書き込みます。 リダイレクトやパイプラインを指定しない場合は、その場でオブジェクトがコンソールに表示されます。

1.10.7. エラーを表示

> write-error error!
write-error error! : error!
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException

エラーストリームに メッセージ もしくは 例外オブジェクト で指定したエラー、または エラーレコード で指定したエラーレコードを書き込みます。リダイレクトを記述しない場合は、コンソールにエラーを赤字で出力します。 カテゴリ にはエラーの種類を選択可能です。

これでコンソールにエラーを表示できるようになりました。

1.10.8. 警告を表示

> write-warning warn!
警告: warn!

これでコンソールに警告を表示できるようになりました。

1.10.9. デバッグを表示

> write-debug "debug" -debug
デバッグ: debug

なお、このコマンドレットはシェル変数$DebugPreferenceによって動作が異なります。デフォルトは"SilentlyContinue"となっており、コンソールになにも表示しません。"Continue"を代入するとメッセージが表示されるようになります。"Stop"だとメッセージ表示後ストップエラーが表示されます。"Inquire"だとメッセージ表示後操作 の続行を確認するプロンプトが表示されます。

これでデバッグすることができるようになりました。

1.10.10. プログレスバーを表示

> 0..100 | foreach{Start-Sleep -Milliseconds 100; Write-Progress "now loading" "$_ $ complete..." -PercentComplete $_}

これでプログレスバーを表示することができるようになりました。

1.10.11. 日付を取得する

> get-date
2018330:26:51

> get-date -Format "yyyy/MM/dd HH:mm:ss"
2018/03/03 00:28:12

これで日付を取得することができるようになりました。

1.10.12. グリッドビューを表示

> gps | ogv

これでグリッドビューを表示することができるようになりました。