Windows Server 2012 Community Day 2013 年 12 月
PowerShell を使用した
Hyper-V の管理
高井 一輝
自己紹介
• 高井 一輝 (Takai Kazuki)
• 某 ISP 勤務
• クラウドとオンプレミスを組み合わせたインテグレーション • 見積り、提案書の作成から設計、構築、試験、運用まで • ネットワーク、サーバ (Windows、Linux)• System Center User Group Japan (SCUGJ)
• Twitter : @zhuky7 / Facebook : kazuki.takai
• Blog : http://operationslab.wordpress.com/
本日の内容
• お話すること
• PowerShell についてのおさらいと PowerShell 4.0 • 運用管理視点での PowerShell • PowerShell を使用した Hyper-V 環境の管理• お話しないこと
• Windows Server の初期構成や、Hyper-V ホストの構築方法
• ネットワーク仮想化と仮想ネットワークの管理
このセッションのゴール
• PowerShell でできることを理解する
• PowerShell を使用するメリットを理解する
本日の環境
• Windows Server 2012 R2
• 多くのコマンドは Windows Server 2012 でも利用可能
アジェンダ
• Windows PowerShell とは
• Windows Server 2012 R2 PowerShell 4.0 の新機能
• PowerShell による管理・運用
PowerShell とは
• Windows で利用可能な新しいシェル / スクリプト言語
• Windows Server 2008 R2 以降で標準搭載
• コマンドプロンプトよりも高度な処理 / 制御が可能
• WSH よりもスクリプトの記述が容易
• Character-based User Interface
• テキストベースではなくオブジェクトベース
• パイプラインを流れるのはオブジェクト
• 豊富なコマンドレット
なぜ PowerShell を使用するのか
• 運用管理者にとってのメリット
• GUI では設定できない項目の操作 / 変更が可能 • 自動化が容易 (スクリプト化可能) – 操作ミスの低減 – 作業の効率化 – 時間短縮 • 操作履歴 (ログ) を取得しやすい • デフォルトでリモートからアクセス可能• 運用管理者にとってのデメリット
• 直観的ではない (「グラフィカル」ではない)PowerShell 実行環境
• PowerShell (PowerShell コンソール)
• powershell.exe
• 通常の PowerShell 環境
• PowerShell ISE (Integrated Scripting Environment)
• powershell_ise.exe • スクリプト作成 / デバッグ用の環境 – ブレークポイントの設定 – スクリプトの一部を選択して実行 (選択範囲を実行)
• コンソールと ISE では、一部動作 (挙動) が異なる
• 外部コマンドの呼び出し制約Windows Server 2012 R2
PowerShell 4.0 の新機能
Windows Server 2012 R2 の PowerShell
• PowerShell 4.0
• w/ Windows Management Framework 4.0
• モジュール及びコマンドの追加
• PowerShell 4.0 としての追加
• Windows Server 2012 R2 としての追加
※PS 4.0 (WMF 4.0) は Windows Server 2012 R2 以外でも利用可能
– Windows 7 SP1, Windows Server 2008 R2 SP1, Windows Server 2012 – .NET Framework 4.5 が必要
追加されたコマンド
Export-BinaryMiLog Import-BinaryMiLog Add-WindowsImage Expand-WindowsImage Export-WindowsImage Get-WindowsImageContent New-WindowsImage Remove-WindowsImage Set-AppXProvisionedDataFile Split-WindowsImage Add-VMNetworkAdapterExtendedAcl Add-VmNetworkAdapterRoutingDomainMapping Copy-VMFile Debug-VM Get-VMFirmware Get-VMNetworkAdapterExtendedAcl Get-VmNetworkAdapterIsolation Get-VMNetworkAdapterRoutingDomainMapping Remove-VMNetworkAdapterExtendedAcl Remove-VMNetworkAdapterRoutingDomainMapping Set-VMFirmware Set-VmNetworkAdapterIsolation Set-VmNetworkAdapterRoutingDomainMapping Test-VMNetworkAdapter Expand-IscsiVirtualDisk Export-IscsiTargetServerConfiguration Import-IscsiTargetServerConfiguration Resize-IscsiVirtualDisk Stop-IscsiVirtualDiskOperation Get-FileHash Debug-MMAppPrelaunch Add-NetEventNetworkAdapter Add-NetEventPacketCaptureProvider Add-NetEventProvider Add-NetEventVmNetworkAdapter Add-NetEventVmSwitch Get-NetEventNetworkAdapter Get-NetEventPacketCaptureProvider New-NetEventSession Remove-NetEventNetworkAdapter Remove-NetEventPacketCaptureProvider Remove-NetEventProvider Remove-NetEventSession Remove-NetEventVmNetworkAdapter Remove-NetEventVmSwitch Set-NetEventPacketCaptureProvider Set-NetEventProvider Set-NetEventSession Start-NetEventSession Stop-NetEventSession Add-NetNatExternalAddress Add-NetNatStaticMapping Get-NetNat Get-NetNatExternalAddress Get-NetNatGlobal Get-NetNatSession Get-NetNatStaticMapping New-NetNat Remove-NetNat Remove-NetNatExternalAddress Remove-NetNatStaticMapping Set-NetNat Set-NetNatGlobal Find-NetIPsecRule Find-NetRoute Get-NetCompartment Test-NetConnection Select-NetVirtualizationNextHop Get-PcsvDevice Restart-PcsvDevice Set-PcsvDeviceBootConfiguration Start-PcsvDevice Stop-PcsvDevice Read-PrinterNfcTag Write-PrinterNfcTag Configuration Restore-DscConfiguration Set-DscLocalConfigurationManager Start-DscConfiguration Test-DscConfiguration Get-SMCounterSample Get-SMPerformanceCollector Get-SMServerBpaResult Get-SMServerClusterName Get-SMServerEvent Get-SMServerFeature Get-SMServerInventory Get-SMServerService Remove-SMServerPerformanceLog Start-SMPerformanceCollector Stop-SMPerformanceCollector Disable-SmbDelegation Enable-SmbDelegation Get-SmbBandWidthLimit Get-SmbDelegation Remove-SmbBandwidthLimit Set-SmbBandwidthLimit Set-SmbPathAcl Move-SmbClient Get-SilComputer Get-SilData Get-SilLogging Get-SilSoftware Get-SilUalAccess Get-SilWindowsUpdate Publish-SilData Set-SilLogging Start-SilLogging Stop-SilLogging Export-StartLayout Get-StartApps Import-StartLayout Clear-FileStorageTier Get-StorageTierSupportedSize New-StorageTier New-Volume Register-StorageSubsystem Remove-StorageTier Resize-StorageTier Set-FileStorageTier Set-StorageProvider Set-StorageTier Unregister-StorageSubsystem Update-StoragePool Write-FileSystemCache Write-VolumeCache Disable-TlsSessionTicketKey Enable-TlsSessionTicketKey Export-TlsSessionTicketKey New-TlsSessionTicketKey Get-TpmEndorsementKeyInfo Get-TpmSupportedFeature Add-VpnConnectionRoute Add-VpnConnectionTriggerApplication Add-VpnConnectionTriggerDnsConfiguration Add-VpnConnectionTriggerTrustedNetwork Get-VpnConnectionTrigger New-VpnServerAddress Remove-VpnConnectionRoute Remove-VpnConnectionTriggerApplication Remove-VpnConnectionTriggerDnsConfiguration Remove-VpnConnectionTriggerTrustedNetwork Set-VpnConnectionIPsecConfiguration Set-VpnConnectionTriggerDnsConfiguration Set-VpnConnectionTriggerTrustedNetwork Get-WindowsSearchSetting Set-WindowsSearchSetting :追加されたコマンド (Hyper-V 関連)
• Hyper-V モジュール
• Copy-VMFile • Debug-VM • Test-VMNetworkAdapter • *-VMFirmware • *-VMNetworkAdapterExtendedAcl • *-VmNetworkAdapterIsolation • *-VmNetworkAdapterRoutingDomainMapping• NetWNV モジュール
• Select-NetVirtualizationNextHopPowerShell 4.0 の主な変更点
• 運用管理者の視点では…
• Default Execution Policy
• Get-FileHash コマンドレット
• Desired State Configuration (DSC)
• *-ScheduledJob の RunNow パラメーター
• *-JobTrigger の RepeatIndefinitely パラメーター
• Get-Process コマンドレットの IncludeUserName パラメーター
• etc...
What's New in Windows PowerShell
Default Execution Policy の変更
• Default の実行ポリシーが RemoteSigned に変更
• Windows Server 2012 R2 のみ – Local Machine ポリシーの既定値が変更された • Windows 8.1 は Undefined のまま ※実行ポリシーの話は後ほどGet-FileHash コマンドレット
• ファイルのハッシュ値を計算するコマンドレット
• 複数のハッシュアルゴリズムに対応
• SHA1, SHA256, SHA384, SHA512, MACTripleDES, MD5, RIPEMD160 • デフォルトは SHA256
• PowerShell 3.0 以前でも .NET のクラスを使用することで
ハッシュ値の計算は可能
• System.Security.Cryptography.SHA1 • System.Security.Cryptography.MD5Desired State Configuration (DSC)
• Windows PowerShell Desired State Configuration
• サーバーの構成と管理を行うための新機能 • サーバーに対する操作 (構築) 手順ではなく、サーバーの状態を記述する ことでサーバーを自動構成
• DSC によるサーバーの構成手順
• PowerShell で構成後のサーバーの状態を定義 • PowerShell コードから構成データが含まれる MOF ファイルを生成 • MOF ファイルを使用してサーバーを構成DSC の Configuration
Configuration WebServerConfig { Node web01 { WindowsFeature FTPRole { Name = "Web-FTP-Server" Ensure = "Present" IncludeAllSubFeature = $true } } } WebServerConfigDSC リソース
Archive Environment File Resources A
Group Log Package Resources B
Process Registry Role Resources C
Script Service User Resources D
Windows PowerShell Desired State Configuration
DSC ビルトイン リソース
• Role
• Windows の役割や機能を構成• User / Group
• ローカルユーザーやグループを構成• Service
• Windows サービスの状態を構成• Package
• Windows インストーラーや setup.exe などのパッケージを構成• File
• ファイルやフォルダーを構成• etc...
Desired State
PowerShell による管理・運用
• PowerShell を使用する目的
• 管理タスクの自動化 • 運用管理の効率化• 運用管理を自動化・効率化するための準備
• スクリプトを実行できるよう構成する • リモートから接続して管理できるよう構成する • PowerShell 起動時のプロファイルを構成するスクリプトの実行許可
• スクリプトの実行やコンフィグレーションのロード
• 実行ポリシー (Execution Policy) によって制御される • 既定値では、スクリプトの実行が禁止されている – Windows Server 2012 R2 以外• 実行ポリシーの確認と変更
• Get-ExecutionPolicy / Set-ExecutionPolicy • グループポリシーによる設定 – コンピューターポリシー / ユーザーポリシー • PowerShell 起動時のオプションで指定実行ポリシー
• 実行ポリシーは以下の 6 種類 (5 段階 + “未定義”)
• Restricted : スクリプトの実行を禁止する • AllSigned : 有効な署名付きのスクリプトのみ実行可能 • RemoteSigned : ローカルのスクリプトは無条件に実行可能 リモートから取得したスクリプトには署名が必要 • Unrestricted : スクリプトは実行可能 (一部警告表示あり) • Bypass : スクリプトは実行可能 (警告表示なし) • Undefined : 未定義• 規定値は Undefined
• Windows Server 2012 R2 のみ RemoteSigned (LocalMachine Scope)
実行ポリシーのスコープ
• 実行ポリシーはスコープごとに設定可能
• MachinePolicy : グループポリシーによる設定 (Computer) • UserPolicy : グループポリシーによる設定 (User) • Process : 実行中の PowerShell セッション内のみ有効 • CurrentUser : ログインユーザーの設定 (レジストリに格納) • LocalMachine : ローカルコンピューターの設定 (レジストリに格納)• 上位スコープの設定が優先される
• 基本的には管理者権限で設定を行う
• Process / CurrentUser スコープは一般ユーザー権限で設定変更可能 • LocalMachine スコープでスクリプト実行を禁止していても、Process ス コープで実行を許可することで、一時的なスクリプトの実行が可能リモート接続の構成
• リモート コンピューターへ接続して操作を行う
• WS-Management を使用してリモートコンピューターの WinRM (Windows Remote Management) サービスへ接続する
• 事前にリモート接続の構成が必要
– Windows Server 2012 R2 では、同一セグメントからのリモート接続が デフォルトで許可されている
• とりあえず接続したい場合は以下を実行 (検証環境向け)
– 接続先 : Enable-PSRemoting -Force
– 接続元 : Set-Item WSMan:¥localhost¥Client¥TrustedHosts -Value * – 本番環境へ適用する際は、設定の意味を理解してセキュリティを考慮する
• Get-Help about_Remote
リモート接続の要件
• リモート接続の要件を満たすようコンピューターを構成する
• WinRM サービスが起動している
• WinRM のエンドポイントが適切に構成されている
• Windows Firewall やその他の Firewall 製品で通信が許可されている
– ネットワークロケーションがパブリック ネットワークの場合、PowerShell の バージョン / OS によって Enable-PSRemoting の挙動が異なるので注意 • 接続先コンピューターの Administrators グループに所属しているか、 権限が適切に構成されている • 接続先に対する資格情報の送信が許可されている – ドメインに参加しているか、TrustedHosts が適切に構成されている • Get-Help about_Remote_Requirements
リモート接続時の注意点
• PowerShell のバージョンによりセッションの扱いが異なる
• PowerShell 2.0 / WinRM 2.0 では接続元側でセッション情報を保持 • PowerShell 3.0 / WinRM 3.0 以降は接続先側でセッション情報を保持 – セッションを切断し、別の接続元から同一のセッションへ再接続が可能• トラブルが少ない構成
• ドメイン環境 • Domain Admins グループのユーザーを使用• WMF (Windows Management Framework) 3.0 (PowerShell 3.0 / WinRM 3.0) 以降を使用
プロファイルの構成
• プロファイル
• PowerShell 起動時に自動的にロードされるスクリプト • 以下の4種類 (上から順に実行される) – $PROFILE.AllUsersAllHosts • $PSHOME¥profile.ps1 – $PROFILE.AllUsersCurrentHost • $PSHOME¥Microsoft.PowerShell_profile.ps1 • $PSHOME¥Microsoft.PowerShellISE_profile.ps1 – $PROFILE.CurrentUserAllHosts • $HOME¥Documents¥WindowsPowerShell¥profile.ps1 – $PROFILE.CurrentUserCurrentHost • $HOME¥Documents¥WindowsPowerShell¥Microsoft.PowerShell_profile.ps1 • $HOME¥Documents¥WindowsPowerShell¥Microsoft.PowerShellISE_profile.ps1PowerShell 起動時に実行ログの取得を開始
• PowerShell で実行ログを取得
• Start-Transcript コマンドレット• PowerShell 起動時に Start-Transcript を実行
• プロファイル内で Start-Transcript を実行 • AllUsersCurrentHost または CurrentUserCurrentHost に記述 – PowerShell ISE はトランスクリプションをサポートしない• トランスクリプトへの出力は PowerShell の実行ログのみ
• PowerShell から起動した外部コマンド (ipconfig など) の出力は 記録されない • 外部コマンドの出力を記録したい場合は、Start-Process で 標準出力や標準エラー出力をリダイレクトするPowerShell による Hyper-V 環境の管理
• Hyper-V ホスト / 仮想マシンの管理
• 基本的に Hyper-V モジュールのコマンドレットを使用 • タスクに応じて適切なコマンドレットを選択 – Get-* : 状態の確認、情報取得 – New-* : 新規作成 – Set-* : 設定の変更 – Add-* : 設定の追加、コンポーネントの追加 – Remove-* : 削除、コンポーネントの取り外し – その他、直観的な動詞仮想マシンの構成・管理
• 仮想マシンの状態を変更
• Start-VM / Stop-VM / Restart-VM
Suspend-VM / Resume-VM / Save-VM
• 仮想マシンの作成、削除
• New-VM / Remove-VM
• 仮想マシンの構成変更
• Set-VM
• Set-VMBios / Set-VMProcessor / Set-VMMemory Set-VMHardDiskDrive / Set-VMNetworkAdapter
スナップショットの管理と仮想マシンのエクスポート
• スナップショットの管理
• Checkpoint-VM • Restore-VMSnapshot • Remove-VMSnapshot• 仮想マシンのエクスポート / インポート
• Import-VM • Export-VM • Export-VMSnapshotレプリケーションの管理
• Hyper-V Replica によるレプリケーションの管理
• Enable-VMReplication • Set-VMReplication • Start-VMInitialReplication / Stop-VMInitialReplication • Import-VMInitialReplication • Stop-VMReplication • Suspend-VMReplication / Resume-VMReplication • Remove-VMReplication • Start-VMFailover • Stop-VMFailoverその他の操作
• ライブマイグレーション
• Move-VM • Move-VMStorage• VHD / VHDX の管理
• New-VHD • Mount-VHD • Dismount-VHD• その他
• Copy-VMFileCopy-VMFile
• Hyper-V ホストから仮想マシンへファイルをコピー
• 仮想マシンから Hyper-V ホストへのコピーはできない • 対象となる仮想マシンの要件 – 仮想マシンの設定で統合サービスの「ゲスト サービス」が有効化されている (既定値は「無効」) – 仮想マシンの OS で「Hyper-V ゲスト サービス インターフェイス」サービス (vmicguestinterface) が起動している • コピー先のパスに対して、コピー先 OS 上の Administrators グループが 「フル コントロール」を保持している必要がある – Administrator アカウントではなく、Administrators グループCopy Files to VM
Hyper-V を管理する際の注意点
• WMI の名前空間
• root¥virtualization 名前空間が Windows Server 2012 R2 で廃止に
– Windows Server 2012 時点で非推奨となっていた
• root¥virtualization¥v2 を使用する
本日のデモシナリオ
• OSの構成変更前にスナップショットを取得
• クロスバージョン ライブマイグレーション
• Hyper-V Replica テストフェイルオーバー
• 仮想マシンの展開
OSの構成変更前にスナップショットを取得
• 重要な変更を行う前にスナップショットを取得
• 変更に成功したらスナップショットを削除 • 変更に失敗したらスナップショットへ戻す• スナップショット (チェックポイント) の操作
• Checkpoint-VM • Restore-VMSnapshot • Remove-VMSnapshotCreate / Revert
クロスバージョン ライブマイグレーション
• ライブマイグレーション
• 仮想マシンをオンラインのままホストを移動 • 仮想マシンのディスクを同時に移動することも可能 • PowerShell であれば Move-VM するだけ• クロスバージョン ライブマイグレーション
• 異なる Hyper-V ホスト OS バージョン間でのライブマイグレーション • 特別な準備は不要 (ライブマイグレーションと同様の設定で問題ない) • 現状では Windows Server 2012 R2 への移行のみCross-version
Hyper-V Replica の制御
• Hyper-V Replica テスト フェイルオーバー
• レプリカ ホスト側で保護対象の仮想マシンを一時的に起動 • プライマリホスト側で稼働中の仮想マシンには影響を与えない • デフォルトでは、テスト中の VM は仮想スイッチにつながっていない状態 – 改めて仮想マシンの設定を変更しスイッチへ接続 – Set-VMNetworkAdapter で事前に設定 • テスト フェイルオーバーの操作 (開始) は、レプリカ ホスト側で実施 • 本番のフェイルオーバーも同様の手順で実施可能Hyper-V Replica
仮想マシンの展開
• テンプレートから仮想マシンを展開
• 構成済みの仮想ハードディスクイメージを複製して仮想マシンを作成• 用意するもの
• 構成済みの仮想ハードディスクイメージ – 展開時のマスターイメージとして使用 – Windowsの場合はsysprepを使用して展開用に準備 – 仮想マシンが停止している状態のイメージを使用 – 単一のイメージファイルへ結合(スナップショット削除/差分ディスク結合) • 自動応答ファイル – 展開するOSがWindowsで、展開後の構成を自動化したい場合Sysprep
• システム準備ツール(System Preparation Tool)
• インストール済みのWindowsからコンピューター固有の情報を削除し、
複製/展開に使用できるように準備するツール
• インストール済みの(展開時にマスターイメージとして使用する)
Windows上で実行
• C:¥Windows¥System32¥Sysprep¥Sysprep.exe
– Sysprep.exe /generalize /oobe /shutdown [/mode:vm]
Sysprep
• VMモード
• /mode:vm • ハードウェアのスキャン/構成をスキップ • 同じ仮想マシンまたはハイパーバイザーに展開する場合のみ有効 • 異なるハードウェアプロファイルのVMに展開すると正常に動作しない • 仮想マシンにインストールされたWindows上でのみ指定可能• 仮想マシン展開用のマスターイメージ
• DHCPを使用する構成で仮想マシンを展開 ⇒ VMモード – DHCP構成で展開した後、手動またはスクリプトで固定IPをアサイン • 固定IPを使用する構成で仮想マシンを展開 ⇒ VMモードは使用しないDeploying
仮想マシンの展開
• スクリプトの内容(動的IP版)
• Sysprep 済みの仮想ハードディスクイメージを親ディスクとして、 新規仮想マシン用の差分ディスクを作成 • 仮想マシンを作成 • 仮想マシンのパラメーターを調整 • 仮想ハードディスクのマウント • 自動応答ファイルを配置 • 仮想ハードディスクのアンマウント • 電源オン仮想マシンの展開
• スクリプトの内容(固定IP版)
• Sysprep 済みの仮想ハードディスクイメージを親ディスクとして、 新規仮想マシン用の差分ディスクを作成 • 空の仮想ハードディスクを使用して仮想マシンを作成 • 仮想マシンのパラメーターを調整 • 電源オン / 電源オフ (MACアドレスのアサイン) • 仮想ハードディスクの接続変更 • 仮想ハードディスクのマウント • 自動応答ファイルを配置 • 仮想ハードディスクのアンマウント • 電源オンまとめ
• PowerShell により運用管理タスクを自動化できる
• 運用管理の負荷を軽減 • サービスレベルの向上 – ユーザーの要望に迅速に対応できる、など• 一からスクリプトを作成するのは大変
• 高度な用途、大規模な環境には、ぜひ System Center を参考資料
• Windows Server 2012 勉強会キット
• Windows PowerShell 4.0 による Windows Server 2012 R2 の管理 ~ Hyper-V 編
• http://technet.microsoft.com/ja-jp/windowsserver/jj649374.aspx
• Microsoft Virtual Academy
• http://www.microsoftvirtualacademy.com
– Windows Server 2012 管理のための Windows PowerShell 3.0 新機能解説 – Getting Started with PowerShell 3.0 Jump Start
– Windows Server 2012 R2: Server Management and Automation