なぜって、ローカルにない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 は登録されているユーザー情報を出力するコマンドレッです
手順は以下の通り。
※Get-WssUser は登録されているユーザー情報を出力するコマンドレッです
手順は以下の通り。
- 資格情報をセット(Get-Credential)
- PSセッションを使ってサーバーに接続(New-PSSession)
- サーバー上のWssCmdlets モジュールをインポート(Import-PSSession)
- Get-WssUserを呼び出し実行
次は、ユーザーを登録してみます。
PSセッションがOpenedになっている状況下で下記スクリプトを実行してみました。
- Import-Excel モジュールをPS Gallaryからダウンロード&インポート
- Excel シートに登録したいユーザー情報を入力
- 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 コマンドレットでした。
是非みなさんも触ってみてはどうでしょうか。