今回やろうとしたのはこんな事です。
VM のライブ マイグレーションを Invoke-Command しようとしたらエラーになっちゃいました。
PS C:\> Invoke-Command "Host001" -Credential "hogehoge\administrator" -ScriptBlock $Function:MoveVM -ArgumentList "Host002"
この操作を実行するアクセス許可がありません。この操作を実行するアクセス許可があると思われる場合は、管理者に問い合わせてください。
+ CategoryInfo : PermissionDenied: (:) [Move-VM], VirtualizationOperationFailedException
+ FullyQualifiedErrorId : AccessDenied,Microsoft.HyperV.PowerShell.Commands.MoveVMCommand
+ PSComputerName : Host001
|
Invoke-Command した関数
|
このエラーが起きる原因は、ライブ
マイグレーションをする際に、マイグレーション元からマイグレーション先へのリモート操作が入り、その際に PowerShell の仕様で Next Hop 処理が
default 禁止されている制限に引っかかったからです。
(当分悩んだのはナイショ w)
この問題を回避するには、Next Hop
処理を許可します。
Next Hop 処理を許可するには、Credssp を有効にして -Authentication Credssp
オプションで Invoke-Command します。
Server 側の Credssp の状態を確認するには、winrm get winrm/config/service コマンドを使います。
PS C:\> winrm get winrm/config/service
Service
RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)
MaxConcurrentOperations = 4294967295
MaxConcurrentOperationsPerUser = 1500
EnumerationTimeoutms = 240000
MaxConnections = 300
MaxPacketRetrievalTimeSeconds = 120
AllowUnencrypted = false
Auth
Basic = false
Kerberos = true
Negotiate = true
Certificate = false
CredSSP = false
CbtHardeningLevel = Relaxed
DefaultPorts
HTTP = 5985
HTTPS = 5986
IPv4Filter = *
IPv6Filter = *
EnableCompatibilityHttpListener = false
EnableCompatibilityHttpsListener = false
CertificateThumbprint
AllowRemoteAccess = true
|
この例では CredSSP が無効になっています。
PowerShell のコマンドレットで確認する場合は、Get-WSManCredSSP を使います。
PS C:\> Get-WSManCredSSP
このコンピューターは、新しい資格情報の委任を許可するようには構成されていません。
このコンピューターは、リモート クライアント コンピューターから資格情報を受け取るように構成されていません。
|
CredSSP を有効にするには、以下コマンドレットを使います
Enable-WSManCredSSP -Role Server -Force |
PS C:\> Enable-WSManCredSSP -Role Server -Force cfg : http://schemas.microsoft.com/wbem/wsman/1/config/service/auth lang : ja-JP Basic : false Kerberos : true Negotiate : true Certificate : false CredSSP : true CbtHardeningLevel : Relaxed |
これで Hyper-V ホスト側の準備ができました。
Credssp は、Invoke-Command の受け側の Server だけではなく、Invoke-Command を送る側の Client でも有効にする必要があります。
Client 側の Credssp の状態を確認するには、winrm get winrm/config/client コマンドを使います。
PS C:\> winrm get winrm/config/client
Client
NetworkDelayms = 5000
URLPrefix = wsman
AllowUnencrypted = false
Auth
Basic = true
Digest = true
Kerberos = true
Negotiate = true
Certificate = true
CredSSP = false
DefaultPorts
HTTP = 5985
HTTPS = 5986
TrustedHosts = *
|
CredSSP が無効になっています。
PowerShell のコマンドレットで確認する場合も、Get-WSManCredSSP を使います。
PS C:\> Get-WSManCredSSP
このコンピューターは、新しい資格情報の委任を許可するようには構成されていません。
このコンピューターは、リモート クライアント コンピューターから資格情報を受け取るように構成されています。
|
Client 側の CredSSP を有効にするには、以下コマンドレットを使います
Enable-WSManCredSSP -Role Client -DelegateComputer * -Force |
PS C:\> Enable-WSManCredSSP -Role Client -DelegateComputer * -Force cfg : http://schemas.microsoft.com/wbem/wsman/1/config/client/auth lang : ja-JP Basic : true Digest : true Kerberos : true Negotiate : true Certificate : true CredSSP : true |
準備ができたので、Invoke-Command を Credssp で実行します。
Credssp で実行するには、-Authentication Credssp オプションを使います。
Invoke-Command 投入先 -ScriptBlock [Move-VM] -Authentication Credssp |
PS C:\> Invoke-Command "Host001" -Credential "hogehoge\administrator" -ScriptBlock $Function:MoveVM -ArgumentList "Host002" -Authentication Credssp |
これで、Move-VM の
Invoke-Command が出来ました。
-AsJob で Invoke-Command
すると同時並行でライブマイグレーションが出来るのがうれしいですね。
Enter-PSSession も同じなので、Enter-PSSession で Move-VM する場合も -Authentication Credssp オプションを使います。
Windows
PowerShell: 次ホップを実行する
https://technet.microsoft.com/ja-jp/library/jj853299.aspx
リモート
コンピューターのバッチ操作(Invoke-Command)
http://www.vwnet.jp/Windows/PowerShell/InvokeCommand.htm
PowerShell
で仮想マシンをライブマイグレーションする
http://www.vwnet.jp/Windows/WS12R2/MoveVM/MoveVMbyPS.htm
仮想マシンの移動設定
http://www.vwnet.jp/Windows/WS12R2/MoveVMSetting/MoveVMSet.htm
Copyright © MURA All rights reserved.