コマンドレットのパラメータを列挙してみる。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の参加、お待ちしております。2016の1日目です。PowerShellアドベントカレンダー、今年も始まりました。みなさまのご協力の甲斐あって、過去5年間はすべて完走していますが、今回もできれば完走を目指していく感じでまいりましょう。色々な立場の方からの視点でPowerShellを俯瞰できるこのイベント、私自身も毎年楽しんでおります。去年も2015年のPowerShellをまとめる的な記事から始めたわけですが、今年も去年に負けず劣らず、大変革の年だったと思いますので、今回も1年を振り返るところからスタートしましょう。去年のPowerShell5.0登場、周辺モジュールのOSS化といった大きな動きがあってから、今年の前半は少しおとなしめ?の界隈でした(5.0のインストーラーにバグがあって一時非公開とか小騒動はありました)が、まず驚いたのがPowerShellそのものではなくて、Windowsで動くbashが登場したというトピックですね。発表があったのは今年の3月末の事です。Linux"という仕組みの上で動作するUbuntu上で動作するbashとして動作させてしまおうというものです。Windows"という名称になります。このbash、Windowsのシステムを管理するためのものではなく、Web等の開発用途を想定して提供されたものです。本来的にはPowerShellとは関係ないのですが、当初は色々と誤解が飛び交ったように思います。曰く、MSはPowerShellを捨ててやっとbashを採用した。PowerShellとは何だったのか。これらの誤解や疑問には、PowerShellの公式ブログで、bashという新たなシェルがWindowsに追加されたが、両者は並立するものだ、PowerShellはこれからも進化するよ!といった異例の公式見解が示されたりもしました。Updateで正式に利用可能となりました。5.1)のプレビュー版が登場しました。10に同梱されたものの、2016正式版までやや時間を要すこととなりました。5.0にはいくつかの機能や改良が加えられ、結局、5.1というバージョンが登場するに至ったものと思われます。Updateという大型アップデート適用で使えるようになりました。2016にも(もちろん)同梱されました。5.1ではローカルユーザーやグループを扱うコマンドレット等が(ようやく?)追加されたりもしています。Server用のPowerShellが、従来のPowerShellと分離した点でしょう。Edition"と呼ばれます。Edition"が新たに登場しました。Core上で動作します。CoreはOSS(オープンソースソフトウェア)となっています。Serverの管理に必要十分な機能を保っているのではないかと個人的には思っています。今年、PowerShell界をもっとも震撼させたニュース、それは間違いなく、今年8月に実施された、PowerShellのオープンソース化でしょう[GitHub]。Editionを含んだ全体だったので驚きました。Macが登場しました。これも一部の方、特にWindowsやMicrosoft製品を普段あまり使われない方に、割と大きなインパクトを与えていたように思います。system!"になったことの意義についてはちょっと語りつくすには時間が足り無さそうですが、敢えて現実ベースの話を先にすると、一般ユーザー(PowerShellをシステム管理に用いている管理者)にとって、すぐに世界が変化するかというとそうではないんじゃないかという気がしています。いうのも、現在のところOSS版のPowerShellのバージョンは「6.0」とされているものの、まだα版の段階で、基本機能はほぼほぼ5.1と変わらないです。OSS版が改良されても、別に今Windowsで使っているPowerShellがすぐに強くなるわけではありません(現在のところ、サイドバイサイドでインストールする)。オープンソース、マルチプラットフォーム展開を始めたといっても、それは現在の所、PowerShell本体とコアモジュールに留まっていて、コマンド数もたかだか数百個程度でしょう(もうちょっとあるかな?)。PowerShellでOS、サーバー、アプリ、インフラを管理するには、専用のコマンドが山ほど必要になってきますが、それらは今まで通り、Windowsの製品にしか含まれないものです。そのような状況で、たとえばLinuxを管理するのには自分でコマンドを作るか、普通にLinuxのコマンドを呼ぶか...あれそれって別に普通のシェルスクリプトでいいんじゃ...とか。Server上のPowerShellに反映され、両者は一本化される、はず、です、たぶん、が、それはまだアナウンスもなく、いつ、どのような形でもたらされるかは不明と云わざるを得ません。この状況はあくまで現時点の状況です。PowerShellで、WindowsもLinuxもMacも一貫したコマンド&スクリプトで管理できる日が来るかもしれませんね。現在のところは、PowerShellの謎挙動に遭遇したとき、ソースを合法的に眺めて思いを馳せることができるようになったのが大きいかと個人的には思います。腕に覚えのある方は、(ルールに従って)どしどしプルリクエストを投げて、PowerShellを自ら育てていただければな、と思います。1.0が登場してちょうど10年ということで、PowerShell10周年イベントがあったりしました。思えば遠くへ来たものですね。PowerShellを取り巻く状況は刻一刻と変化し、去年と今年ではその傾向が顕著です。2016を、どうぞよろしくお願い致します。埋め込み型のプレゼンテーションです。実践」というセッションの資料を公開します。セッション中に行ったデモスクリプトはこちら。Pullサーバーを自動構築する例です。2015の10日目の記事です。はじめに前編では、Invoke-WebRequestコマンドレットやWebClientクラスを用いて、WebページからHTMLの文字列を取得するところまで説明しました。後編の今回は、取得したHTML文字列をパースして、オブジェクトとして利用可能しやすい形に変換する話です。IEエンジンによるHTMLパース(DOM)前編でも触れましたが、Invoke-WebRequestコマンドレットは、レスポンス文字列を取得すると同時に、HTMLをパース(構文解析)し、結果をオブジェクトとして構造化してくれます。Explorerのエンジンを呼び出すことで実現されています。(ちなみに後で説明しますが、-UseBasicParsingパラメータを付与すると、IEエンジンを使わずごく基本的なパースのみ行うようになります。Model)に従ってアクセスすることができます。(-UseBasicParsing指定時は不可)HTMLのtable要素を切り出し、table各行を1オブジェクト、各セルをプロパティとして、オブジェクト配列化する例を以下に示します。Format-Listところで前編で軽く触れましたが、IEエンジンによるパースは、Invoke-WebRequestコマンドレットを用いずとも、以下のようにして直接IEのCOMインターフェースを呼ぶことで利用可能です。以下同様...というより実際に試すと直接IEエンジンを呼び出す方がずっと速いです。理由はよく分かりませんが...。HTML要素コレクションの取得Invoke-WebRequestコマンドレットを用いると、DOMとは別に、すべての要素(AllElementsプロパティ)、input要素(InputFieldsプロパティ)、img要素(Imagesプロパティ)、a要素(Linksプロパティ)、script要素(Scriptsプロパティ)を含むコレクションを、HtmlWebResponseObjectオブジェクトの対応するプロパティからそれぞれ取得することができます。コレクションに含まれる各要素は、innerText(タグ内の文字列)、innerHTML(タグ内のHTML)、tagName(タグ名)等のプロパティが共通して利用可能です。要素の属性(たとえばa要素ならリンク先を示すhref属性)に、プロパティとしてアクセス可能となります。以下はBingでWeb検索した結果から、ページタイトルとURLを抜き出す例です。HtmlWebResponseObjectのLinksプロパティでa要素の配列を取ってきて、次に検索結果では無いっぽいURLを、hrefプロパティの値を見てwhereで除外し、最後にinnerTextプロパティとhrefプロパティをTitle、Urlとリネームしてから値を出力しています。泥臭い処理が混じってますが、この泥臭さがスクレイピングなのかもなぁと思います。Format-Listform要素についてもほぼ同様にFormsプロパティからコレクションを取得できますが、このコレクションにはFormObjectという特別なオブジェクトが含まれます。FormObjectのFieldsプロパティは、Key=パラメータ名、Value=パラメータ値が格納された連想配列となっています。この連想配列は書き替えが可能なので、前編で説明した、ログオンを要するWebサイト等で用いると便利かと思います。以下に、HtmlWebResponseObjectオブジェクトのプロパティをまとめます。×このように、一部のプロパティについては-UseBasicParsing指定時でも利用可能です。サーバーOS等でIEエンジンが利用できない場合には-UseBasicParsingパラメータが必須となりますが、その場合でも最低限のパースはしてくれるわけです。HTML要素のコレクションを利用する方法は、DOMを使う方法に比べると自由度は少ないですが、「ページから画像のリストを取得したい」等の処理は簡便に行うことができます。最後に、Invoke-WebRequestコマンドレットとIEエンジン以外のHTMLパース手法について軽くご紹介します。XMLとしてパース(XHTML限定)XHTMLというのはごくかいつまんで言うと、HTMLをXMLで定義したものです。XHTMLはXMLなので、XMLとしてパースして用いることができます。PowerShellは[xml](XmlDocument)型アクセラレータと型アダプタにより、XML要素への簡便なアクセス手段を提供しています。以下のように、[xml]型アクセラレータを用い、取得したXHTML文字列を[xml]型に変換すると、以降は型アダプタの機能により、ドット演算子で要素を辿っていくことができます。[xml]$content$xml.html.body.h2.'#text'ただ世の中のWebページ上のXHTML文書が、すべてXML文書としてvalidなものであるかと言われると、現実はかなり厳しいです。XML文書としてエラーがある場合は、型アクセラレータの処理は容赦なく失敗します。この手法は「使えたら強いが、大抵使えない」レベルのものと思って頂ければいいと思います。SgmlReader標準機能にこだわらなければ、.NET製のHTMLパーサーを使うのが楽かと思います。SgmlReaderは通常のHTML文書(当然、XHTMLに限らず)をXmlDocumentへとパースしてくれるので、PowerShellと相性が良いのではないかと思います。以下にサンプルを載せておきます。{$_.p.innerText}ぎたぱそ氏も以前SgmlReaderを取り上げておられるので、そちらも参考にして下さい。tech.guitarrapc.cóm正規表現等で自前パースこれまではHTMLパースを既存のコマンドやライブラリを用いて行ってきましたが、対象のHTMLが非常にシンプルである場合とか、HTMLですらなく単なるテキストの場合だとか、対象ページは分量が多いものの必要箇所はごくわずかで、かつピンポイントに取得可能な場合等々は、むしろ自前でパースするコードを書いた方が手っ取り早いこともあります。$Matches[1]}のようなコードで十分かと思います。Parsingの実装であるConvertFrom-Stringコマンドレットを用いて、HTMLパースができないかな、と考えています。Weblogまとめ前後編に渡って、PowerShellでのWebスクレイピングの手法について解説しました。APIが用意されていない場合の苦肉の策ですが、背に腹は代えられない場合というのは稀によくあると思います。いうときに今回の記事が参考になれば幸いです。APIがちゃんと用意されてる場合に、PowerShellから利用する話をやろうかと思います。2015の4日目の記事です。はじめに今回はPowerShellでWebページのスクレイピングをする際の、ちょっとしたノウハウ集を前後編に分けて紹介したいと思います。スクレイピングというのは、Webページから文字列を取ってきて、スクリプトから利用可能な形に加工する処理です。APIが公開されていて、スクレイピングをせずとも比較的簡単にデータを取得できます。PowerShellだとInvoke-RestMethodコマンドレット等が使えます(その話はまた次回とかにやります)。現実には、APIが公開されていない等の理由で、HTMLを取ってきて自前で解釈せざるを得ないケースが多々あります。PowerShellではどうやりましょうか、というのが今回の話。様々な方々によってもう色々と語られている分野ではあるのですが、結構細かいハマりどころがあるのでちょっとまとめてみようと思いました。前編ではまず、Webページからの文字列の取得方法ついてまとめます。スクレイピングには技術的な問題以外の、微妙な問題(著作権の問題とか、Webサイトへの攻撃と見なされる可能性とか)を含むものなので、その辺りは各自どうかご留意ください。この辺りの話はPowerShellに限った問題ではないので、ここでは詳説いたしません。QiitaInvoke-WebRequestコマンドレットで文字列を取得するPowerShellでのスクレイピング、基本は何はなくともInvoke-WebRequestコマンドレットです。3.0で追加されたものなので、2.0環境にはないことに注意です。その場合は.NETのWebClientクラス等を使う方法があり、後で述べます。"http://winscript.jp/"のように、Invoke-WebRequestコマンドレットを実行する、だけです。「-Uri」は省略可能です。このとき$responseにはHtmlWebResponseObjectオブジェクトが格納されています。このうち、指定URLのWebページに含まれているHTMLなどの文字列データは、Contentプロパティに格納されます。欲しいデータが格納されているので、あとはそれをよしなに利用すればいいわけです。実はInvoke-WebRequestは、文字列データを取得すると同時に、HTMLの場合はパースしてタグの構造をオブジェクト化までしてくれます。Invoke-WebRequestコマンドレットでは文字列を取得する他、バイナリデータをダウンロードしてファイルとして保存する機能もあります。それについては過去記事をご参照ください。ようにQueryStringを含んだURLをそのまま指定するだけでOKです。動的にクエリを組み立てる場合は、URIエンコード(URIエスケープ)を考慮する必要があります。"https://www.google.co.jp/search?q=$([Uri]::EscapeDataString($searchWord))"のように、Uri.EscapeDataStringメソッドを使う方法かと思います。リクエストにパラメータを付与する(POST)POSTメソッドでリクエストボディにパラメータを付与するには、Invoke-WebRequestコマンドレットの-Methodパラメータに"Post"を指定し、-Bodyパラメータにリクエストボディに付与するデータを連想配列で指定します。ブログのトラックバックを手動で撃つにはこんな感じでいけます。$bodyなお、リクエストボディに含めるパラメータの各値(連想配列の値)は、自動でURIエンコードしてくれます。(12/16追記)また、-Bodyには連想配列のみならず、任意の文字列(URIエンコード要)やバイト配列(バイナリを送信する場合)を指定することも可能です。標準認証が必要なページを取得するページの取得に標準認証が必要な場合は、-Credentialパラメータにユーザー名とパスワードを指定したPSCredentialオブジェクトを指定すればOKです。セキュリティのことは取りあえず置いておき、簡易的にスクリプトに生パスワードを直書きしてもいいかな、という場合には以下のように書くことができます。$credentialしかしこの方法はもちろんお勧めできないので、スクリプトとして保存する場合は通常はパスワードを暗号化しておきます。cred.xmlを、スクリプトを実行するコンピュータ上で、スクリプトを実行するアカウントと同じアカウントで実行します。パスワードを入力するダイアログが出るので、Webサイトにログオンする際のパスワードを入力します。すると、ユーザー名と暗号化されたパスワードがcred.xmlに出力されます。$credentialのようにすると、cred.xmlからユーザー名と復号したパスワードを、そのまま-Credentialパラメータに渡すことが可能です。API(DPAPI)を用いてWindowsアカウントのパスワードをキーに利用して暗号化されているので、他のユーザーが復号することはできません。ちなみに同一スクリプトファイルに暗号化パスワードを含めておくこともできなくはないです。あと本当は資格情報マネージャーを使うのがいいんですが、...略。tech.guitarrapc.comセッション情報を引き継ぐ多くのWebアプリケーションは、同一クライアントからの連続したアクセスを、セッションという単位で管理します。サーバーはクライアント(普通はWebブラウザ)の初回アクセス時にセッションIDを含むcookieを返し、クライアントからの2回目のアクセス時に、サーバーはcookieにセッションIDが含まれているかどうかを確認し、同一クライアントからのアクセスかどうかを判断するわけです。(ざっくりした説明ですが)WebブラウザではなくInvoke-WebRequestを使ったアクセスでも同様に、以下のようにすれば受けとったcookie等のセッション情報を次回アクセスに引き継ぐことができます。$sv初回アクセス時に-SessionVariableパラメータに指定した変数名(sv)の変数($sv)にはWebRequestSessionオブジェクトが格納されます。この中に、サーバーから受け取ったcookie等の情報が格納されています。次回アクセス時には、-WebSessionパラメータに、初回アクセス時に得られたWebRequestSessionオブジェクト($sv)を指定します。実際のWebアプリケーションではcookie以外にも、Formのhiddenフィールドの値などもセッション管理に用いていることがあります。type="hidden"なフィールドを抽出し、次回アクセスのリクエストボディに含ませる必要が出てきます。この辺りの話は後編で述べるパースが必須になってくる(し、長くなる)ので今回は詳説しません。Invoke-WebRequestコマンドレットのリファレンスのExample2に、Facebookにログオンする例なんてのがあるので、そちらで雰囲気をつかんでください。(今でも動作するかは確認してないですが)エラートラップさて、Invoke-WebRequestは、タイムアウトになった、名前解決ができなかった、ページが無かった(404エラー)等々、正常にWebページを取得できなかった場合は、System.Net.WebExceptionというエラーを出します。コマンドレットの出すエラー(Errorストリームに出力されるErrorRecord)は、try...catchステートメントでは捕捉できない、というのが原則ですが、Invoke-WebRequestコマンドレットのエラーは一般的なコマンドレットと異なり、普通の.NETの例外(System.Net.WebException)なので、try...catchステートメントでエラートラップを行います。言え、Invoke-WebRequestコマンドレットの仕様上、エラートラップをして適切な処理を行うのは非常にめんどいです。いうと、Invoke-WebRequestがエラーを出した時点で、HtmlWebResponseObjectオブジェクトの出力は行われないので、このオブジェクトから得られる様々な情報(レスポンス文字列、ステータスコード等々)が取得できないからです。すればいいのかという話なんですけど、どうもWebExceptionオブジェクトのResponseプロパティを見るしかないようです。具体的にはこんな感じ。$reader.ReadToEnd()}せっかくInvoke-WebRequestコマンドレットは、生のレスポンスを利用しやすくHtmlWebResponseObjectという形で返してくれるのに、エラー発生時はその恩恵を受けることができず、泥臭い処理が必要になります。これはかなりいけてないですし、どうせここまで書かないといけないのであれば最初からWebClientクラスを使った方がいいと思います。httpsで無効な証明書が使われている場合(12/16追記)Invoke-WebRequestコマンドレット(およびWebClient)では、httpsで始まるURLからもダウンロード可能ですが、サイトで用いられている証明書に問題がある場合(期限が切れている、暗号化形式に問題がある、いわゆるオレオレ証明書である等)には、「要求は中止されました。SSL/TLSセキュリティで保護されているチャネルを作成できませんでした」というエラーが出てしまいます。{$true}という1文を記述しておきます。証明書に問題があるということは、その通信相手が正当かどうか、通信内容が正しく秘匿されているかどうか、保証がされなくなるということですから、その点は念頭においてください。文字化けの問題Invoke-WebRequestコマンドレットのもう一つの悩ましい問題、それは文字コードです。実はInvoke-WebRequestコマンドレットには、Webページの文字コードを指定する方法がありません。(多分)ではレスポンス文字列の文字コードがどのように決まるかというと、サーバーが返すレスポンスヘッダのContent-Typeフィールドで指定されているcharsetです。charset=UTF-8"であれば、$response.Contentの文字コードはUTF-8になります。このときページ(HTML)を記述している文字コードと、レスポンスヘッダで指定されている文字コードが一致すれば全く問題はないのですが、異なる場合は容赦なく文字化けします。異なる場合だけでなく、レスポンスヘッダのContent-Typeフィールドに文字コードの指定がない場合はASCIIと見なされるので、日本語のページの場合はやはり文字化けします。この問題を回避する方法は、私はまだ見つけていません。よって文字化けが起きる場合は、諦めてWebClientを使って文字コードを指定するようにしています...。WebClientを用いる以上で述べてきたとおり、Invoke-WebRequestコマンドレットは、ページをさくっと取得して、さくっとパースするのには重宝するのですが、細かい所で融通が利かない印象があります。2.0環境)は、素直にWebClientクラスを用いるのがいいと思います。今回WebClientの使い方も入れようかと思いましたが、長くなったので詳しくは省略します。基本は以下のような感じでDownloadStringメソッドを使って文字列を取得します。文字コードも指定できます。$client.DownloadString("http://アドレス")なお、WebClientを用いた場合でも、Invoke-WebRequestと同等のHTMLパースを行う方法は存在するので、それは次回に。おわりに今回はまず、Webページから文字列データを取得する部分にフォーカスしてみました。いっても、Invoke-WebRequestの機能を全部網羅したわけではなく、使用頻度が高そうなものと個人的ハマリポイントがあるところだけです。詳しくはリファレンスを見て下さい。いうかハマリポイントたぶんまだまだ一杯あると思います。後編では、とってきた文字列データを「パース」して、扱いやすいデータ形式に変換する方法についてまとめようかと思います。2015の1日目です。アドベントカレンダーは今年で5回目ですが、例年よりだいぶ参加者が少ないので、敢えて完走を目指さずまったりいきましょう。いえ今年から来年にかけては、PowerShellの変革の年といっても過言ではないかと思います。Preview)が登場しました。(私の書いたPS5.0新機能のセッション資料はこちら。DSC周りが格段にパワーアップしています。Azure等のクラウド、オンプレミスのサーバーはともに大きな恩恵を受けることが期待されます。Extensionも追従する形で凄まじい勢いでバージョンアップしてますね。5.0の登場に合わせて、各種のPowerShell関係のモジュールやアプリケーションが新登場していますが、これらはいずれもOSS(オープンソースソフトウェア)となりました。Extensionあたりもトピックとして熱いですね。Studioが標準搭載されたことも記憶に新しいですね。10に標準機能として取り込まれるなど、OSSとの関係性については大きく変化したと言えるでしょう。2016の足音も聞こえてきました。現在はTP4が公開されており、試すことができます。Serverでしょう。Containersです。Serverの管理は当然、PowerShellがメインとなります。Windowsにやってくる、SSHクライアントとサーバーはPowerShell上で動くようです。PowerShellは5.0に進化することで、足回りを強化しました。各種OSSと連携して、クラウドとオンプレミスのサーバー群の基礎を支える存在として、ますます重要性を帯びていくことでしょう。昨今のPowerShellを取り巻く状況は、私の理解ではざっとこんな感じです。新機能以外にも、まだまだ知られていない機能や利用法も埋もれていると思います。2015で共有していただければ嬉しいなあと思います。いうわけで、例年にない感じの初日記事を書いてみました。今回のアドベントカレンダーもどうぞよろしくおねがいします。|Tweetオープンセミナー2015@広島で行った私のセッションのスライドを公開します。埋め込み型のプレゼンテーションです。今回のイベントではWindowsサーバーにかかわっている方が少ない感じでしたが、PowerShellとDSCを核とした、最近のMicrosoftやWindowsのインフラ周りってどうなん?という話が伝えられていたなら幸いです。Linux等、Microsoftが関わるオープンソースのプロダクトも増えてきました。Azure上で顕著な動きですが、Chef、Docker等の既存のOSSの積極的な採用も進んでいます。このような状況ですので、かつてはMicrosoft系コミュニティとオープンソース系コミュニティでは何となく交流が薄かったと思うんですが、今後はより一層、両者の交流が盛んになっていくんじゃないかなあと個人的には思っています。Campにはたくさんの方にお越しいただき、まことにありがとうございました。私の行った「PowerShellスクリプトを書いてラクしよう」のセッション資料を公開します。埋め込み型のプレゼンテーションです。セッション中、デモで用いたサンプルスクリプトも公開します。今回は私の前にJPPOSH大阪代表のwakaさんのPowerShellセッションがあり、そちらでサーバー管理の本筋の話をしていただいたので、私の方はクライアント側の話でまとめてみました。どちらかというと遊びに近いネタも多かったと思いますが、PowerShellの基本的なスクリプトを書くための文法等の知識を身に着ける題材として、参考にしていただければ幸いです。|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関係で何かセッションをしようと思っています。(JPPOSH)の第一回PowerShell勉強会が開催されましたが、来たる4/12(土)13:30より、大阪でも「PowerShell勉強会@大阪」が開催されます!場所は阿倍野市民学習センターで、阿倍野駅/天王寺駅/阿部野橋駅が最寄りとなります(あべのハルカスの近くですね)。参加費として500円を集めさせていただきますので予めご了承ください。セッション内容は以下のとおりです。牟田口バージョン1登場から8年目を迎えたPowerShellの現状をまとめ、2014年版のPowerShell入門セッションという形で行なおうと思います。これからPowerShellを扱われる方はもちろん、これまで利用されていた方にも2014年現在のPowerShellの立ち位置の再確認、最新バージョンの4.0新機能等、参考になる内容としたいと思っています。7、8、8.1にも標準搭載され、最初から使えるスクリプト環境としての側面もあります。今回の勉強会主催者でもあるwakaさんに、クライアントサイドでPowerShellを活用するセッションをしていただける予定です。Directoryですよね。Azureというクラウド環境の重要性も増す一方です。Serverにおいてはオンプレもクラウドも、管理にはPowerShellが不可欠です。Server/Azureの管理方法についてセッションしていただける予定です。ぎたぱそさん東京の謎社で日夜PowerShellを用いた運用業務に携わり、Twitterやブログで積極的にPowerShell情報を共有されておられるぎたぱそさんが来阪して、PowerShellによるデプロイについてのセッションをしてくださいます。4.0で登場したDSCについても実際の業務での使いどころ等を語っていただけるのではないかと思います。@mutaguchiBooks書籍版。