コマンドレットのパラメータを列挙してみる。2017の1日目です。Calendar、今年も始まりました。ここ数年は私がトップバッターを務めさせていただいて、1年間のPowerShell界隈の出来事をさくっとまとめてみています。Editionが各々正式版としてリリースされ、さらにはPowerShellがオープンソース化、マルチプラットフォーム展開を始めるという大きな変革があった年でした。今年2017年は昨年ほど大きな変化はないとはいえ、昨年のOSS化からのマルチプラットフォーム展開を着実に進行させた年だと言えると思います。以下、いくつかトピックを紹介します。Updateにも同梱されました。R2)のためのものです。Win10/2016に同梱のPester(テストフレームワーク)やPSReadline(コンソール入力支援)についてはWMF5.1には含まれていないので、別途PowerShellGetでインストールするのがお勧めです。ShellではまずBashがサポートされていましたが、今年9月にPowerShellもサポート(まだプレビューですが)されました。PowerShellのコマンドが使え、AzureのリソースにAzure:ドライブを介してアクセスすることが可能です。5.1であることはちょっと念頭においておいたほうがいいかもしれません。PowerShellの全機能がサポートされてないからだと思うんですが、今後に期待ですね。Codeの正式版(1.0)が5月に公開されました。現時点での最新バージョンは1.5.1となっています。ISEの方が多機能だったようにも思いますが、今はもう完全にISEの機能を追い越したんじゃないかと思います。Analyzer、テストフレームワークのPester、プロジェクト管理機能を提供するPlasterなどが統合されており、本格的な開発環境となっています。Coreの開発が各々可能です。VSCodeの開発に注力されることになります。ISEはとにかく標準添付である(GUI有効ならサーバーOSでも動く!)という強みがあり、シンプルなスクリプト記述であればそこそこ便利に使えるので、これからもシチュエーションに応じて使い分けて行けば良いのかなと思います。Candidate)となりました。6.0.0のGAリリースは来年1月になるそうです。OSS化直後からRCに至るまでの変更点は多岐に渡り、とても一言で説明できるものではないですが、ポイントとしては以下の3点に集約されるんじゃないかと思います。5.1のコードそのままであったと言ってよいかと思います。10年以上増改築が繰り返されたコードが突如、全世界に公開されたわけです。コミュニティの力でバグや変な仕様といった問題点が洗い出され、どんどん修正されていきました。不足していると思われる機能はどんどん追加されました。既存コマンドレットのパラメータが増えるというパターンが多かったように思います。特筆すべきは、破壊的変更であっても妥当性があれば躊躇せずに取り入れていったことかと思います。Coreでは細かいところで非互換性が色々出ていますので、移行の際には注意を要します。5.1なので、Windowsでしか動作しない部分が多々ありました。それをLinuxやMac環境でも動作するように多くの修正が加えられました。Edition相当のPowerShellをビルドすることが可能でした。Core」であることが明確にされました。CLR対応のコードのみとなりました。5.1に含まれているすべてのコマンドレットを網羅しているわけではありません。6.0には含まれておらず、α版の段階では実行も不可能(だったはず)でした。2.0がサポートされました。Coreでも実行可能になりました。PowerShellはどうなるのか、という話について。5.1については、今後もサポートライフサイクルに則り、重大なバグフィックスやセキュリティパッチ提供等のサポートは継続されます。PowerShellも同様です。Coreへと移行します。PowerShellとは無関係ということです。CoreがWindowsに同梱されるかどうかについては言及されておらず、今のところは不明です。以下は私見になります。Serverの管理はするが、Linuxとかは特に...というユーザーはこれからどうすべきか?という点は割と悩ましいところだと思います。Serverを管理するスクリプトが現時点であるなら、それを無理に今すぐCore対応にする必要はないと思います。現時点で今すぐCoreに移行すべき理由というのはとくに無いと感じます。Coreで追加、改善された機能はあるものの、Coreには無い機能もたくさんあるからです。PowerShell用に作れば良いのではないかと。OS付属のコマンドレットの動作は確実に保証されているわけですから。2016は半期に一度の大型アップデートで新機能が次々追加されていきます。Coreが含まれるようになったり、Coreのみ対応のコマンドレットが追加される可能性は無きにしもあらずなのではないかとも思います。Coreの状況をチラ見しつつ、未来に備えておく必要はあると思います。Windows10/Server2016の「次」も見据えて。それとPowerShellでWindowsもLinuxも面倒みていきたい、という野心がある方は、Coreを採用していくのがいいのではないかと思います。現状しばらくは茨の道ではあるとは思います。あとはスクリプトやモジュールを作成し公開する方は、より多くの環境で使われるように、可能であればCore対応を進めるのは悪くないんじゃないかと思います。Core構想とか、なにげに結構いろいろ話題はありました。Coreとしてはこれからも活発に動いていくものと思います。注目していきたいですね。そんな2017年の締めくくり、今年はどんな記事が集まるでしょうか。2017の参加、お待ちしております。|Tweetあけましておめでとうございます。2015年、直近の私のセッション予定について告知します。ご都合がよければ、ぜひぜひお越しくださいませ。(大阪会場)タイトル:「PowerShellスクリプトを書いてラクしよう」セッション概要:コンピューター上で定型作業を手動でちまちまやるのは効率が悪いです。スクリプトを書いて自動化しましょう。最近のWindowsにはPowerShellというステキな環境が最初から入っています。PowerShellはサーバー管理の自動化ツールとして重要ですが、本セッションではPowerShellでのスクリプトの書き方を、まずは身近なテーマの具体例を交えて伝授いたします。リリースされるv5.0の紹介もちょっとだけします。してセッションさせていただきます。今回のイベントのテーマとして、最新の技術をわかりやすく、初心者や学生に伝えるというのがあります。そこで私の方からは、初心に返って、本来PowerShellがターゲットとしているサーバーOSというよりかは、クライアントOSで日常的に使えそうなスクリプトを題材に、PowerShellの紹介をしていこうと思っています。Group大阪の主催者であるwakaさんによる「PowerShellで変わるサーバ構築と管理」というセッションもあります。こちらはPowerShellによるサーバー構築、管理のお話なので、どちらかというと本筋の話だと思います。Code(インフラ構成をコード記述により自動化する手法)が可能となりました。WindowsのみならずLinuxなど他プラットフォームについてもDSCで横断的に構成管理を行える世界が来ようとしています。5.0の新機能も交えて紹介したいと思います。ひとこと:オープンセミナー広島というIT系無料セミナーでセッションをさせていただくことになりました。AzureといったMicrosoft系サーバー、クラウド環境の構成管理のお話をします。これまでずっと、どちらかというとMicrosoft系のイベントばかりでセッションしてきたので、ちょっとドキドキしています。今回のイベントでは、Chef、Docker、Ansibleなど旬のお話が聞けるので私も勉強しにいこうと思っています。ご存じのとおり、Microsoftの昨今の戦略変更で、これからはMicrosoft技術のみならず、オープンソースのソフトウェアについてもちゃんと知っておかないといけませんし!2015/03/14(土)?イベント:わんくま同盟大阪勉強会タイトル:「未定」ひとこと:PowerShell関係で何かセッションをしようと思っています。|TweetPowerShellでJSONをパースする方法はいくつかあると思います。3.5から追加されたクラスで、JSONデータを読み書きするXMLReader/Writerを提供します。JSONをパースしてXMLに変換することが可能です。XMLはPowerShellから簡単に扱えるので有用な方法と言えるでしょう。PowerShellからの使用方法についてはこちらの記事が参考になります。3.5が入っていない環境では1の方法が使えないので別の方法を考える必要があります。JSONはテキストデータなので、頑張って自力でパースすることもできなくはないでしょう。PowerShellでやっている例はこちらになります。ScriptControl+JScriptを用いるもう少し簡便な方法はないかなと思っていろいろ考えたんですが、PowerShellではScriptControlを用いるとJScriptやVBScriptを実行することができます。JSONはJavaScriptで扱うことを想定しているだけあって、JScriptではeval()するだけでJSONをオブジェクトに変換することができます。')').toString();}"$sc.AddCode($jscode)$jsobj=$sc.CodeObject.parseJSON($json)$jsobjこのコードを実行すると、確かにJSONがパースされ、結果が$jsobjという変数に格納されるのですが、残念ながらPowerShellはJScriptのオブジェクト(JScriptTypeInfo)を展開することができないようなのです。Array)に変換し、その結果オブジェクトをPowerShellに戻すという方法を考えました。Arrayは扱えるので理屈の上ではうまくいきます。(参考までに、ASPでこの方法を実際にコードにしてる方がいらっしゃいました。ゆるゆると)しかしこの方法は当初の目的「簡便にJSONをパースする」からだいぶ離れてしまっています。JScript.NETを用いるそうだ、JScriptが駄目ならJScript.NETを使えばいいじゃない。JScript.NETなら結果は.NETのオブジェクトで返るしPowerShellでも読めるだろう、ということで、この前このブログで紹介したAdd-Typeコマンドレットを使ってJScript.NETのコードを実行する方法を利用してやってみました。名前が列挙されるという感じでうまくいきました。ここで$jsobjに格納されているのはMicrosoft.JScript.JSObjectクラスのオブジェクトです。このクラスのItemプロパティ(引数付きプロパティ、PowerShellではParameterizedPropertyと呼ばれる)にプロパティ名を引数として渡すと、その値が返却されます。PowerShellでは引数付きの既定プロパティはC#のインデクサと同様の構文で値が参照できるので、$jsobj[“items”]のように[]でアクセス可能です。これは$jsobj.Item(“items”)としても同様の結果が得られます(プロパティなのに()で値を取るところはVB風味?)。配列の列挙ですが、JSObjectと、オブジェクトが配列の場合はその派生クラスであるJSArrayObjectクラスになりますが、これらはIEnumerableインターフェースを実装しているのでforeachで列挙が可能です。ここで列挙されるのはあくまでkey、すなわちプロパティ名の方です。値が列挙されるわけではありません。ご存じのとおり、JavaScriptの配列、連想配列、オブジェクトは同じものであり、配列の場合はkeyが配列インデックスの数字に相当します。そのため配列をforeachしても「0,1,2...」という数字が列挙されるだけです。配列を列挙する場合は、この例のように、一旦JSArrayObjectを変数で受けて、それに対してforeachし、列挙した要素(インデックスの数字)をJSArrayObject.Itemプロパティの引数に与えることで、JS配列要素の値を取得してやる必要があると思います。2.0は入ってる)環境では、それほど手間をかけずJSONを扱えるという点でそれなりに有用ではないでしょうか。JSObjectもXMLみたいに型アダプタがあればプロパティアクセスできるようになるでしょうし、Add-Memberコマンドレットを駆使してJSObjectに動的にプロパティを追加する関数を書くのもいいかもしれません。そこまでいくとやはりお手軽からはかけ離れてしまうので今回はこの辺にとどめておきましょう。@mutaguchiBooks書籍版。