pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

PowerShell勉強

コマンドレットの探し方

ワイルドカード指定で候補のコマンドレット表示が可能

> Get-*Permission

Get-Commandでも同様の事が可能

> Get-Command Get-*Permission

Get-historyコマンドで履歴確認

コマンドレットは[動詞]+[名詞]の命名規則あり

Getは参照系。コマンド名からリスク判定可能。学習コスト軽減。

Get-Command -Noun [機能]

Nounは名詞の意味
特定の機能に関するコマンドレット一覧の出力が可能

Get-Verb

[動詞]の一覧を出力

ヘルプの見方

Get-help コマンドレットでオンラインヘルプ表示可能

-?

ヘルプ表示

PowerShell起動時にスクリプト実行が可能

よく使う環境変市数設定等の自動化が可能
以下にファイルを生成する(全ユーザー適用)
C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1

コマンドレット共通

-?

ヘルプ表示

-WhatIf

ドライラン

-Confirm

実行確認の指定($true確認、$false確認しない)

-ErrorAction

例外発生時の処理指定
Continue(規定) エラー表示し続行
Stop エラー表示し停止
SilentContinue エラー表示せず処理継続

-Verbose

詳細情報出力

-Debug

詳細情報出力(開発者向け)

実行方法

`でコマンドを複数行に分けて記載できる

コマンドA; コマンドBで1行で複数コマンド実行

コマンドを記述したps1ファイルを実行可能。

ps1ファイルのパスにスペース含む場合は以下で実行

& 'パス'

変数定義方法

$で始まり、英数字、アンダースコアで定義

大文字小文字区別しない

${}で上記以外の文字も利用可能

> ${-a-} = "a"
> Write-Host ${-a-}
a

変数はオブジェクト。型は動的に決定。

型変換は以下で可能。

> $a = "a"; $b = 1
> $a + $b
a1
> $b + $a
値 "a" を型 "System.Int32" に変換できません。エラー: "入力文字列の形式が正しくありません。"
発生場所 行:1 文字:1
+ $b + $a
+ ~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) []、RuntimeException
    + FullyQualifiedErrorId : InvalidCastFromStringToInteger
> [string]$b + $a
1a

ショートカットと.NET Framework完全クラス名

[string]→[System.String]
ショートカットは他に以下があり。
[datetime]、[double]、[single]、[int]、[bool]

自動変数

自動的に設定される変数

変数名 内容
$_ パイプで渡す前のコマ。ンドの出力
$? 直前コマンドの終了ステータス
$args 引数リスト

他にもたくさんある。
PowerShellの環境変数と自動変数 - Qiita
【連載】PowerShell Core入門 - 基本コマンドの使い方 [16] 自動変数|サーバ/ストレージ|IT製品の事例・解説記事
Get-Variableコマンドで一覧表示可能

パイプ処理

オブジェクト渡し
オブジェクトを受ける主要コマンドは以下。エイリアスあり。

コマンドレット エイリアス 内容
Select-Object select 限定・追加
Sort-Object sort 並べ替え
Where-Object whereまたは? 並べ替え
ForEach-Object foreachまたは% ループ実行

上記は出力加工で使われる。
一括処理でもパイプは利用される。同一機能のコマンドレットのGet-* | Set-*
別機能でも利用可能なケースもあり 例) Get-User ...| Get-MailboxStatistics

サンプル

> Get-Process | Sort-Object CPU -Descending | select -First 5
Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName                                                                         
-------  ------    -----      -----     ------     --  -- -----------                                                                         
   2091      71   118912     188896     173.08  10484   1 chrome                                                                              
   1062      40   194092     223228     159.64  10692   1 chrome                                                                              
    234      13     2680      11668     122.94   9340   1 DCSHelper                                                                           
   3027     127    91668     174568      72.69   2248   1 explorer                                                                            
    795      56   182292     217188      57.92  10404   1 powershell_ise                                                                      
>

文字列の扱い

"で囲う
"を文字列内で使う場合は、
①""
②\"(エスケープ文字`を利用)
"内の変数は展開される
展開したくない場合、変数記述をエスケープする

> Write-Host $hoge
a
> Write-Host `$hoge
$hoge

特殊文字(改行等)は以下で利用可能
\0(NULL)、`b(バックスペース)、`t(タブ)、`r(CR)、`n(改行)
変数、特殊文字を展開したくない場合、'で囲う'を'内で使いたい場合は、
①''
②\'(エスケープ文字`を利用)

ヒアドキュメント

@"~"@ 変数展開あり
@'~'@ 変数展開なし