さて、前回PowerShell 4.0についての新機能を紹介しました。
今回は、その他の新機能と改善点などです。
- PowerShell ISEの新機能
- PowerShell Workflowの新機能
- PowerShell Web Servicesの新機能
- PowerShell Web Accessの新機能
- バグ修正と改善
- Get-Counterのフランス語対応
- デシリアライズオブジェクトでのGetTypeメソッド対応
- #Requiresステートメントでの管理者権限チェック
- Import-Csvでの空白行の無視
- Invoke-WebRequestのメモリリーク修正
- Get-Moduleのバージョン表示
- Remove-Item -Recurseの改善
- Get-ProcessへのUserNameプロパティ追加
- Invoke-RestMethodの結果取得改善
- HashtableへのAdd-Member改善
- Select-Object -Expandのnull処理改善
- Get-ProcessのComputerNameパイプライン対応
- ConvertTo-JsonとConvertFrom-Jsonの改善
- Get-JobのScheduled Job対応
- VHDマウント・アンマウントの修正
- ジョブタイプの自動認識
- Workflowネスト時のパフォーマンス改善
- まとめ
PowerShell ISEの新機能
PowerShell ISEは、言わずと知れたPowerShell統合スクリプティング環境です。標準でOSについてくる開発環境として、VSに統合されるのを望みますが、標準このメリットもまた見逃せないところですね。
Debugerの機能強化 - PowerShell WorkflowとRemoting
PowerShell ISEもWindows Workflowとリモートスクリプト実行のデバッグをサポートしました。
例えリモートコンピュータで実行しているスクリプトであっても、リモートセッション越しにデバッグが可能になりました。これで、Workflowは、スクリプトレベルでPowerShell, PowerShell ISEの両方でデバッグが可能です。
DSCのインテリセンスサポート
DSCの新しいキーワードである、configurationsとDSCのResource Providerに関してもインテリセンスがサポートされています。
また、TechNetには紹介されていませんが、コードスニペットでもconfigurationsはサポートされています。

PowerShell Workflowの新機能
Workflowは、PowerShellにとっては大事な存在です。WorkflowはTransaction / Checkpointなど継続処理に対して強く、処理の指示が用意で、かつPowerShell構文と同様に書けるためです。言語でサポートされている、これは強力な一端と言えます。
Workflowに関しては、以前まとめた記事PowerShell における Windows Workflow Foundation 4.0 (WF) 利用のすすめをどうぞ。
PipelineVariableパラメータの追加
これにより、パイプラインで渡していく処理で、Foreach-Objectを使って自動変数を変数に格納していた処理が簡易になりえます。
特に、System Center Orchestratorなどでもわかりますが、左から右にコマンドが次々にストリームとして渡されます。
タブ補完の機能強化
これまでタブ補完が効かなかったシナリオでも有効になっています。例として、現在のRunspaceに存在しないコマンドなどでもタブ補完が効くようになりました。
カスタムコンテナーアクティビティーのサポート
アクティビティパラメータの型が、 ActivityやActivity[]あるいはActivity のGeneric Collectionだった場合に、引数としてScriptBlockを渡すとScriptBlockをXAMLに変換します。
また、これは、通常のPwoerShellにおけるScriptからWorkflowへのコンパイルも同様です。*1
クラッシュした場合の自動再接続
もしWorkflowの途中でクラッシュしても、PowerShell Workflowは自動的に管理対象ノードに再接続します。
Foreach -Parallelでのthrottle調整
ThrottleLimitプロパティで調整が可能になります。いよいよ5以上のパラレル実行が現実を帯びてきたのか楽しみですね。これは近々試します。
ErrorActionにSuspendパラメータを追加
WorkflowのErrorAction専用となります。
Workflowエンドポイントでセッションの自動クローズ
対象となるアクティビティのジョブ状態は、「in-progressでないこと」「pendingでないこと」です。これにより、サーバーで閉じられるアクティビティは閉じる動作が実装されます。WSManの制限もあるのでぜひ望んでいた機能になりますね!
PowerShell Web Servicesの新機能
エラーの詳細表示とAzure REST APIガイドライン準拠
PowerShell Web ServiceやIIS拡張ODataでCmdlet実行時にエラーが発生した場合に、詳細エラーメッセージとエラーコードがCallerに表示されます。
またAzure Rest APIのエラーガイドラインに沿ったエラー表示となります。
エンドポイントでのAPIバージョン指定
特定バージョンのAPI使用強制も可能になり、クライントとサーバーでバージョンミスマッチが起こった場合は、クライントとサーバーの両方でエラーが表示されます。
型変換機能の改善
デフォルトコンストラクターと異なるコンストラクタを使用した場合の型変換が改善しています。Windows PowerShellでいうところのPSTypeConverterと同様の動作となります。
名前付きリソースストリームのサポート
画像やオーディオ、ビデオなど大きなバイナリ転送コストは膨大になります。またこれらの転送ではバイナリをエンコーディングせずに送るほうが望ましくなります。
PSWSは、エンコーディングせずに名前付きリソースで転送しています。名前付きリソースは、Edm.Stream型のプロパティとなり、各リソースストリームは個別のURIをGet/Update操作に対して持っています。
OData操作のサポート
HTTP POSTリクエストで、対象URIに行いたい操作を送ることができます。操作に対するパラメータはPOST操作のbodyに設定します。
URLの単純化
Windows Azureガイドラインに沿い全URLが単純化されました。Key As Segmentがセグメントを1つのキーで表現するようになっています。もし複数のキーを参照する場合は、カンマ,で区切って表現してください。
リソース操作の直感的な実行
以前は、Create, Update, Delete操作はPost/Put/Top LevelのDeleteを行うことでのみ実施可能でした。
本バージョンでは、これらの操作をリソース操作に含むことで、より直観的に行えるようになっています。
PowerShell Web Accessの新機能
セッションの切断と再接続
Web Console上のSaveボタンでセッションを消すことなく切断し、再度接続できるようになりました。
サインインページのデフォルトパラメータ表示
これを有効にするには、web.configのOptional Connection Settingsエリアで表示したい値を設定します。
オプショナル接続設定も可能ですが、2個以上の認証ではできません。
リモートからの認証管理
新CmdletとしてAdd-PswaAuthorizationRuleとTest-PswaAuthorizationRuleに、Credentialパラメータが追加されたことで、管理者が「リモートコンピュータの認証」や「Widows PowerShell Web Accessセッション」を管理可能になりました。
ブラウザタブでの複数セッション対応
これで、新たにブラウザを立ち上げて新しいセッションを作成する必要はなくなりました。
バグ修正と改善
PowerShell 4.0で特筆すべきバグ修正と改善点です。
Get-Counterのフランス語対応
デシリアライズオブジェクトでのGetTypeメソッド対応
#Requiresステートメントでの管理者権限チェック
利用する場合は、 #Requires -RunAsAdministratorとします。
これは、以前のコードでいう以下と同義です。
([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
Import-Csvでの空白行の無視
以前は、Select-Stringで \wなどが必要だったので楽になりました。
Invoke-WebRequestのメモリリーク修正
Get-Moduleのバージョン表示
Versionプロパティに.psd1のバージョンが表示されるようになりました。
Remove-Item -Recurseの改善
これ本当にうれしいです。面倒だったので。
Get-ProcessへのUserNameプロパティ追加
UserNameプロパティでユーザー名が表示されるようになりました。
Invoke-RestMethodの結果取得改善
Connectで報告されていた以下の修正です。RSSや普段使いとして非常に致命的だったためこれで安心して使えます。
でもこれは直さないっていってますん。
Invoke-RestMethod returns incorrect data | Microsoft Connect
HashtableへのAdd-Member改善
以下が修正されています。
Add-Member doesn't work on Hashtables until they've been accessed.
Select-Object -Expandのnull処理改善
Get-ProcessのComputerNameパイプライン対応
ConvertTo-JsonとConvertFrom-Jsonの改善
以下のバグの修正です。
@{ D='AAAA"BBBB' } | ConvertTo-Json
ConvertTo-JSON in PSv3 Beta does not support values containing double-quotes
Get-JobのScheduled Job対応
VHDマウント・アンマウントの修正
PowerShellは、今後新しいドライブとして同一セッションで認識します。
ジョブタイプの自動認識
Workflowネスト時のパフォーマンス改善
まとめ
以上が、PowerShell 4.0の機能として紹介されています。
一部まだ不明なものがありますが、Invoke-RestMethodやWorkflowに改善が入ったことはとてもうれしいですね。
また、Windows Server 2012 R2のデフォルト実行状態がRemoteSignedなのも歓迎です。
PwoerShell 4.0はDSCが注目されていますが、メソッド構文やPipeline Variablesなど多くの使い心地の向上が増しています。
今後もPowerShellについて、アップデートを発信していきますね!
*1:これに関してはどのようなものかはっきりとわかりませんでしたので直訳としておきます