Powershell概要だけ押さえておきたい
Azureが結構ゴリゴリ使ってくる感じなので、知らないとキツそう。。。 管理者として実行の壁はある
実行ポリシー
対話的に実行してる場合は関係がない
スクリプト内で実行されているコマンドにのみ影響します。
Set-ExecutionPolicy コマンドレットは、実行ポリシーを変更するために使用します。 お勧めは、RemoteSigned ポリシーを使用することです。これを使用すると、ダウンロードしたスクリプトを実行する際に、スクリプトが信頼できる公開元によって署名されていることが求められます。
なるほど、自分で書いたスクリは問題なく実行できるってことか
コマンド
コマンドレット
PowerShell のコンパイルされたコマンドはコマンドレットと呼ばれています。
関数
エイリアス etc
Get-Helpと、そのエイリアス help, man
helpはmoreもラップしてるので実用ではhelpの方が良いsta.icon
読み方の例
スイッチパラメーター
値を必要としないパラメーターが、スイッチ パラメーターと呼ばれます。
argparseでいうstore_trueみたいなやつかsta.icon
ワイルドカード自動で補うマン
Get-Help では、ワイルドカード文字がバックグラウンドで自動的に追加されます。
help processは実際はhelp *process* らしいよsta.icon
読み方はわかたsta.icon
知りたかったところ!
get-member通さない場合は主要な?プロパティしか出ない
https://gyazo.com/ddda6f0734e57ee7c1dba91b42f16b58
code:こういう意味になる
{
"Status": "Running",
"Name: "w32time",
"DisplayName": "Windows Time"
}
get-member通すとどっさり
https://gyazo.com/f27f26779c1af4e64aafae0317c5c38d
で、typenameがわかれば、get-commandで親玉を辿れる
https://gyazo.com/e24659c73df218db0e61ddad7cb6b0ca
get-serviceというメソッドを持つservicecontrollerさんの、他のメソッドとかがわかるわけだsta.icon
プロパティだけ抽出する
code:ps1
Get-Service -Name w32time | Select-Object -Property *
メソッドチェーンみたいなことできる
code:powershell
(Get-Service -Name w32time).Stop()
計算プロパティはGet-Memberでは表示されない
これは、表示される値の多く (NPM(K)、PM(K)、WS(K)、CPU(s) など) が計算プロパティであるためです。 実際のプロパティ名を調べるには、コマンドを Get-Member にパイプ処理する必要があります。
都度計算してるから全部表示(計算)してると処理時間えぐいってことかsta.icon
出力生成しないコマンドレットの場合は passthru を使え
code:ps1
Start-Service -Name w32time -PassThru | Get-Member
out-hostはget-memberには通せない
Get-Member にパイプ処理するには、コマンドがオブジェクトベースの出力を生成する必要があります。……Out-Host は PowerShell ホストに直接書き込みますが、パイプライン用のオブジェクトベースの出力を生成しません。
最初に変数に入れて、あとはそれをいじる
code:ps1
$Users = Get-ADUser -Identity mike -Properties *
$Users | Get-Member
特にAD系コマンドレットのような「対象数」も「プロパティ数」もえぐい場合
毎回取得しにいくわけにはいかんからね
パイプで改行するのはok
;だと文を分ける
フィルターは速やかに実行する
Get-Serviceした後でやるのではなくて、Get-Serviceの-Nameを使う
helpのinputsとoutputs見たら、どういうコマンドにパイプで繋げられるかが書いてあることがある
引用符の話。一重だとパースをさせない
PowerShell では、引用符で囲まれた文字列の内容に、実際の値に拡張する必要がある変数が含まれていない限り、常に二重引用符ではなく一重引用符を使用する必要があります。 一重引用符を使用することで、引用符で囲まれている内容を PowerShell が解析する必要がなくなり、コードの実行速度がわずかに向上します。
日付取得
$a = Get-Date
ファイルの作成
new-item "test123.txt" -type file
cdやdirはエイリアス
これはエイリアスで cd を使うと Set-Location コマンドレットを実行しています
同じように dir や ls では Get-ChildItem コマンドレットが実行されています
https://gyazo.com/f141b4f51a394f6787a2ba3d7ad4605d
out-gridview便利やな。こんなGUIができるsta.icon