tech.guitarrapc.cóm

Technical updates

PowerShell 4.0 の機能についてまとめてみる (後編)

さて、前回PowerShell 4.0についての新機能を紹介しました。

今回は、その他の新機能と改善点などです。

目次

New features in Windows PowerShell Integrated Scripting Environment (ISE) (PwoerShell ISEの新機能)

PowerShell ISEについてです。

PowerShell ISE は、言わずと知れた PowerShell 統合スクリプティング環境です。

標準で OSについてくる 開発環境。 VSに統合されるのを望みますが、標準 このメリットもまた見逃せないところですね。

Debugerの機能強化 - PowerShell Workflow / Remoting

PowerShell ISE も Windows Workflow と リモートスクリプト実行のデバッグをサポートしました。

例えリモートコンピュータで実行しているスクリプトであっても、リモートセッション越しにデバッグが可能になりました。これで、Workflowは、スクリプトレベルで PowerShell, PowerShell ISE の両方でデバッグが可能です。

DSCConfiguration Providerconfigurationsの両方でインテリセンスサポートが追加

DSC の 新しいキーワードである、configurationsDSCのResource Providerに関してもインテリセンスがサポートされています。

また、TechNetには紹介されていませんが、コードスニペットでも configurations はサポートされています。

New features in Windows PowerShell Workflow (PwoerShell Workflowの新機能)

Workflow は、PowerShell にとっては大事な存在です。

何がかといえば、Workflow は Transaction / Checkpoint など継続処理に対して強く、処理の指示が用意、かつ PowerShell 構文と同様に書けるためです。

言語でサポートされている、これは協力な一端と言えます。

Workflow に関しては、以前まとめた記事PowerShell における Windows Workflow Foundation 4.0 (WF) 利用のすすめをどうぞ。

PowerShell同様、新コモンパラメータとしてPipelineVariableが追加されました。

これにより、パイプラインで渡していく処理で、Foreach-Objectを使って自動変数を変数に格納していた処理が簡易になりえます。

特に、System Center Orchestratorなどでもわかりますが、左から右にコマンドが次々にストリームとして渡されます。

タブ補完が機能強化されました。

これまでタブ補完が効かなかったシナリオでも有効になっています。例として、現在のRunspaceに存在しないコマンドなどでもタブ保管が聞くようになりました。

カスタムコンテナーアクティビティーのサポートが追加されました。

Activityパラメータの型が、 ActivityActivity[] あるいはActivity のGeneric Collectionだった場合に、引数としてScriptBlockを渡すとScriptBlock をXAMLに変換します。

また、これは、通常のPwoerShellにおける Script から Workflow へのコンパイルも同様です。*1

クラッシュした場合の自動再接続

もしWorkflowの途中でクラッシュしても、PowerShell Workflow は自動的に管理対象ノードに再接続します。

Foreach -Parallel アクティビティ構文で throttleの調整が可能になりました。

これはThrottleLimit プロパティで可能となります。

いよいよ5以上のパラレル実行が現実を帯びてきたのか楽しみですね。

これは近々試します。

ErrorActionSuspendパラメータが追加されました。

これは、WorkflowのErrorAction専用となります。

Workflowのエンドポイントで自動的にセッションを閉じるようになりました。

対象となるアクティビティのジョブ状態は、「in-progressでないこと」、「pendingでなにこと」です。

これにより、サーバーで閉じれるアクティビティは閉じる動作が実装されます。

WSMan の制限もあるのでぜひ望んでいた機能になりますね!

New features in Windows PowerShell Web Services (PowerShell Web Services の新機能)

PSWS でエラーが発生した場合の詳細表示、Azureのrest apiエラーコードガイドライン準拠となりました。

PowerShell Web ServiceやIIS拡張OData でCmdlet実行時にエラーが発生した場合に、詳細エラーメッセージとエラーコードがCallerに表示されます。

またAzure Rest API のエラーガイドラインに沿ったエラー表示となります。

エンドポイントでAPIバージョンを定めることができるようになりました。

特定バージョンのAPI使用強制も可能になり、クライントとサーバーでバージョンミスマッチが起こった場合は、クライントとサーバーの両方でエラーが表示されます。

Windows PowerShell 自身ど同様、型変換機能が改善されました。

デフォルトコンストラクターと異なるコンストラクタを使用した場合の型変換が改善しています。

Windows PowerShellでいうところのPSTypeConverterと同様の動作となります。

クエリ実行時に、紐づけられたインスタンスの拡張が可能になりました。

画像やオーディオ、ビデオなど大きなバイナリ転送コストは膨大になります。またこれらの転送ではバイナリをエンコーディングせずに送るほうが望ましくなります。

PSWSは、エンコーディングせずに名前付きリソースで転送しています。名前付きリソースは、Edm.Stream型のプロパティとなり、各リソースストリームは個別のURIをGet/Update操作に対して持っています。

リソースに対するCRUD(Create,Read,Update,Delete)メソッドでない操作に関して、Odata操作がサポートされます。

HTTP POSTリクエストで、対象URIに行いたい操作を送ることができます。操作に対するパラメータはPOST操作のbodyに設定します。

Windows Azureガイドラインに沿い全URLが単純化されました。

変更は、Key As Segmentがセグメントを1つのキーで表現するようになっています。もし複数のキーを参照する場合は、カンマ,で区切って表現してください。

リソース操作を含むことでより直接的に以前と動作と同様の動作が可能になりました。

以前は、Create, Update, Delete操作はPost/Put/Top LevelのDeleteを行うことでのみ実施可能でした。

本バージョンでは、これらの操作をリソース操作に含むことで、より直観的に行えるようになっています。

New features in Windows PowerShell Web Access (PowerShell Web Accessの新機能)

PowerShell WebAccessで存在するセッションの切断、再接続が可能になりました。

Web Console上のSaveボタンでセッションを消すことなく切断し、再度別の時に接続できるようになりました。

サインインページにデフォルトパラメータが表示されます

これを有効にするには、web.configOptional Connection Settingsエリアで表示したい値を設定します。

オプショナル接続設定も可能ですが、2個以上の認証ではできません。

Windows Server 2012 R2において、リモートからWindows PowerShell Web Access の認証を管理可能です。

新CmdletとしてAdd-PswaAuthorizationRuleTest-PswaAuthorizationRuleに、Credentialパラメータが追加されたことで 、管理者が「リモートコンピュータの認証」や「Widows PowerShell Web Access セッション」を管理可能になりました。

各タブでセッションを持つことで、一つのブラウザから複数のWindows PowerShell Web Access セッションを持てるようになりました。

これで、新たにブラウザを立ち上げて新しいセッションを作成する必要はなくなりました。

Notable bug fixes in Windows PowerShell 4.0 (特筆すべき PowerShell 4.0のバグ修正/改善)

フランス語で、Get-Counterがアポストロフェィを含んでいてもカウンター値を返せるようになりました。
デシリアライズしたオブジェクトでもGet-Typeメソッドが利用可能になりました。
#Requires ステートメントで Administrator (管理者)権限を必須と指定可能になりました。

利用する場合は、 #Requires -RunAsAdministratorとします。

これは、以前のコードでいう以下と同義です。

([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
Import-CsvCmdletが空白行を無視するように修正されました。

以前は、Select-String で \w などが必要だったので楽になりました。

Invoke-WebRequestをPowerShell ISE で実行するとメモリを大幅に喰う問題が修正されました。
Get-Moduleでバージョンが Versionに表示されるようになりました。

Versionは、.psdのバージョンが表示されます。

Remove-Item –Recurseでサブフォルダも削除されるようになりました。

これ本当にうれしいです。面倒だったので。

Get-Processにユーザー名プロパテ;が追加されました。

UserNameプロパティに表示されます。

Invoke-RestMethodで、全結果がきっちり返ってくるようになりました。

Connectで報告されていた以下の修正です。RSSや普段使いとして非常に致命的だったためこれで安心して使えます。

Invoke-RestMethod Accept header

でもこれは直さないっていってますん。

Invoke-RestMethod returns incorrect data | Microsoft Connect

hashtalbeにAdd-Memberをする場合、一度でも事前にhashtableにアクセスしておく必要がなくなりました。

以下が修正されています。

Add-Member doesn't work on Hashtables until they've been accessed.

Select-Object –Expandのプロパティがnullや空でも例外を吐かないようになリました。
Get-Processを他のコマンドとpipelineを介して使う場合、ComputerNameオブジェクトを受け取るようになりました。
ConvertTy-JsonConvertFrom-Jsonで、"を含んでいた場合にエラーが出る問題が改善されました。またエラーがメッセージがローカライズ対応しました。

以下のバグの修正です。

@{ D='AAAA"BBBB' } | ConvertTo-Json

ConvertTo-JSON in PSv3 Beta does not support values containing double-quotes

Get-Jobが新しいセッションでも完了したScheduled Jobを返すようになりました。
PowerShell 4.0で VHDのマウント、アンマウントをFileSystemプロバイダから行った時のもんだいが 修正されました。

PowerShellは、今後新しいドライブとして同一セッションで認識します。

ジョブタイプに合わせて、明示的にScheduledJobWorkflowモジュールを呼び出す必要がなくなりました。
workflowworkflowをネストしている場合のプロセス読み込みが高速可しました。

まとめ

以上が、PowerShell 4.0 の機能として紹介されています。

一部まだ不明なものがありますが、Invoke-RestMethodWorkflowに改善が入ったことはとてもうれしいですね。

また、Windows Server 2012 R2のデフォルト実行状態がRemoteSignedなのも歓迎です。

PwoerShell 4.0はDSC が注目されていますが、メソッド構文Pipeline Variablesなど多くの使い心地の向上が増しています。

今後も PowerShell について、アップデートを発信していきますね!

*1:これに関してはどのようなものかはっきりとわかりませんでしたので直訳としておきます