Windows Server 2012 R2のPowerShellは、デフォルトでリモート管理を許可していますので、以下のように接続元でリモート接続設定をするだけでPowerShellのリモート操作ができるようになります。
PowerShellのリモート管理許可(管理元の設定)
winrm quickconfig -force Set-Item WSMan:\localhost\Client\TrustedHosts * -Force |
PowerShellのリモート操作は、コマンドレットの「-ComputerName」オプションと、対話操作の「Enter-PSSession」、コマンド投入の「Invoke-Command」の3種類があります。
「-ComputerName」オプションは、コマンドレットが操作対象のコンピューターを受け付けるので、ローカルと変わらない操作性で使うことができるのですが、「-ComputerName」オプションをサポートしていないコマンドレッドではリモート操作ができません。
これに対し、「Enter-PSSession」は対象コンピューター上で動作する対話式操作です。イメージとしては、PowerShellのリモートデスクトップですね。
ローカルとほぼ変わらない操作ができる上に、操作対象コンピュータ上での動作なので「-ComputerName」オプションをサポートしていないコマンドレットも使うことができます。
ドメイン環境であれば、管理権限を持ったアカウントでログインし、Enter-PSSessionで接続します。
ドメイン環境でのEnter-PSSession
PS C:\> Enter-PSSession hs003 [hs003]: PS C:\Users\Administrator.CONTOSO\Documents> |
ワークグループ環境の場合は、「-Credential」オプションで使用するアカウントを明示的に指定します。
ワークグループ環境でのEnter-PSSession
PS C:\> Enter-PSSession hs004 -Credential hs004\administrator [hs004]: PS C:\Users\Administrator\Documents> |
操作が終わって切断するときは、「Exit-PSSession」で切断します。
Enter-PSSessionの終了
[hs004]: PS C:\Users\Administrator\Documents> Exit-PSSession |
「Invoke-Command」は、リモートコンピューターに対するコマンド投入です。「Enter-PSSession」は対話処理専用で、バッチ処理に不向きですが(コマンドコピペは可)、「Invoke-Command」はバッチ処理ができます。
イメージ的には、「Invoke-Command」はコマンドやバッチを投げて、終わるまで腕を組んで待つって感じです。
「Enter-PSSession」がお手軽に使えるのに対して、「Invoke-Command」はちょっととっつきにくい感じですが、とても奥が深く自動化には欠かせない存在です。
奥が深いので、とりあえず簡単な使い方だけ紹介します。(ドメイン環境で管理アカウントでログインしている場合は-Credential不要)
# Get-ChildItemコマンドをhs004へ投入 Invoke-Command -ComputerName hs004 -Credential administrator -ScriptBlock { Get-ChildItem c:\ } # ローカルにあるtest.ps1をhs004へ投入 Invoke-Command -ComputerName hs004 -Credential administrator -FilePath c:\test\test.ps1 |
余談ですが、PowerShellのリモート操作では、UACが無効なので、管理権限を持ったアカウントでリモート操作をすると、管理権限で実行されるので、「管理者で実行」をする必要はありません。
Hyper-V server 2012 R2 の目次に戻る
http://www.vwnet.jp/Windows/etc.asp#Hyper-V_server_2012_R2
Copyright © MURA All rights reserved.