Bar

Import-PSSession を使ってWSE専用PSコマンドレットを操ってみよう

先日別サイトに投稿した記事「Office 365 Exchange Onlineのメールボックス表記を英語から日本語に変更したい」を書いた時に初めて知ったPowerShell Import-PSSession コマンドレットが非常に便利でした。
なぜって、ローカルにないPowerShell コマンドレットをリモート先から一時的にインポートし、ローカルでスクリプトを実行=サーバー上で実行されるからです。
今回は、Windows Server Essentialsの専用コマンドレットを題材にImport-PSSession の良さをご紹介します。

今まではEnter-PSSessionかInvoke-Commandを多用

PowerShell を覚え始めてからリモート先の処理を行う場合は
  • Enter-PSSession 
  • New-PSSession+Invoke-Command
  • RDP接続
の3種類をよく使っていました。

Windows Server Essentials専用コマンドレットの一つ Get-WssUserを実行したい場合はEnter-PSSession を実行しWindows Server Essentialsにリモート接続します。

インテリセンスが使えないのが痛い

クライアントPC上にある一連の処理を書いたPowerShell スクリプト ファイルをリモート先で実行する場合は
Invoke-Command -Session $s -FilePath "C:\temp\Get-WssUser.ps1"
をよく使いますが、リモート先にしかないPowerShell コマンドレットやパラメータを書こうとするとインテリセンスが使えないためコーディング速度が低下する事がしばしば・・・

Import-PSSession 、便利!

Import-PSSession コマンドレットは以下に示す動作をします。
  • PSセッションを張っている間
  • 指定したモジュール又はコマンドレットをリモートからローカルへ一時的にインポート
  • リモート先のコマンドレット名をローカル上で呼び出せ
  • サーバー上で実行
ローカル上にコマンドレットがなくても使える点は非常に魅力的です。
それだけでなく、コマンドレットやパラメータなどインテリセンスが使えるためコーディング速度が上がります。都度ヘルプを見る必要性がなくなりますから。
使ってみて分かりましたが、この差はかなり大きいです。

WSE専用コマンドレットを使ってみる

Windows Server 2012 R2 EssentialsなどWindows Server Essentials専用コマンドレットの一つ Get-WssUser ※をローカル上で呼び出し、実行結果を出力してみます。
※Get-WssUser は登録されているユーザー情報を出力するコマンドレッです

手順は以下の通り。
  1. 資格情報をセット(Get-Credential)
  2. PSセッションを使ってサーバーに接続(New-PSSession)
  3. サーバー上のWssCmdlets モジュールをインポート(Import-PSSession)
  4. Get-WssUserを呼び出し実行


次は、ユーザーを登録してみます。
PSセッションがOpenedになっている状況下で下記スクリプトを実行してみました。
  1. Import-Excel モジュールをPS Gallaryからダウンロード&インポート
  2. Excel シートに登録したいユーザー情報を入力
  3. Add-WssUser コマンドレットを登録したい人数分実行する
リモート上で登録する作業と全く同じようにユーザー登録が出来ました。
WSE ユーザー登録するサンプル
$path = "C:\temp"
$xlsx = "$path\WseConfigration.xlsm"

Import-Excel -FullName $xlsx -Sheet "WSE-USER" | Foreach-Object{

    if($_.FirstName -ne $null)
    {
        [string]$first = $_.FirstName
        [string]$last = $_.LastName
        [string]$userName = $_.UserName
        [string]$groupName = $_.Group

        try
        {
            $pwd = $_.Password | ConvertTo-SecureString -AsPlainText -Force

            Add-WssUser -FirstName $first -LastName $last `
                -Name $userName -Password $pwd `
                -GroupName $groupName | Out-Null
            
            Write-Host "ユーザー[$userName]を追加しました" -ForegroundColor Cyan
        }
        catch [exception]
        {
            Write-Host "ユーザー[$userName]の追加に失敗しました" -ForegroundColor yellow
            Write-Host $Error -ForegroundColor red
        }
    }
}

本当に一時的なのか?

試しにセッションを切る前後に同一コマンドレットを呼び出してみると、セッション切断後は予想通りエラーになりました。セッション中にだけ使えるわけですね。

クラウド・オンプレともに使えるImport-PSSession 

Exchange OnlineやSharePoint Onlineだけでなく、オンプレミスの機能に特化したPowerShell コマンドレットを一時的にインポートし操作ができるImport-PSSession 。
以前からよく聞くハイブリッド化する上で利用頻度が一気に上がる予感がするPowerShell コマンドレットでした。
是非みなさんも触ってみてはどうでしょうか。
PowerShellのポケットリファレンスがあると便利ですよ
長年使い続けているPowerShell のポケットリファレンスにもImport-PSSession が説明されています。一冊あると便利ですよ。
【改訂新版】 Windows PowerShell ポケットリファレンス
Posted at 2016.7.2
牟田口 大介
技術評論社
販売価格 ¥3,002
(2016年7月2日22時40分時点の価格)
売上げランキング: 13089