最新情報: Azure Automation で PowerShell v5 をサポート

このポストは、2 月 1 日に投稿された Announcing PowerShell v5 support in Azure Automation の翻訳です。

既にご存知の方もいらっしゃると思いますが、このたび多くの新機能 (英語) が追加された PowerShell バージョン 5 がリリースされました。中でも便利なのが以下の機能です。

  • PowerShell クラス
  • パフォーマンスが向上した PowerShell ワークフロー
  • PowerShell モジュールのサイドバイサイドのバージョン管理
  • 新しいコマンドレット (Convert-String など)
  • 機能強化された PowerShell DSC (PSRunAsCredential など)

また、Azure Automation の Runbook や DSC 構成で、これらの PowerShell v5 の優れた機能を活用できるようになりました。

Azure Automation で PowerShell v5 の機能を使用し始めるのにユーザーが行わなければならない作業はありませんが、ハイブリッドの Runbook 用 Worker ロールを使用していて、そこで実行する Runbook で PowerShell v5 の機能を利用したい場合は、そのハイブリッド Worker ロールのマシンに WMF5 をインストールする必要があります。

それでは、PowerShell v5 の新機能を Azure Automation で使用する方法をいくつか見ていきましょう。

PowerShell クラス

PowerShell クラス (英語) を使用すると、PowerShell でオブジェクト指向のプログラミングを行うことができます。新しいオブジェクト タイプを簡単に定義し、そのオブジェクトのインスタンスを作成して、そのインスタンスでメソッドを呼び出すことができます。

この PowerShell クラスが Azure Automation でも PowerShell v5 とまったく同じように使用できるようになりました。サンプルとして、次のネイティブ PowerShell Runbook をご覧ください。

 class Coffee {
    # プロパティ: 現在のコーヒーのサイズを保持
    [Uint32] $Size;
    
    # プロパティ: コーヒーの持ち主の名前を保持
    [String] $Owner;

    # コンストラクター: 指定されたサイズと持ち主で新しい Coffee オブジェクトを作成
    Coffee([UInt32] $NewSize, [String] $NewOwner) {
        # コーヒーのサイズを設定
        $this.Size = $NewSize;
        
        # コーヒーの名前を設定
        $this.Owner = $NewOwner;
    }

    # メソッド: 指定された量のコーヒーを飲む
    # パラメーター: $Amount = 飲むコーヒーの量
    [void] Drink([UInt32] $Amount) {
        $this.Size = $this.Size - $Amount;
    }
}

# サイズを 16 オンス、持ち主を "Joe" として新しい Coffee オブジェクトを作成
$MyCoffee = New-Object Coffee -ArgumentList 16, "Joe"

# 10 オンス飲む
$MyCoffee.Drink(10)

# オブジェクトを出力
$MyCoffee 

Azure Automation でこの Runbook をテストすると、次のように返されます。

PowerShell クラスは PowerShell ワークフローを使用した Runbook でも使用できますが、これは InlineScript ブロック内でのみ可能です。

PowerShell モジュールのサイドバイサイドのバージョン管理

このサイドバイサイドのバージョン管理機能により、PowerShell 内で同一モジュールの複数のバージョンを使用できるようになりました。この機能は、PowerShell モジュールの特定のバージョンで動作するテスト済みの古いスクリプトを使用しながら、別のスクリプトで同一モジュールの新しいバージョンも使用したい場合に便利です。

複数のバージョンで構成された PowerShell モジュールは簡単に作成できます。通常の手順でモジュール フォルダーを作成した後、そのフォルダー内に使用したい各バージョン用のフォルダーを作成するだけです。下の図は、私が作成した TestModule 用のフォルダーです。ご覧のとおり、1.0.0 と 2.0.0 の 2 つのバージョンがあります。

各フォルダーの中には、モジュールを構成する通常の PowerShell PSM1、PSD1、DLL ファイルを格納します。私が作成したモジュールのバージョン 1.0.0 は次のようになっています。

もちろん、Azure Automation でこのモジュールを使用する場合は、インポートできるように圧縮する必要があります。Azure Automation での PowerShell モジュール使用の詳細については、こちらの記事 (英語) をご覧ください。

モジュールを圧縮しインポートすると、他のモジュールと同じように Azure Automation に表示されます。

1: Azure Automation では最新の (番号が最も大きい) バージョンのモジュールのみが表示されますが、モジュール パッケージに複数のバージョンが含まれている場合はすべて Runbook で使用可能です。ただし現在のところ、UI 上では、パッケージに含まれる古いバージョンのモジュールは表示されません。

2: サポートされるのは、1 つのパッケージに複数のバージョンが含まれているモジュールであり、別々にインポートした複数のパッケージにそれぞれ含まれる複数のバージョンのモジュールがサポートされることはありません。

たとえば、バージョン 1 と 2 を含むモジュール A を Azure Automation にインポートしたとします。その後さらに、バージョン 3 と 4 を含むモジュール A をインポートした場合、バージョン 3 と 4 のみ DSC 構成の Runbook で使用することができます。つまり、バージョン 1、2、3、4 のすべてを使用するには、インポートする 1 つのパッケージにすべてのバージョンを含める必要があります。

複数のバージョンを含めたモジュールをインポートすると、次のように特定のバージョンを読み込むことができます。

PowerShell スクリプト Runbook:

Import-Module –Name <モジュール名> -RequiredVersion <バージョン>

PowerShell ワークフロー Runbook (InlineScript ブロック内)

Import-Module –Name <モジュール名> -RequiredVersion <バージョン>

DSC 構成:

  • DSC リソースを使用する場合

Import-DscResource -ModuleName <モジュール名> -ModuleVersion <バージョン>

  • モジュールを使用する場合

Import-Module –Name <モジュール名> -RequiredVersion <バージョン>

UI での表示と同様、既定ではモジュールの最新バージョンが実行時に使用されます。例として、モジュール自身のバージョンを出力する Get-MyVersion というコマンドレットを含むモジュール TestModule を使ってご説明しましょう。Runbook で次のように実行します。

Get-MyVersion

すると、次のように返されます。

次のように、Runbook でモジュールのバージョン 1.0.0 を明示的に読み込んでみます。

Import-Module –Name TestModule -RequiredVersion 1.0.0

Get-MyVersion

今度は次のように返されます。

別の Runbook で同一モジュールの異なるバージョンを使用する場合は、Import-Module を使用して必ず目的のバージョンを宣言する必要があるのでご注意ください。目的のバージョンが最新のものであっても、必ずその必要があります。これは、それぞれの Runbook のジョブが同じサンドボックスで実行される可能性があるためです。サンドボックスで前回のジョブによって既に明示的に特定のバージョン番号のモジュールが読み込まれている場合、そのサンドボックスで実行される後続のジョブでは、自動的に最新バージョンのモジュールが読み込まれることはありません (いずれかのバージョンが既に読み込まれているため)。

まとめ

このように、PowerShell v5 には多くの便利な機能があります。そしてそれらを Azure Automation で活用できるようになりました!

Azure Automation を初めてご利用になる方は、こちらからサービスの詳細をご確認ください。また、Twitter では Azure Automation の最新情報や優れた機能を発信しています。ぜひフォローしてください。