はじめに
コジマです。
Developers.IOでPowerShell7が正式にリリースされた記事を発見
https://dev.classmethod.jp/articles/powershell-7-generally-available/#toc-10
今から約2か月前の記事ですね。
何が一番気になったかというと、三項演算子が使えるようになったらしい!
三項演算子はエンジニアの宗教上、好き嫌いが分かれますが、私は好きなので三項演算子試すついでに
他の追加機能も試してみたいと思います。
三項演算子
一般的な三項演算子の書き方と同じ書き方が使えました。
条件式 ? 真のとき : 偽の時
PS C:\Program Files\PowerShell\7> $a = 10 PS C:\Program Files\PowerShell\7> $a -eq 10 ? "yes" : "no" # yesが出てほしい yes PS C:\Program Files\PowerShell\7> $a = 5 PS C:\Program Files\PowerShell\7> $a -eq 10 ? "yes" : "no" # noが出てほしい no
ForEach-Object -Parallel
ForEach-Objectに-Parallelをつけることで並列処理できるようになりました。
大きなデータを処理したいときとかに使えそうですね。
# 並列に5件ずつ処理 PS C:\Program Files\PowerShell\7> 1..10 | ForEach-Object -Parallel { "Time {0:HH:mm:ss} | Input : {1}" -f (Get-Date),$_; Start-Sleep -Seconds 5 } Time 15:52:03 | Input : 1 Time 15:52:03 | Input : 2 Time 15:52:03 | Input : 3 Time 15:52:03 | Input : 4 Time 15:52:03 | Input : 5 Time 15:52:08 | Input : 6 Time 15:52:08 | Input : 7 Time 15:52:08 | Input : 8 Time 15:52:08 | Input : 9 Time 15:52:08 | Input : 10 # 1件ずつ処理 PS C:\Program Files\PowerShell\7> 1..10 | ForEach-Object { "Time {0:HH:mm:ss} | Input : {1}" -f (Get-Date),$_; Start-Sleep -Seconds 5 } Time 15:52:21 | Input : 1 Time 15:52:26 | Input : 2 Time 15:52:31 | Input : 3 Time 15:52:36 | Input : 4 Time 15:52:41 | Input : 5 Time 15:52:46 | Input : 6 Time 15:52:51 | Input : 7 Time 15:52:56 | Input : 8 Time 15:53:01 | Input : 9 Time 15:53:06 | Input : 10
PS C:\Program Files\PowerShell\7> 1..20 | ForEach-Object -Parallel { "Time {0:HH:mm:ss} | Input : {1}" -f (Get-Date),$_; Start-Sleep -Seconds 5 } -ThrottleLimit 10 Time 15:59:44 | Input : 1 Time 15:59:44 | Input : 2 Time 15:59:44 | Input : 3 Time 15:59:44 | Input : 4 Time 15:59:44 | Input : 5 Time 15:59:44 | Input : 6 Time 15:59:44 | Input : 7 Time 15:59:44 | Input : 8 Time 15:59:44 | Input : 9 Time 15:59:44 | Input : 10 Time 15:59:49 | Input : 11 Time 15:59:49 | Input : 12 Time 15:59:49 | Input : 13 Time 15:59:49 | Input : 14 Time 15:59:49 | Input : 15 Time 15:59:49 | Input : 16 Time 15:59:49 | Input : 17 Time 15:59:50 | Input : 18 Time 15:59:50 | Input : 19 Time 15:59:50 | Input : 20
Pipeline chain operators (&& と ||)
Pipeline chain operatorsというのは、以下のような記述のこと。
A && B =>Aが正常終了であればBを実行する A || B =>Aが正常集であればBは実行しない
PS C:\Program Files\PowerShell\7> Write-Output "A" && Write-Output "B" # Aが正常だからBも出力 A B PS C:\Program Files\PowerShell\7> Write-Outut "A" && Write-Output "B" # Aが異常だからBを出力せず終了 Write-Outut: The term 'Write-Outut' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. PS C:\Program Files\PowerShell\7> Write-Output "A" || Write-Output "B" # Aが正常だからBを出力しない A PS C:\Program Files\PowerShell\7> Write-Outpt "A" || Write-Output "B" # Aが異常だからBを出力する Write-Outpt: The term 'Write-Outpt' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. B
NULL合体演算子(??、??=)
NULL合体演算子というのは以下のよう。
A ?? B =>AがNULLの場合、Bを返す A ??= B =>AがNULLの場合、BをAに代入する
PS C:\Program Files\PowerShell\7> $A = $null PS C:\Program Files\PowerShell\7> $B = "not null" PS C:\Program Files\PowerShell\7> $A ?? $B #AがNULLだからBを返す not null PS C:\Program Files\PowerShell\7> $A = "not null" PS C:\Program Files\PowerShell\7> $B = $null PS C:\Program Files\PowerShell\7> $A ?? $B #AがNULLでないとき、Bは関係ない not null PS C:\Program Files\PowerShell\7> $A = $null PS C:\Program Files\PowerShell\7> $B = "not null" PS C:\Program Files\PowerShell\7> $A ??= $B #AがNULLなので、BをAに代入 PS C:\Program Files\PowerShell\7> Write-Output $A not null PS C:\Program Files\PowerShell\7> $A = "A is not null" PS C:\Program Files\PowerShell\7> $B = "not null" PS C:\Program Files\PowerShell\7> $A ??= $B #AがNULLでないので、BをAに代入しない PS C:\Program Files\PowerShell\7> Write-Output $A A is not null
エラー表示の簡素化
エラーの表示がすっきりしました。
PS C:\> Write-Outpt "A" Write-Outpt : 用語 'Write-Outpt' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として 認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再 試行してください。 発生場所 行:1 文字:1 + Write-Outpt "A" + ~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Write-Outpt:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException
PS C:\Program Files\PowerShell\7> Write-Outpt "A" Write-Outpt: The term 'Write-Outpt' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
個人的に、赤文字の威圧すごいなと思ってたんで、嬉しいですね。
さいごに
個人的にはエラーがすっきりしたのと、三項演算子使えるようになったのがよかったですね。
Parallelの恩恵を享受できるくらいがっつり触りたい気持ちもありますね。
この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!
以上、コジマでした。