-
varキーワードによる変数宣言。変数宣言の場所がどこなのかわからないので。
-
classキーワードによるクラス構文。オブジェクト指向としての機能は基本不要だけど、変数と操作メソッドをセットで扱いたいことがある。
-
usingによるリソース破棄構文。try/finallyはネストが深くなりすぎるので。
-
三項演算子(?)とnull合体演算子(??)のサポート。
-
Set-StrictModeの機能強化。変数宣言を自動的にprivateで宣言したり、親スコープの変数については自動で参照しないオプションがほしい。親スコープの変数を自動参照する動作はトラブルの元にしかならない気がしてる。
-
{}によるステートメントのブロック化構文。C#みたいに変数スコープは必要はないけど、一定の領域をインデントしたい時がある。Write-Progress、Write-VerboseとかStopwatchの時間計測部分とか。
-
Invoke-CommandのArgumentListにSplatting形式で変数を渡せるようにしてほしい。ArgumentListとScriptBlockのparamブロックで2回変数名を指定するのはメンテが面倒。 現行のPowerShellでもusingで変数を修飾することで呼出し元の変数が使えるけど、一旦変数に受ける必要があったりするので可読性が微妙すぎる。
-
PowerShell版のFxCop/StyleCop系のコード解析ツール。動作が怪しいコードは警告出してほしい。例)親スコープの変数を使ってる場合や、-eqがフィルタ演算子として動作する可能性がある場合。後、ReSharperみたいにスタイルを自動整形してくれる機能も欲しい。
-
Out-GridViewの機能強化。グループ化表示の機能が欲しい。後、デバッガのように変数の階層を確認できるようにしてほしい。
-
.NET のTPLベースの並列実行機能。自前でどうにか実装できないか試してるけどいろいろ課題が。
11.拡張メソッドへの対応。最近の.NETのライブラリは拡張メソッドで機能が追加されてることが多いので、PowerShellから直接拡張メソッドを呼び出せないのは致命的。(一応今でも静的メソッドを呼出す形式なら使える)
12.LINQへの対応。ただ型情報の関係でキャストが必要になるはずなので実用性としてはどうだろ。静的メソッド形式でLINQのAPIを呼び出す例
[Linq.Enumerable]::Any(([int[]] @(1, 2, 3)), [Func[int, bool]]{
param ([int] $p)
return $p -eq 2
})
2 は5.0で満たされましたね。
8 は、ScriptAnalyzer やVSCode + PowerShell拡張でフォーマットや推奨されない記述ははじかれますね。ただCopというか動作が怪しいコード解析はないですね。
9 はPowerShell CoreでむしろGUIが撲滅されてて今後どうなるのか感ありますね。