PowerShellの繰り返し処理について
はじめに
なんでまたPowerShell?となるかもしれないが、PowerShellにはPowerShellのいいところがある。
- Windows 10であれば、デフォルトでインストールされている
- つまり、社内の誰でも使える
- 簡単な処理であれば、どの言語より手軽な気がする(パイプ)
- .NET Frameworkライブラリを使用することが可能
繰り返し処理の書き方はいくつかあるようなので、とりあえず全部試して理解する。
学ぶことになったきっかけ▼
弊社の情シスは、情シス・開発部以外の開発を禁じている。
欲しいツール・機能があれば上記部門に頼んでとのこと。
まあ、大規模になるとメンテナンス等厳しいからそうなるのも頷ける。
が、いざ実現したい内容を伝えると、何かにつけ拒否される。
ぼく「開発スピード早いPythonで●●開発して!」
情シス「無理。わかる人いない。」
ぼく「???」
ぼく「じゃあ昔VBAでマクロ作成してたっぽいし、VBAで作って。」
情シス「VBAでは作りません。」
ぼく「??????」
控えめに言ってゴミ。
というわけで、自分で作るしかない。残された言語はVBA, PowerShellしかない。
VBAはPythonに慣れると色々めんどくさいから使いたくない...
一括なら楽そうだし、PowerShellにするかぁ(消去法)。
有限ループ
1~10を表示する。
For
一番基本のFor文。変数の頭に$
が付くのと、比較演算子が-lt
なのを除けばよくある書き方だしわかる。
For ($i=0; $i -lt 10; $i++){ echo $i }
ForEach
Pythonと似ているから特に違和感はない。
むしろrange(1,11)
より開始と終了が分かりやすい1..10
のほうが好きまである。
ForEach($i in 1..10){ echo $i }
ForEach-Object
1..10
をパイプでForEach-Object
で渡す。渡された中身は自動変数$_
に格納されている。
1..10 | ForEach-Object{echo $_}
省略記法(Alias
)も用意されている。
タイプ数少ないし、これをメインに使っていくと思う。
1..10 | %{echo $_}
While
$i++
を忘れて無限ループすることが稀に良くある。
なったらなったでCtrl+Cで押せばいいだけなので特別害はない。
$i=1; While($i -le 10){ echo $i $i++ }
Do-While
最低一回はループ内を実行したい場合に便利。
While内の条件は継続条件。
$i=1; Do{ echo $i $i++ }While($i -le 10)
Do-Until
Until内の条件は終了条件なので注意。
$i=1; Do{ echo $i $i++ }Until($i -gt 10)
おまけ
単に1~10まで表示するなら以下が最短な気がする。
1..10
無限ループ
For
何かしら抜ける条件がないと無限にループする。
無限ループには気を付けよう!
For(;;){
echo inf
}
While
While (1){ echo inf }
Do-While
こんな書き方変態しかしないから、素直にWhile使おう。
Do{ echo inf }While(1)
Do-Until
Do-Whileより変態感アップ!
Do{ echo inf }Until(0)
おわりに
ForEach-Object
の省略記法がPowerShellっぽくて好き。
ForEach
とForEach-Object
の無限ループが分からないけど絶対使うことないから許して...