2016/04/23

Japan PowerShell User Group (JPPOSH) 主催の第 6 回 PowerShell 勉強会(4/9)には多数の方にお越しいただき、ありがとうございました。

PowerShell勉強会は今後も年2回くらいのペースで続けて行きたいと思っていますので、どうぞよろしくお願い致します。

さて、私のセッション「PowerShell 5.0 新機能と関連OSSのご紹介」のスライドを公開します。前半は以前のものとだいたい同じですが、正式版対応版にアップデートしています。

今回は去年から今年にかけて、PowerShell関連ソフトウェアとしてOSS化したものを、まとめて紹介しました。以下は今回紹介したもののリストです。

またデモで用いたサンプルファイルも公開します。

このzipにも同梱してますが、PSScriptAnalyzerのカスタムルールはこんな感じで作ります。作り方は、ASTを受け取って、中身をチェックして、ルールに該当するならDiagnosticRecordを返すというのが基本になります。

using namespace Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic
using namespace System.Management.Automation.Language

Import-Module PSScriptAnalyzer

function Test-UsingVarsWithNonAsciiCharacter
{
    # 変数に半角英数字以外の文字種が含まれていると警告するカスタムルール。
    [CmdletBinding()]
    [OutputType([DiagnosticRecord[]])]
    Param
    (
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [ScriptBlockAst]
        $ScriptBlockAst
    )

    Process
    {
        [Ast[]]$variableAsts = $ScriptBlockAst.FindAll({
            param([Ast]$ast)
            $ast -is [VariableExpressionAst]
        }, $true)

        $variableAsts | 
        where {
            $_.VariablePath.UserPath -notmatch '^[a-zA-z0-9_]+$'
        }|
        foreach {
            $result = [DiagnosticRecord[]]@{
                "Message"  = "変数 `$$($_.VariablePath.UserPath) に半角英数字以外の文字種が使われています。"
                "Extent"   = $_.Extent
                "RuleName" = "AvoidUsingVarsWithNonAsciiCharacter"
                "Severity" = "Warning"
            }
            $result
        }
    }
}
Export-ModuleMember Test-UsingVarsWithNonAsciiCharacter

ついでにPesterのサンプルコードも。2つのパラメータを足し算する関数、Invoke-Additionに対するテストコードの例となります。

$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.'
. "$here\$sut"

Describe "Invoke-Addition" {   # テストの定義
    Context "足し算の実行" {   # テストのグループ化
        It "整数値を2個指定すると、足し算された結果が返る" {  # テストケース
            Invoke-Addition 3 5 | Should Be 8 # アサーション
        }

        It "小数値を2個指定すると、足し算された結果が返る" {
            Invoke-Addition 3.4 5.8 | Should Be 9.2
        }
    }

    Context "エラーの発生" {
        It "足し算できないものを指定するとエラー" {
            {Invoke-Addition 10 "x"} | Should Throw 
        }
    }
}

2015/03/20

わんくま同盟大阪勉強会#62で行った、「PowerShell 5.0 新機能」セッションスライドを公開します。

WMF 5.0 Preview Feb. 2015時点でのPowerShell 5.0 / WMF 5.0の新機能は大体こんな感じにまとめられるかと思います。

  • Experimental design 
    • OneGet
    • PowerShellGet
    • クラス定義
    • DSC(Desired State Configuration)機能強化
    • デバッグ機能強化
    • スクリプトアナライザー
    • Auto-Generated Example-Driven Parsing
  • Stable design 
    • 監査機能の強化
    • CMS (CRYPTOGRAPHIC MESSAGE SYNTAX) コマンドレット
    • ODataエンドポイントのコマンドレット化
    • シンボリックリンク操作機能
    • zipファイル操作コマンドレット
    • Networkスイッチ管理用コマンドレット

新機能のうち、目玉となりそうなOneGet、クラス構文、DSC機能強化についてはいずれもまだ一部もしくは全部がExperimental designなので、今後もまだ仕様変更が入るものと思われます。(逆に仕様に物申すことができるチャンスは今だけ)

まだ正式版リリース(今年中?)までに新要素が入る可能性はありますが、全体像はそろそろ見えてきたと思います。現時点でも相当に新要素が追加されており、個人的にはv4→v5はv2→v3の時並のインパクトがあるアップグレードですので、今のうちに予習を始めておくのが良いかと思われます。

なお、近々、PowerShell勉強会@大阪(JPPOSH主催)でもPowerShell 5の話をする予定です。基本は同内容ですが、発表時点での最新情報を追加していこうと考えています。詳細が決まりましたらまた告知したいと思います。

2014/09/25

第 4 回 PowerShell 勉強会 - Japan PowerShell User Group (JPPOSH) | Doorkeeper

というわけで、10/11(土)、大阪のマイクロソフト関西支店にて、第4回PowerShell勉強会が開催されます。大阪では2回目ですね。

今回は開発者向けのセッションが中心となっている感じです。

かめがわさんの、Release ManagementとPowerShell DSCを用いたリリース認証フローの実装のお話、おおたさんの開発者視点でのPowerShell活用法のお話、私はコマンド(コマンドレット、高度な関数)の書き方についての話をします。そして今回も東京からぎたぱそさんが参戦して何か話してくれるそうですよ。

今回は、LTも募集してます。我こそは、という方はぜひご登壇を!

それでは皆さま、10/11にはぜひぜひ、PowerShell勉強会にお立ち寄りくださいませ。

2014/04/13

昨日4/12開催の第一回 PowerShell勉強会@大阪には約40名もの方にお越しいただき、盛況のうちに無事終了しました。中には遠方からお越しの方も数名いらっしゃいました。皆様どうもありがとうございました。PowerShell勉強会は大阪でも今後も継続的に実施していければ良いな、と思っております。

さて私のセッションは「PowerShell『再』入門2014」というタイトルで行いましたがいかがでしたでしょうか。以下にセッションスライドを公開します。

PowerShellのこれまで、今、これから、を時系列に紹介してみました。これからPowerShellに触れる方をメインに想定した、ごく基本の話だったので、知っている方には少々退屈だったかもしれないですが、PowerShellの現在の立ち位置を再確認する機会にしていただけたなら幸いに思います。

そしてPowerShellの学習方法として、何から手をつけるべきか、どこで情報を得るといいのか、等の話をしてみました。最近よく、PowerShellってどこからやればいいの?ということを聞かれていたというのが、この項目を入れた動機です。たしかにPowerShellはv4になり機能も色々と増え、全体像を把握するのが大変になってきています。その一方で情報(特に日本語)が不足しているのも事実です。そんな状況のなか、初心者の方はどうやってPowerShellを入門していけばいいのか、という道しるべを示せれば良いな、と思いました。いかがでしたでしょうか。

2014/03/27

去年12月、東京でJapan PowerShell User Group (JPPOSH)第一回PowerShell勉強会が開催されましたが、来たる4/12(土)13:30より、大阪でも「PowerShell勉強会@大阪」が開催されます!

場所は阿倍野市民学習センターで、阿倍野駅/天王寺駅/阿部野橋駅が最寄りとなります(あべのハルカスの近くですね)。なお、参加費として500円を集めさせていただきますので予めご了承ください。

セッション内容は以下のとおりです。

  1. 「PowerShell『再』入門2014」 by 牟田口
    バージョン1登場から8年目を迎えたPowerShellの現状をまとめ、2014年版のPowerShell入門セッションという形で行なおうと思います。これからPowerShellを扱われる方はもちろん、これまで利用されていた方にも2014年現在のPowerShellの立ち位置の再確認、最新バージョンの4.0新機能等、参考になる内容としたいと思っています。
  2. 「PowerShellをクライアントで活用」 by wakaさん
    サーバー管理用シェルとして登場したPowerShellではありますが、クライアントOSであるWindows 7、8、8.1にも標準搭載され、最初から使えるスクリプト環境としての側面もあります。今回の勉強会主催者でもあるwakaさんに、クライアントサイドでPowerShellを活用するセッションをしていただける予定です。
  3. 調整中(Active Directory/Azure系の予定) by ちゅきさん
    Windows Serverの要の機能といえばやはりActive Directoryですよね。そしてWindows Azure改めMicrosoft Azureというクラウド環境の重要性も増す一方です。Windows Serverにおいてはオンプレもクラウドも、管理にはPowerShellが不可欠です。今回、Microsoft MVP for Directory Servicesのちゅきさんに、ADを中心としたPowerShellによるWindows Server/Azureの管理方法についてセッションしていただける予定です。
  4. 「Windows における PowerShell での デプロイ - DSC と リモーティング」by ぎたぱそさん
    東京の謎社で日夜PowerShellを用いた運用業務に携わり、Twitterやブログで積極的にPowerShell情報を共有されておられるぎたぱそさんが来阪して、PowerShellによるデプロイについてのセッションをしてくださいます。PowerShell 4.0で登場したDSCについても実際の業務での使いどころ等を語っていただけるのではないかと思います。

まだまだ残席ございますので、お近くの方でご興味をお持ちの方は、ぜひとも4/12は基本から応用まで内容盛りだくさんのPowerShell勉強会@大阪へお越しくださいませ! 懇親会もありますよ!

2014/03/23

昨日は、MVP Community Camp 2014の大阪会場にお越しいただき、ありがとうございました。

私のセッションスライドを公開します。

前回のエントリーでも書きましたが、DSCについては何度かセッションをやってきており、今回が一応の集大成的なものとなるかと思います。

今回はDSCというPowerShell4.0で追加された応用的な内容でしたが、4/12に開催されるPowerShell勉強会@大阪では基礎的なところからセッションをやる予定です。PowerShell勉強会@大阪については後ほど詳しく紹介エントリーを上げます。

さて、今回デモをやろうとしたんですが、見事に失敗してしまいました。大変申し訳ありません!

原因としてはHyper-Vにドメインコントローラー(兼、Configuration配布用サーバー)と設定対象サーバーの2台を同一ドメインに所属させていたのですが、手違いで設定対象サーバーからDCへの認証ができなくなっていて、結果、DSC反映時に必要なKerberos認証に失敗したためでした。やはりDCを仮想化させるのはいくらHyper-V 3.0でも注意深くやらないとダメですね。直前まではうまく動いてたんですけどもね…DCはやはり独立して用意すべきでした

本番ではデモに失敗したんですが、環境を再整備して動作することを確認しました。そこで、今回、デモで用いる予定だったスクリプトを一式、公開する事にしました。こちら:dsc_demo.zip

使用方法を以下に説明します。なお、すべては無保証なので、必ず、壊れてもいいサーバーを新規で用意してください。また、デモ環境をHyper-Vの仮想サーバーとしておくと、DSC適用前の状態のスナップショットを取れるのでいつでもデモ実行前の状態に戻せて便利です。

事前準備
  1. Configuration配布用サーバー(コンピューター名:dscpull)、設定対象サーバー(コンピューター名:target)を用意し、双方にWindows Server 2012 R2をGUI有効にしてインストールする。
  2. Windows Server 2012 R2がRTM版である場合は、General Availability Update Rollupを適用してGA相当にアップデートする(ビルド番号6.3.9600.16394の状態にする)。
  3. 両サーバーを同一ドメインに所属させる。
  4. 両サーバー間でKerberos認証が通りWinRMでリモート接続できることを確認しておく。
    たとえば、dscpullサーバーからEnter-PSSession targetとしてtargetサーバーにリモート接続できるかどうかで確認できます。
  5. dsc_demo.zip中に含まれるdscpullフォルダをConfiguration配布用サーバーのC:\直下にコピーする。
  6. dsc_demo.zip中に含まれるtargetフォルダを設定対象サーバーのC:\直下にコピーする。
Pushモードのデモ

このデモでは、dscpullサーバーでDSCをpushモードで実行することにより、「targetサーバーにIISをインストールし、Webサイトを作成し、開始する」という操作を適用します。よって、事前にtargetサーバーにはIISが入っていないことを確認しておいてください。

  1. targetサーバーのInstall_Website_Resource.ps1を実行する。
    この操作により、xWebAdministrationリソースモジュールがtargetサーバーに配置されます。
  2. dscpullサーバーのStart_Website_of_Target.ps1を実行する。
    この操作により、xWebAdministrationリソースモジュールがdscpullサーバーにも配置され、xWebSite等のリソースを呼び出すConfigurationに従ってMOFファイルを生成し、Start-DscConfigurationコマンドレットによって実際にMOFファイルの内容をtargetサーバーに反映させます。
    ※Pushモードの場合、カスタムリソースを利用する際は、実行側と対象の双方にカスタムリソースの事前配置が必要です。
  3. Start_Website_of_Target.ps1の実行が終了したら、targetサーバーをチェックして下さい。IISがインストールされ、IISマネージャ上ではDefault Web Siteは停止状態となり、MyWebSiteというサイトが作成され開始されていると思います。http://target/を開いてみてください。
  4. targetサーバーの設定を色々と変更して(Webサイトを停止する、削除する、IISをアンインストールする、InetPubフォルダのコンテンツを削除するetc)、再度Start_Website_of_Target.ps1を実行した場合でも、同じ設定に戻ることを確認してください。
Pullモードのデモ

このデモではまずdscpullサーバーにDSC Serviceをインストールし、PullサーバーとしてMOFファイルを配布できるようにします。続いてtargetサーバーの設定をPullモードにし、dscpullサーバーから設定を定期的に取得、反映させるようにします。(このデモでは「印刷サービス」(プリントサーバー)をインストールするConfigurationをサンプルとして利用しています)

  1. dscpullサーバーのInstall_DSC_Service.ps1を実行する。
    この操作により、xPSDesiredStateConfigurationリソースモジュールがdscpullサーバーに配置され、このモジュールに含まれるxDscWebServiceリソースを呼び出すConfiguration(Sample_xDscWebService)を実行し、Pullサーバーが構築されます。
  2. dscpullサーバーのDeploy_Config.ps1を実行する。
    この操作により、プリントサーバーをインストールするConfigurationからMOFファイル(ファイル名は対象サーバー名ではなく、対象サーバーを識別するConfigurationIDとなる)を生成し、New-DscCheckSumコマンドレットによりチェックサムファイルを出力し、両ファイルをPullサーバーのMOFファイル配布用フォルダにコピーすることで、設定の配置が完了します。
  3. targetサーバーのConfig_LCMforPull.ps1を実行する。
    この操作により、LCM(Local Configuration Manager)設定用のConfigurationからMOFファイルを生成し、Set-DscLocalConfigurationManagerによりMOFファイルを反映し、targetサーバーのLCMがPushモードからPullモードに変更されます。また対象サーバーを識別するためのConfigurationIDも定義します。このスクリプトを実行すると処理の最後で自動的に再起動を実行します。(DSCのモード切替は再起動後に反映されます)
  4. 再起動後、targetサーバーに印刷サービスがインストールされていることを確認してください。上手くいかない場合は、イベントビューアで”Desired State Configuration”を確認してください。またLCMのConfigurationに指定した間隔で設定が再反映されていること、あるいは新設定をPullサーバーに取得しにいっていることを確認してください。


Copyright © 2005-2018 Daisuke Mutaguchi All rights reserved
mailto: mutaguchi at roy.hi-ho.ne.jp
プライバシーポリシー

Twitter

Books