freedom-_-qの勉強履歴

メモ書きが主になるかと思います。勉強強制のために一日一記事目指してます。頭良くないので間違いが多々あるかと思います。

PowerShellの繰り返し処理について

はじめに

なんでまたPowerShell?となるかもしれないが、PowerShellにはPowerShellのいいところがある。

  1. Windows 10であれば、デフォルトでインストールされている
    1. つまり、社内の誰でも使える
  2. 簡単な処理であれば、どの言語より手軽な気がする(パイプ)
  3. .NET Frameworkライブラリを使用することが可能

繰り返し処理の書き方はいくつかあるようなので、とりあえず全部試して理解する。

学ぶことになったきっかけ▼ 弊社の情シスは、情シス・開発部以外の開発を禁じている。
欲しいツール・機能があれば上記部門に頼んでとのこと。
まあ、大規模になるとメンテナンス等厳しいからそうなるのも頷ける。
が、いざ実現したい内容を伝えると、何かにつけ拒否される。

ぼく「開発スピード早いPythonで●●開発して!」
情シス「無理。わかる人いない。」
ぼく「???」
ぼく「じゃあ昔VBAでマクロ作成してたっぽいし、VBAで作って。」
情シス「VBAでは作りません。」 ぼく「??????」

控えめに言ってゴミ。 というわけで、自分で作るしかない。残された言語はVBA, PowerShellしかない。
VBAPythonに慣れると色々めんどくさいから使いたくない... 一括なら楽そうだし、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っぽくて好き。
ForEachForEach-Objectの無限ループが分からないけど絶対使うことないから許して...