裏紙ノート - 20190829 Windows PowerShell ポケットリファレンス



用語

MTAMulti-Thread Apartment
STASingle Thread Apartment

MTAとSTA

MTA複数のスレッドが単一オブジェクトにアクセス可能。
データ同期を意識する必要がある。
STA単一スレッドのみ、単一オブジェクトにアクセス可能。

PowerShell

PowerShellシェル環境、スクリプト実行環境。
PowerShell ISEIntegrated Scripting Environment
開発環境。

スクリプト

.Net Frameworkクラスを活用可能。
ps1PowerShellスクリプト・ファイル
psd1マニフェスト
モジュールを定義する。
psm1モジュール・ファイル
Set-ExecutionPolicy実行ポリシーを指定する。
Set-AuthenticationSignatureスクリプトに署名する。
UTF-8のスクリプトのみ対応

実行ポリシー
Restricted実行不可
AllSigned署名済みのみ実行可能
RemoteSignedwebからダウンロードしたスクリプトは、署名済みのみ実行可能
ローカル・ファイルは署名なしでも実行可能
Unrestrictedすべて実行可能
webからダウンロードした署名なしスクリプトについて、実行前のプロンプト表示あり
ByPassすべて実行可能
実行前のプロンプト表示なし
Undefined起動オプションで、ポリシーを指定する。

起動オプション

-StaSTAモードで起動する。
-MtaMTAモードで起動する。
-InputFormatPowerShellの入力データ形式を指定する。
txt
xml
-OutputFormatPowerShellの出力データ形式を指定する。
txt
xml
-WindowStyle起動時のWindow状態を指定する。
Normal
Minimized
Maximized
Hidden
-ImportSystemModulesモジュールを指定する。

コマンドレット(Cmdlet)

文法モジュール名\コマンドレット名 -パラメータ名 -パラメータ値
コマンドレット名動詞-名詞

パラメータの種類

スイッチ・パラメータパラメータ名だけで有効なパラメータ。
パラメータ値をスイッチで指定する。
:$true
:$false
複数のパラメータ「,」で区切る。
複数パラメータが配列指定される。
位置パラメータパラメータ名を指定しない。
パラメータ値の指定位置(順番)で暗黙にパラメータ名が特定される。
連配列としてのパラメータ@{パラメーター名=パラメータ値, パラメーター名=パラメータ値, ...}
変数に代入する。
UNIXの世界テキストを出力する。
Windowsの世界オブジェクトを出力する。

基礎

変数

文法$スコープ:変数名

スコープ
globalどこからでも参照可能。
private現在のスコープ内で参照可能。
script現在のスクリプト内で参照可能。

大文字、小文字を区別しない。

文字列

「'」あるいは「"」で囲む。
コメント
一行コメント「#」で始める。
複数行コメント「<#」「#>」で囲む。
ヒア文字列
複数行の文字列
$mytext=@"
あけましておめでとうございます。
今年もよろしくお願いします。
"@
特殊文字
`エスケープ
行継続
`n改行
`rキャリッジ・リターン
`tタブ

演算子

-eq==
-ne!=
-gt>
-ge>=
-lt<
-le<=
論理演算子
-and
-or
-xor
-not
!
ビット演算子
-band論理積
-bor論理和
-bxor排他的論理和
-bnot論理否定
-shr>>
右へシフト
-shl<<
左へシフト
文字列演算子
+連結
+=連結
*繰り返し
-like比較
一致の場合True
-nolike比較
不一致の場合True
match正規表現比較
一致の場合True
-nomatch正規表現比較
不一致の場合True
-replace置換
-fフォーマット
"three" * 3
"hello" -match "[a-z]"
"see" -replace "ee", "aw"

-fフォーマット
{右辺配列のインデックス:書式}
右辺配列のインデックス対象文字列(配列)のインデックス。単一文字列の場合は0。
書式
#位に値があれば出力、なければ何も出力しない。
0位に値があれば出力、なければ0を出力する。
.小数点を出力する。
,区切り記号をを出力する。

桁区切り表示
"{0:#,0}" -f 10000000

小数点2桁表示
"{0:#.##}" -f (10 / 3)

配列

定義
$arr1 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
$arr2 = 1..10

#空白の配列
$arr3 = @()
$arr3.length

#連想配列
$hash = @{pie=9; oreo=8; nougat=7; marshmallow=6; lollipop=5}
$hash.oreo
$hash["oreo"]
$hash.kitkat = 4

配列を利用した代入
#配列間の値交換
$a, $b = 1, 2
$a, $b = $b, $a

#配列を単一の変数へ
$arr = 1..3
$a, $b, $c = $arr
配列演算子
+配列最後尾への値追加
配列の結合
*配列の繰り返し
-contains
-in
配列が指定の値を含む場合、Trueを返す。
-notcontains
-notin
配列が指定の値を含まない場合、Trueを返す。
-split文字列から、文字列配列を返す。
文字列を半角スペースで分割し、文字列配列を返す。
-join文字列配列を結合し、文字列を返す。

$arr = 1..10
$arr -contains 1
$arr -contains 100
1 -in $arr
100 -in $arr

$str = "a b c d e f g"
$str -split " "

$arr = -split $str
$arr -join ","
抽出演算子
左辺が配列の場合、条件に合致する値だけが抽出される。
-eq==
-ne!=
-gt>
-ge>=
-lt<
-le<=
-like比較
一致の場合True
-nolike比較
不一致の場合True
match正規表現比較
一致の場合True
-nomatch正規表現比較
不一致の場合True

フォルダ

.カレント・フォルダ
..親フォルダ
\ルート
~ホーム

PSドライブ

PSプロバイダPSドライブの種類
PSドライブ階層構造を持つリソース
Get-PSProviderPSプロバイダの一覧を取得する。
Get-PSDrive対象リソースの一覧を取得する。
アイテムPSドライブに含まれる項目
コンテナ配下にアイテムを保有できるアイテム

対象リソース
ドライブ・レターファイル・システム
HKCUHKEY_CURRENT_USER
レジストリ
HKLMHKEY_LOCAL_MACHINE
レジストリ
Certデジタル署名
Env環境変数
Aliasエイリアス
Variableスクリプト変数
Function関数
WSManWS-Management
Get-PSDriveでPSドライブ対象一覧を取得できる。

get-psdrive

get-childitem env:
get-childitem hkcu:
get-child-item function:

cd env
get-childitem

条件分岐

#if文
if(条件文){
    コマンド
}
elseif (条件文) {
    コマンド
}

#switch文
switch(変数){
    値 {コマンド; break}
    値 {コマンド; break}
    default{コマンド}
}

繰り返し

#while文
while(条件文){
    コマンド
}

#do-while文
do{
    コマンド
}while(条件文)

#for文
for($i = 0; 条件文; インクリメント){
    コマンド
}

#foreach文
foreach(変数 in 配列やコレクション){
    コマンド
}
breakループを抜ける。
continue現在のループを抜け、次のループへ移る。

関数

function 関数名{  
    #引数の定義
    param(引数となる変数, 引数となる変数, ...)

    コマンド
}

function 関数名{
    #引数の定義
    param(引数となる変数, 引数となる変数, ...)

    #beginブロック
    begin{
        コマンド
    }

    #processブロック
    process{
        コマンド
    }

    #endブロック
    end{
        コマンド
    }
}

filter フィルタ名{
    コマンド
}

ブロック
begin初期化処理。
パイプライン呼び出しの初回のみだけ実行される。
processパイプライン呼び出しごとに実行される。
end後処理
パイプライン呼び出しの最後だけ実行される。
filterbegin、endのない関数
processを独立させたもの。

エラー処理

trap[エラー型]{
    エラー時に実行するコマンド
}
trap実行後、エラー発生元の処理が継続実行される。
特定のエラーの未補足する場合、[エラー型]を指定する。
trap内でbreakを指定エラー発生元のエラー・メッセージが表示される。
エラー発生元に戻らない。
breakで終了する。
trap内でcontinueを指定エラー発生元のエラー・メッセージが表示されない。
エラー発生元に戻る。

try{
    コマンド
}
catch[エラー型]{
    コマンド
}
finally{
    コマンド
}||=

エラーを発生させる。
=|SH|
throw エラー・オブジェクト
throw エラー・メッセージ

リンク