SlideShare a Scribd company logo
1 of 332
Download to read offline
勉強会キット

Windows PowerShell 4.0 による
Windows Server 2012 R2 の管理 ~ Hyper-V 編
第一版 2013.12.01
日本マイクロソフト株式会社
エバンジェリスト
安納 順一 Junichi Anno
BLOG http://blogs.technet.com/junichia/

1
はじめに
この勉強会キットでは、Windows PowerShell を使用してリモートコンピューターから
Hyper-V を管理するための手法を学習します。
演習では Windows Server 2012 R2 と Hyper-V Server 2012 R2 を使用していますが、多
くの操作は旧バージョンの OS でも動作します。
この勉強会キットは3部構成になっています。
第1部 基本的な操作方法
このセクションではインストール直後の OS を、PowerShell のコマンドレットだけ
を使用して Hyper-V が使用できるように環境設定していきます。
第2部 ライブマイグレーション
このセクションでは、第1部でセットアップした Hyper-V 環境にさらに手を入れてラ
イブマイグレーションが実行できるようにします。
第3部 Windows PowerShell エキスパートを目指す方へ
第1部、第2部では細かな技術解説は行っていません。このセクションでは、Windows
PowrShell の細かいテクニックも含め、Windows Server 全般を管理するためのスクリ
プトを作成するのに必要なテクニックについて解説しています。

2
事前準備
本勉強会キットの手順書に沿って学習する場合には、事前に以下の環境を準備してください。
なお、ホスト名やIPアドレスは演習中に Windows PowerShell コマンドレットを使用して
設定するので、事前設定は必要ありません。
いずれの OS も以下よりダウンロードできます
(OSがインストールされたVHDファイルもダウンロードできます)
http://technet.microsoft.com/ja-jp/evalcenter/dn205286.aspx

物理マシン

Windows Server
2012 R2

(GUI使用サーバー)

物理マシン
Hyper-V Server
2012 R2

Sysprep済の
仮想ハードディスク
Windows Server
2012 R2

第1部で使用
第2部で使用

ライブマイグレーションを行う場合には2台の物理サーバーが必要です

3
Agenda
第1部 基本的な操作方法
このセクションではインストール直後の OS を、PowerShell のコマンドレットだ
けを使用して Hyper-V が使用できるように環境設定していきます。

第2部 ライブマイグレーション
このセクションでは、第1部でセットアップした Hyper-V 環境にさらに手を入れ
てライブマイグレーションが実行できるようにします。
第3部 Windows PowerShell エキスパートを目指す方へ
第1部、第2部では細かな技術解説は行っていません。このセクションでは、
Windows PowrShell の細かいテクニックも含め、Windows Server 全般を管理する
ためのスクリプトを作成するのに必要なテクニックについて解説しています。

4
第1部 基本的な操作を学ぼう
このセクションでは、OS インストール直後の状態から、Windows
PowerShell だけを使用して、Hyper-V 上に仮想マシンを立ち上げます。

5
1台目の Windows Server
1. Windows Server 2012 R2 のインストール
2. Windows PowerShell の基本設定
 統合スクリプト環境の起動
 実行ポリシーの設定
 リモーティングの設定
3.

4.

Windows Server の基本設定
 IP アドレスの設定
 DNS の設定
 ローカルコンピューター名の設定
 Windows Update の実行
Hyper-V の構成
 Hyper-V 役割のインストール
 Hyper-V ホストの規定値を変更する
 仮想ハードディスクの保存先
 仮想マシンの保存先
 Hyper-V レプリカの有効化
 仮想スイッチの作成

5. DNS サーバーの構成
 DNS サーバー役割のインストール
 DNS ゾーンの確認

6. Active Directory ドメインの構成
 AD DS 役割のインストール
 Active Directory ドメインの構築
7. DHCP Server の構成
 DHCP サービスのインストール
 DHCP サービスを構成する
 スコープを作成する

8. 仮想マシンの構成
 ゲスト OS の作成
 ゲスト OS の初期設定
 ゲスト OS の環境設定

6
1.Windows Server 2012 R2 のインストール
①

Windows Server 2012 R2 を「GUI付き」で普通にインストール
してください。ここでは Windows PowerShell は使用しません。
以降の手順で Windows PowerShell を使用して環境設定を行い
ます。

7
2. Windows PowerShell の基本設定
統合スクリプト環境の起動
① Windows Server 2012 R2 にサインインする
② デスクトップのタスクバーに登録されている Windows PowerShell アイコンをク
リックして PowerShell コンソールを起動する。
③ 一度コンソールを閉じる
④ Windows PowerShell アイコンを「右クリック」して「ISE を管理者として実行
する」を選択し、ISE(統合スクリプト環境)を起動する。

スクリプトエディタ

スクリプト実行画面
コマンドレットを直接実行

コ
マ
ン 文字が小さい場合には
ド [Ctrl]+[+] で拡大できます。
レ [Ctrl] + [-] で縮小できます。
ッ
ト
検
索
8
実行ポリシーの設定
① 以下のコマンドレットを実行し、ローカルで作成したスクリプトは署名なしで実行
できるように実行ポリシーを変更する
PS C:¥>Set-ExecutionPolicy RemoteSigned
リモーティングの有効化
① 以下のコマンドレットを実行し、PowerShell によるリモート管理を有効にする
PS C:¥>Enable-PSRemoting –force

9
3. Windows Server の基本設定
IP アドレスの設定
① ネットワークアダプタの一覧を表示し、IPアドレスを設定するネットワークカードの
InterfaceIndex を特定する

PS C:¥> Get-NetAdapter | FT Name, InterfaceIndex, InterfaceDescription
② ターゲットとなるネットワークアダプターの情報を確認する(以下の例では
InterfaceIndex = 13 としている)

PS C:¥> Get-NetIPAddress -InterfaceIndex 13 -AddressFamily IPv4
③ 既定では DHCP を利用するように設定されているので、以下のコマンドを使用して静的な
IP アドレスを設定する

PS C:¥>New-NetIPAddress -InterfaceIndex 13 -IPAddress 192.168.0.1
-AddressFamily IPv4 -PrefixLength 24 -DefaultGateway 192.168.0.254
※ DefaultGateway は必要に応じて
※ 既存の静的アドレスを変更する場合には Set-NetIPAddress を使用する

10
DNS の設定
① DNS サーバーのアドレスを設定する
PS C:¥>Set-DnsClientServerAddress -Interface 24 -ServerAddress 192.168.0.1
※ 複数の DNS サーバーが存在する場合にはカンマで区切って指定する

参考

IP アドレスの削除
PS C:¥> Remove-IPAddress -InterfaceIndex 24 -AddressFamily IPv4
DNSの設定を削除する
PS C:¥> Set-DnsClientServerAddress -Interface 24 -ResetServerAddress
DHCP を有効にする
PS C:¥> Set-NetIPInterface -InterfaceIndex 24 -Dhcp Enabled
11
ローカルコンピューター名を設定する
① 現在のコンピューター名を取得する

PS C:¥> $Env:ComputerName
② 新しいコンピューター名を設定し、再起動する
PS C:¥> Rename-Computer -NewName “HV01” -Force -Restart

12
Windows Update を実行する
① 以下のコマンドを実行して、Windows Update PowerShell Module をダウンロードする
PS C:¥> $web = New-Object System.Net.WebClient
PS C:¥> $zipfile = "http://gallery.technet.microsoft.com/scriptcenter/”
PS C:¥> $zipfile = $zipfile + “2d191bcd-3308-4edd-9de2-88dff796b0bc/file/41459/28/PSWindowsUpdate.zip"
PS C:¥> $web.DownloadFile($zipfile, "C:¥tmp¥PSWindowsUpdate.zip")
上記コマンドでダウンロードできない場合には、以下のサイトから Windows Update
PowerShell Module の最新版をダウンロードしてください
http://gallery.technet.microsoft.com/scriptcenter/2d191bcd-3308-4edd-9de2-88dff796b0bc
※「Windows Update PowerShell Modules」で検索すればヒットします
② 以下のコマンドを使用して、ダウンロードした PSWindowsUpdate.zip ファイルを適当な場所に
展開する。ここでは C:¥tmp フォルダに展開しています。

PS C:¥> Add-Type -AssemblyName System.IO.Compression.FileSystem
PS C:¥> $ZipFile = Get-Item C:¥tmp¥PSWindowsUpdate.zip
PS C:¥> [IO.Compression.ZipFile]::ExtractToDirectory( $ZipFile, ‘C:¥tmp’ )
③ Dir コマンドで、 PSWindowsUpdate フォルダが作成されていることを確認
13
④ 以下のコマンドを実行し、フォルダの中に格納されているすべてのファイルの「ブロック
解除」を行う。この操作はファイルのプロパティ画面から「ブロックの解除」を行うのと
同様である。
PS C:¥>Unblock-File <ファイルの保存先>¥*.*

(例)
PS C:¥>Unblock-File c:¥tmp¥PSWindowsUpdate¥*.*
⑤ PowerShell モジュールの格納場所を確認する
PS C:¥>$env:PSModulePath
C:¥Users¥Administrator¥Documents¥WindowsPowerShell¥Modules;C:¥windows¥system32¥Wind
owsPowerShell¥v1.0¥Modules¥;C:¥Program Files (x86)¥Microsoft SDKs¥Windows
Azure¥PowerShell¥

⑥ 既定では C:¥Users¥junichia¥Documents¥WindowsPowerShell¥Modules が存在しない
ので、以下のコマンドで PowerShell モジュールの格納場所を作成する
PS C:¥> md C:¥Users¥Administrator¥Documents¥WindowsPowerShell¥Modules

14
⑦ 以下のコマンドを実行し PSWindowsUpdate フォルダーを
C:¥Users¥Administrator¥Documents¥WindowsPowerShell¥Modules 配下に移動する
以下の例では PSWindowsUpdate フォルダーは C:¥tmp にあるものとしている
PS C:¥> Move C:¥tmp¥PSWindowsUpdate C:¥Users¥Administrator¥Documents
¥WindowsPowerShell¥Modules
⑧ PSWindowsUpdate モジュールを読み込む
PS C:¥> Import-Module PSWindowsUpdate
⑨ Windows Update を実行する
PS C:¥> Get-WUInstall -AcceptAll

15
4. Hyper-V の構成
Hyper-V 役割をインストールする
① 以下のコマンドで現在インストールされている役割と機能の一覧を参照する

PS C:¥> Get-WindowsFeature
② 以下のコマンドを実行して、Hyper-V 役割と管理ツール群をインストールし再起動する
PS C:¥> Add-WindowsFeature Hyper-V -IncrudeAllSubFeature -IncludeManagementTools
-Restart
③ Hyper-V 関連のコマンドレットを確認する

PS C:¥> Get-Command -Module Hyper-V

16
Hyper-V ホストの設定値を変更する
① Hyper-V ホストの規定値を確認する

PS C:¥> Get-VMHost | FL
② 仮想ハードディスクの既定の保存先を設定する
※以下の例では仮想ハードディスクの既定の保存先を D:¥VM に指定しています

PS C:¥> Set-VMHost -VirtualHardDiskPath D:¥VM
③ 仮想ハードディスクの構成ファイルの既定の保存先を設定する

PS C:¥> Set-VMHost -VirtualMachinePath D:¥VM

17
Hyper-Vレプリカを有効にする
① Hyper-V レプリカの設定値を確認する

PS C:¥> Get-VMReplicationServer | FL
② Hyper-V レプリカを有効にし、認証タイプを Kerberos にする

PS C:¥> Set-VMReplicationServer -ReplicationEnabled $True
-AllowedAuthenticationType Kerberos
③ どんなサーバーからの複製も受け入れ、複製の保存先を D:¥VM に設定する

PS C:¥> Set-VMReplicationServer -ReplicationAllowedFromAnyServer $True
-DefaultStorageLocation D:¥VM
④ Windows Firewall の受信規則を確認する

PS C:¥> Get-NetFirewallRule -Direction Inbound
18
⑤ Windows Firewall の受信規則の中から、Hyper-V レプリカに関する設定を確認する

PS C:¥> Get-NetFirewallRule -Direction Inbound -Desctiption *レプリカ*
※ HTTP と HTTPS に関する規則が存在することがわかります
※ それぞれ、ルール名で保存されています
HTTP
: VIRT-HVRHHTTPL-In-TCP-NoScope
HTTPS : VIRT-HVRHHTTPSL-In-TCP-NoScope
⑥ “Hyper-V レプリカ HTTP リスナー(TCP受信)”規則を有効にする

PS C:¥> Set-NetFirewallRule -Name “VIRT-HVRHTTPL-In-TCP-NoScope”
-Enabled True
$ は必要ありません

19
仮想スイッチの作成
① 仮想スイッチの一覧を表示する

PS C:¥> Get-VMSwitch
※まだ仮想スイッチは存在しません
② ネットワークアダプターの一覧を表示し、外部仮想スイッチにバインドするネットワーク
アダプターの Name 値を確認する

PS C:¥> Get-NetAdapter | FL
③ 新しい外部スイッチを “ExternalSwitch” という名前で作成する。以下の例ではバインド
先のネットワークアダプタ名は“イーサネット”として指定している。
PS C:¥> New-VMSwitch -Name “ExternalSwitch” -NetAdapterInterName “イーサネット”
-AllowManagementOS $True
④ ②で確認したHyper-V ホストの NIC が仮想化され、“ExternalSwitch”に接続されたこと
を確認する

PS C:¥> Get-NetAdapter | FL
※ “vEthernet (ExternalSwitch)” という仮想NIC が新たに作成されたことを確認してく
ださい
20
5. DNS サーバーを構成する
DNSサーバー役割をインストールする
① DNS をインストールする

PS C:¥> Add-WindowsFeature dns -IncludeManagementTools
-IncrudeAllSubFeature -Restart
② DNS サービス関連のコマンドレットを確認する

PS C:¥> Get-Command *DNSServer*
DNS ゾーン の確認
① 現在のゾーン設定を確認する

PS C:¥> Get-DNSServerZone
現時点ではゾーンは存在しません。以降の手順でActive Directory ドメインを構築します。

21
6. Active Directory ドメインを構成する
Active Directory Domain Service (AD DS)役割をインストールする
① AD DS をインストールする
PS C:¥> Add-WindowsFeature AD-Domain-Services -IncludeManagementTools
-IncrudeAllSubFeature -Restart
② AD DS 関連のコマンドレットを確認する

PS C:¥> Get-Command -module ActiveDirectory
Active Directory ドメインを構築する
ここでは Contoso.com ドメインを作成します
① 必要なモジュールをインポートする
PS C:¥> Import-Module ADDSDeployment
② 以下のコマンドを実行して回復モードパスワードを SecureString に変換し、$Password
変数に格納する。ここではパスワードを P@ssw0rd としています。
PS C:¥> $Password = ConvertTo-SecureString “P@ssw0rd” -AsPlainText -Force
22
③ ドメインコントローラーに昇格する
※ 以下は便宜上改行していますが、実際には1行で入力してください

PS C:¥> Install-ADDSForest
-CreateDnsDelegation:$False
-DatabasePath “C:¥Windows¥NTDS”
-DomainMode “Win2012R2”
-DomainName “contoso.com”
-DomainNetbiosName “CONTOSO”
-ForestMode “Win2012R2”
-InstallDns:$True
-LogPath C:¥Windows¥NTDS”
-NoRebootOnCompletion:$False
-SysvolPath “C:¥Windows¥Sysvol”
-SafeModeAdministratorPassword $Password
-Force:$True
インストールが完了すると自動的に再起動されます。

23
④ Contoso.com ゾーンが作成されていることを確認する

PS C:¥> Get-DNSServerZone -Name contoso.com | FL

24
7. DHCP サーバーを構成する
DHCP サービスをインストールする
今後仮想マシンを作成した際にアドレスをリースできるようにするため、DHCPサーバーを
セットアップしておきます。
① 以下のコマンドで DHCP サービスをインストールする
PS C:¥> Add-WindowsFeature DHCP -IncrudeAllSubFeature -IncludeManagementTools
-Restart
※ -Restart パラメタは、再起動が必要な場合に限って再起動が行われます。DHCPサービスのインストールでは再起動は
行われません。

② DHCPサービス関連のコマンドレットを確認する
PS C:¥> Get-Command *DHCP*

25
DHCP サービスを構成する
① DHCP サーバーのバインディングが 192.168.0.1 に設定されていることを確認する
※バインディングが有効にされた NIC を通じて DHCP サービスによる IP アドレスリースが行われます

PS C:¥> Get-DHCPServerV4Binding
BindingState が True であることを確認してください。

② DHCP サービスのバインディングを 192.168.0.1 に設定する(設定されていない場合)
※事前に Get-NetAdapter で NIC の Name プロパティを確認してください。以下の例で
-InterfaceAlias に指定している値は NIC の Name プロパティです。
PS C:¥>Set-DHCPServerV4Binding -InterfaceAlias “vEthernet (ExternalSwitch)”
-BindingState $True

③ DHCP サービスを Active Directory で承認する
PS C:¥> Add-DHCPServerInDC -DnsName contoso.com
④ DHCP サービスに必要なセキュリティグループを作成する
※Netsh コマンドを使用します
PS C:¥> Netsh dhcp add SecurityGroups

26
⑤ DHCP サービスを再起動
PS C:¥> Restart-Service DHCPServer

⑥ もしサーバーマネージャー上に「DHCP サーバーの構成が必要です」が表示され続けるよ
うであれば、以下のコマンドを実行してアラートをリセットする
PS C:¥> Set-ItemProperty
–Path registry::HKLM¥SOFTWARE¥Microsoft¥ServerManager¥Roles¥12
–Name ConfigurationState –Value 2

27
スコープを作成する
① IPV4 のスコープを追加
PS C:¥>Add-DHCPServerV4Scope -StartRange 192.168.0.10 -EndRange 192.168.0.20
-SubnetMask 255.255.255.0 -Name “Scope for VMs” -State Active

② 追加したスコープを表示し、Scope ID を確認する
※ この演習では 192.168.0.0 と設定されているはず
PS C:¥>Get-DHCPServerV4Scope
③ 作成したスコープに DNS Server を追加する
PS C:¥> Set-DhcpServerV4ScopeOptionValue -ScopeID 192.168.0.0 -DnsServer 192.168.0.1

28
8. 仮想マシンの構成
ここでは既に OS がインストールされている仮想ハードディスクを使用して、新しいゲ
ストOSを作成します
ゲスト OS の作成
① ゲストOSの一覧を取得する
※何も表示されません
PS C:¥> Get-VM
② ゲストOS を作成する
この例では VM01 という名前のゲストOSを作成します。仮想マシンの世代は「第一世代」
としています。また、仮想ハードディスクの保存先は D:¥VMs¥VM01.vhd です。
PS C:¥> New-VM -Name “VM01”
-MemoryStartupBytes 1024MB
-VHDPath D:¥VMs¥VM01.vhd
-SwitchName “ExternalSwitch”
-Generation 1
-BootDevice IDE

29
③ 作成したゲストOS VM01 の設定値を確認する
PS C:¥> Get-VM -Name VM01 | FL
④ 動的メモリを有効にし、仮想CPUの割り当て数を 2 に変更する
PS C:¥> Set-VM -Name VM01 -ProcessorCount 2 -DynamicMemory
⑤ ゲストOSを起動する
PS C:¥> Start-VM VM01

30
ゲスト OS の初期設定(この部分だけゲストOS側で実施します)
この演習では、ゲスト OS として Sysprep が適用された Windows Server 2012 R2 を使用しています。
※評価版ダウンロードサイトからダウンロードした「VHD」ファイル
そのため、リモート(Hyper-V ホスト)からの管理を有効にするには、Hyper-V マネージャーからゲス
ト OS 「VM01」に接続して、以下の操作を行う必要があります。
•

•

OOBE セットアップ
• 言語の選択(規定値は英語です)
• 利用許諾への合意
• パスワードの設定(言語で En-US を選択した場合、キーボード配列は 101/102 となります。ご
注意ください)
パスワードとして P@ssw0rd を使用する場合、 101/102 キーボードの場合、「@」は [Shift] +
[2] となります。
ゲストOSの PowerShell コンソールから以下を実行してリモーティングを有効化

PS C:¥> Enable-PSRemoting -Force
•

ゲストOS の PowerShell コンソールから ネットワーク探索を有効化

PS C:¥> netsh advfirewall firewall set rule group=”network discovery” new enable=yes
31
ゲスト OS の環境設定を行う
※この操作は Hyper-V ホスト側でおこないます
① ゲストOSをリモート管理するために、Hyper-V ホスト側の TrustedHosts の設定を行う
PS C:¥> Set-Item WSMan:¥localhost¥Client¥TrustedHosts 192.168.0.* -Concatenate
② ゲストOSに接続するための資格情報を作成する
※ここではゲストOSのパスワードが P@ssw0rd であるとします
PS C:¥> $User = “Administrator”
PS C:¥> $Pass = ConvertTo-SecureString “P@ssw0rd” -AsPlainText -Force
PS C:¥> $Cred = New-Object System.Management.Automation.PSCredential $user, $pass
③ ゲストOSにリースされているIPアドレスを確認する
PS C:¥> Get-DhcpServerV4Lease -ScopeId 192.168.0.0

④ 作成したクレデンシャルを使用して、ゲストOSに接続する
※ ゲストOS VM01 には、DHCPサーバーより 192.168.0.11 がリースされているものとします

PS C:¥> Enter-PSSession 192.168.0.11 -Credential $Cred

32
⑤ ゲストOS のネットワークアダプター情報を確認する
(InterfaceIndex を確認してください)
※ゲストOSのセッションに接続したまま実行します
[192.168.0.11] :PS C:¥> Get-NetAapter
⑥ ゲストOS のIPアドレスを確認する(InterfaceIndex = 12 としています)
※PrefixOrigin が DHCPであることを確認してください
※ゲストOSのセッションに接続したまま実行します
[192.168.0.11] :PS C:¥> Get-NetIPAddress -InterfaceIndex 12 -AddressFamily IPv4
⑦ ゲスト OS の IP アドレスを 192.168.0.100 に設定する
※ゲストOSのセッションに接続したまま実行します
[192.168.0.11] :PS C:¥> New-NetIPAddress -InterfaceIndex 12 -IPAddress 192.168.0.100
-AddressFamily IPv4 -PrefixLength 24
このコマンドを実行すると ゲストOSのIPアドレス変更によってセッションが切断されます。
これは正しい動作です。自動的に再接続が試みられますが、[Ctrl]+[C] でキャンセルして
ください。
33
⑧ 再度ゲストOSに接続する
PS C:¥> $User = “Administrator”
PS C:¥> $Pass = ConvertTo-SecureString “P@ssw0rd” -AsPlainText -Force
PS C:¥> $Cred = New-Object System.Management.Automation.PSCredential $user, $pass

PS C:¥> Enter-PSSession 192.168.0.100 -Credential $Cred
[192.168.0.100] :PS C:¥>
⑨ DNSサーバーの設定を行う
※ゲストOSのセッションに接続したまま実行します
[192.168.0.100] PS C:¥>Set-DnsClientServerAddress -Interface 12 -ServerAddress 192.168.0.1

⑩ コンピューター名を変更する
※ゲストOSのセッションに接続したまま実行します
[192.168.0.100] :PS C:¥> Rename-Computer -NewName “HV01” -Force -Restart
⑪ セッションを閉じる
[192.168.0.100] :PS C:¥> Exit
PS C:¥>

34
⑫ VM01 を DNS に登録する
PS C:¥> Add-DnsServerResourceRecordA -Name VM01 -IPAddress 192.168.0.100
-ZoneName contoso.com
⑬ 再度ゲストOSに接続する
PS C:¥> $User = “Administrator”
PS C:¥> $Pass = ConvertTo-SecureString “P@ssw0rd” -AsPlainText -Force
PS C:¥> $Cred = New-Object System.Management.Automation.PSCredential $user, $pass
PS C:¥> Enter-PSSession 192.168.0.100 -Credential $Cred
[192.168.0.100] :PS C:¥>

35
⑫ VM01 を ドメインに参加させる
※ゲストOSのセッションに接続したまま実行します
[192.168.0.100] :PS C:¥> $Domain = “contoso.com”
[192.168.0.100] :PS C:¥> $Client = $Env:COMPUTERNAME
[192.168.0.100] :PS C:¥> $User = “Administrator”
[192.168.0.100] :PS C:¥> $Pass = ConvertTo-SecureString “P@ssw0rd” -AsPlainText -Force
[192.168.0.100] :PS C:¥> $Cred = New-Object System.Management.Automation.PSCredential $user ,
$pass
[192.168.0.100] :PS C:¥> $DomainUser = “Contoso¥Administrator”
[192.168.0.100] :PS C:¥> $DomainPass = ConvertTo-SecureString “P@ssw0rd” -AsPlainText -Force
[192.168.0.100] :PS C:¥> $DomainCred = New-Object System.Management.Automation.PSCredential
$DomainUser , $DomainPass
[192.168.0.100] :PS C:¥> Add-Computer -ComputerName $Clienit
-LocalCredential $Cred
-Credential $DomainCred
-DomainName $Domain

⑬ セッションを閉じる
[192.168.0.100] :PS C:¥> Exit
PS C:¥>

36
⑫ 仮想マシン VM01 を再起動する
PS C:¥> Restart-VM VM01 -Force
⑬ 資格情報なしで VM01 に接続できることを確認する
PS C:¥> Enter-PSSession VM01
[VM01]: PS C:¥>

⑭ セッションを閉じる
[VM01]: PS C:¥> Exit
PS C:¥>

37
第2部 ライブマイグレーション
このセクションでは、第1部で作成した環境に Hyper-V サーバーをもう1台加
え、ライブマイグレーションが行える環境を構築します。
もちろん、各種設定は Windows PowerShell のみで行います。

38
以降の作業ではライブマイグレーションを行うため、Hyper-V がインストールされた2台目
の Windows Server が必要となります。ここでは、Hyper-V Server 2012 R2 を使用してい
ます。
2台目の Windows Server
9. Hyper-V Server 2012 R2 のインストール
10. Windows PowerShell の基本設定
 実行ポリシーの設定
 リモーティング(リモート管理)の設定
11. Windows Server の基本設定
 IP アドレスの設定
 DNS の設定
 コンピューター名の設定
 Active Directory ドメインへの参加
 Windows Update の実行

12. Hyper-V の構成
 PowerShell モジュールのインストール
 Hyper-V ホストの規定値を変更する
•
仮想ハードディスクの保存先
•
仮想マシンの保存先
 Hyper-V レプリカの有効化
 仮想スイッチの作成
ライブマイグレーションの設定を実行
※1台目のサーバー HV01 で実施
13.

ライブマイグレーションの環境設定
 ライブマイグレーションの有効化
 仮想マシンの「プロセッサの互換性」の設定
 委任の設定

14.

ライブマイグレーションの実行

39
9. Hyper-V Server 2012 R2 のインストール
2台目の PC を用意し、Hyper-V がインストールされた Windows Server
2012 R2 を用意してください。
ここでは Hyper-V Server 2012 R2 を使用します。
Hyper-V Server 2012 R2 をインストールすると自動的に Hyper-V もイ
ンストールされます。

40
10. Windows PowerShell の基本設定
Hype-V Server 2012 R2 では統合スクリプト環境(ISE)を使用することはできません。
スクリプト環境の起動
①
Hyper-V Server 2012 R2 にサインインする
②
コマンドプロンプトで以下のコマンドを実行して PowerShell コンソールを起動する。プロン
プトが 「PS」に変わったことを確認してください。

C:¥> PowerShell
PS C:¥>
実行ポリシーの設定
①
以下のコマンドレットを実行し、ローカルで作成したスクリプトは署名なしで実行できるよう
に実行ポリシーを変更する

PS C:¥>Set-ExecutionPolicy RemoteSigned
リモーティングの有効化
①
以下のコマンドレットを実行し、PowerShell によるリモート管理を有効にする

PS C:¥>Enable-PSRemoting –force

41
11. Hyper-V Server の基本設定
IP アドレスの設定
① ネットワークアダプタの一覧を表示し、IPアドレスを設定するネットワークカードの
InterfaceIndex を特定する
PS C:¥> Get-NetAdapter | FT Name, InterfaceIndex, InterfaceDescription
② ターゲットとなるネットワークアダプターの情報を確認する(以下の例では
InterfaceIndex = 13 としている)
PS C:¥> Get-NetIPAddress -InterfaceIndex 13 -AddressFamily IPv4
③ 既定では DHCP を利用するように設定されているので、以下のコマンドを使用して静的な
IP アドレスを設定する

PS C:¥>New-NetIPAddress -InterfaceIndex 13 -IPAddress 192.168.0.2
-AddressFamily IPv4 -PrefixLength 24
※ DefaultGateway は必要に応じて
※ 既存の静的アドレスを変更する場合には Set-NetIPAddress を使用する

42
DNS の設定
① DNS サーバーのアドレスを設定する
PS C:¥>Set-DnsClientServerAddress -Interface 13 -ServerAddress 192.168.0.1
※ 複数の DNS サーバーが存在する場合にはカンマで区切って指定する

参考

IP アドレスの削除
PS C:¥> Remove-IPAddress -InterfaceIndex 24 -AddressFamily IPv4
DNSの設定を削除する
PS C:¥> Set-DnsClientServerAddress -Interface 24 -ResetServerAddress
DHCP を有効にする
PS C:¥> Set-NetIPInterface -InterfaceIndex 24 -Dhcp Enabled
43
ローカルコンピューター名を設定する
① 現在のコンピューター名を取得する
PS C:¥> $Env:ComputerName
② 新しいコンピューター名を設定し、再起動する
PS C:¥> Rename-Computer -NewName “HV02” -Force -Restart
③ 再起動後サインインして、再度 PowerShell コンソールを起動する

C:¥> PowerShell
PS C:¥>

44
Hyper-V Server “HV02” を Contoso ドメインに参加させる
① ドメインに参加させる
PS C:¥> $Domain = “contoso.com”
PS C:¥> $Client = $Env:COMPUTERNAME
PS C:¥> $User = “Administrator”
PS C:¥> $Pass = ConvertTo-SecureString “P@ssw0rd” -AsPlainText -Force
PS C:¥> $Cred = New-Object System.Management.Automation.PSCredential $user , $pass
PS C:¥> $DomainUser = “Contoso¥Administrator”
PS C:¥> $DomainPass = ConvertTo-SecureString “P@ssw0rd” -AsPlainText -Force
PS C:¥> $DomainCred = New-Object System.Management.Automation.PSCredential
$DomainUser , $DomainPass
PS C:¥> Add-Computer -ComputerName $Clienit
-LocalCredential $Cred
-Credential $DomainCred
-DomainName $Domain

② コンピューターを再起動する
PS C:¥> Restert-Computer
③ 再起動後、ドメインアカウント(contoso¥administrator)でサインインしてください

45
Windows Update を実行する
① 以下のコマンドを実行して、Windows Update PowerShell Module をダウンロードする
PS C:¥> $web = New-Object System.Net.WebClient
PS C:¥> $zipfile = "http://gallery.technet.microsoft.com/scriptcenter/”
PS C:¥> $zipfile = $zipfile + “2d191bcd-3308-4edd-9de2-88dff796b0bc/file/41459/28/PSWindowsUpdate.zip"
PS C:¥> $web.DownloadFile($zipfile, "C:¥tmp¥PSWindowsUpdate.zip")
上記コマンドでダウンロードできない場合には、以下のサイトから Windows Update
PowerShell Module の最新版をダウンロードしてください
http://gallery.technet.microsoft.com/scriptcenter/2d191bcd-3308-4edd-9de2-88dff796b0bc
※「Windows Update PowerShell Modules」で検索すればヒットします
② 以下のコマンドを使用して、ダウンロードした PSWindowsUpdate.zip ファイルを適当な場所に
展開する。ここでは C:¥tmp フォルダに展開しています。

PS C:¥> Add-Type -AssemblyName System.IO.Compression.FileSystem
PS C:¥> $ZipFile = Get-Item C:¥tmp¥PSWindowsUpdate.zip
PS C:¥> [IO.Compression.ZipFile]::ExtractToDirectory( $ZipFile, ‘C:¥tmp’ )
③ Dir コマンドで、 PSWindowsUpdate フォルダが作成されていることを確認
46
④ 以下のコマンドを実行し、フォルダの中に格納されているすべてのファイルの「ブロック
解除」を行う。この操作はファイルのプロパティ画面から「ブロックの解除」を行うのと
同様である。
PS C:¥>Unblock-File <ファイルの保存先>¥*.*

(例)
PS C:¥>Unblock-File c:¥tmp¥PSWindowsUpdate¥*.*
⑤ PowerShell モジュールの格納場所を確認する
PS C:¥>$env:PSModulePath
C:¥Users¥Administrator¥Documents¥WindowsPowerShell¥Modules;C:¥windows¥system32¥Wind
owsPowerShell¥v1.0¥Modules¥;C:¥Program Files (x86)¥Microsoft SDKs¥Windows
Azure¥PowerShell¥

⑥ 既定では C:¥Users¥junichia¥Documents¥WindowsPowerShell¥Modules が存在しない
ので、以下のコマンドで PowerShell モジュールの格納場所を作成する
PS C:¥> md C:¥Users¥Administrator¥Documents¥WindowsPowerShell¥Modules

47
⑦ 以下のコマンドを実行し PSWindowsUpdate フォルダーを
C:¥Users¥Administrator¥Documents¥WindowsPowerShell¥Modules 配下に移動する
以下の例では PSWindowsUpdate フォルダーは C:¥tmp にあるものとしている
PS C:¥> Move C:¥tmp¥PSWindowsUpdate C:¥Users¥Administrator¥Documents
¥WindowsPowerShell¥Modules
⑧ PSWindowsUpdate モジュールを読み込む
PS C:¥> Import-Module PSWindowsUpdate
⑨ Windows Update を実行する
PS C:¥> Get-WUInstall -AcceptAll

48
12. Hyper-V の構成
Hyper-V Server には既にHyper-Vの役割がインストールされていますが、PowerShell 管理
用モジュールはインストールされていません。ここでは管理モジュールをインストールします。
Windows PowerShell 用 Hyper-V モジュールをインストールする
① 以下のコマンドで現在インストールされている役割と機能の一覧を参照する

PS C:¥> Get-WindowsFeature
② 以下のコマンドを実行して、Windows PowerShell 用 Hyper-V モジュールをインストー
ルする
PS C:¥> Add-WindowsFeature Hyper-V-PowerShell -IncludeAllSubFeature
③ Hyper-V 関連のコマンドレットを確認する

PS C:¥> Get-Command -Module Hyper-V
49
Hyper-V ホストの設定値を変更する
① Hyper-V ホストの規定値を確認する

PS C:¥> Get-VMHost | FL
② 仮想ハードディスクの既定の保存先を設定する
※以下の例では仮想ハードディスクの既定の保存先を E:¥VM に指定しています

PS C:¥> Set-VMHost -VirtualHardDiskPath E:¥VM
③ 仮想ハードディスクの構成ファイルの既定の保存先を設定する

PS C:¥> Set-VMHost -VirtualMachinePath E:¥VM

50
Hyper-Vレプリカを有効にする
① Hyper-V レプリカの設定値を確認する

PS C:¥> Get-VMReplicationServer | FL
② Hyper-V レプリカを有効にし、認証タイプを Kerberos にする

PS C:¥> Set-VMReplicationServer -ReplicationEnabled $True
-AllowedAuthenticationType Kerberos
③ どんなサーバーからの複製も受け入れ、複製の保存先を E:¥VM に設定する

PS C:¥> Set-VMReplicationServer -ReplicationAllowedFromAnyServer $True
-DefaultStorageLocation E:¥VM
④ Windows Firewall の受信規則を確認する

PS C:¥> Get-NetFirewallRule -Direction Inbound
51
⑤ Windows Firewall の受信規則の中から、Hyper-V レプリカに関する設定を確認する

PS C:¥> Get-NetFirewallRule -Direction Inbound -Desctiption *レプリカ*
※ HTTP と HTTPS に関する規則が存在することがわかります
※ それぞれ、ルール名で保存されています
HTTP
: VIRT-HVRHHTTPL-In-TCP-NoScope
HTTPS : VIRT-HVRHHTTPSL-In-TCP-NoScope
⑥ “Hyper-V レプリカ HTTP リスナー(TCP受信)”規則を有効にする

PS C:¥> Set-NetFirewallRule -Name “VIRT-HVRHTTPL-In-TCP-NoScope”
-Enabled True
$ は必要ありません

52
仮想スイッチの作成
ライブマイグレーションを実行するには、HV01と同じ名前の仮想スイッチを作成しておく必
要があります)
① ネットワークアダプターの一覧を表示し、外部仮想スイッチにバインドするネットワーク
アダプターの Name 値を確認する
PS C:¥> Get-NetAdapter | FL
② 新しい外部スイッチを “ExternalSwitch” という名前で作成する。以下の例ではバインド
先のネットワークアダプタ名は“イーサネット”として指定している。
PS C:¥> New-VMSwitch -Name “ExternalSwitch” -NetAdapterInterName “イーサネット”
-AllowManagementOS $True
③ ②で確認したHyper-V ホストの NIC が仮想化され、“ExternalSwitch”に接続されたこと
を確認する

PS C:¥> Get-NetAdapter | FL
※ “vEthernet (ExternalSwitch)” という仮想NIC が新たに作成されたことを確認してく
ださい

53
⑤ 仮想スイッチ ExternalSwitch が作成されたことを確認する

PS C:¥> Get-VMSwitch

54
13.ライブマイグレーションの有効化と実行
ここまでの作業で以下のような環境が構築できました。
ここからは HV01 と HV02 間でライブマイグレーションを行うための設定をしていきます。
ここからの作業は HV01 上の PowerShell ISE から実行します。

Active Directory ドメイン Contoso.com
物理マシン

物理マシン
Windows Server 2012 R2

Hyper-V Server 2012 R2

(GUI使用サーバー)

HV01 192.168.0.1
•
•
•
•

Hyper-V
AD DS
DNS
DHCP
仮想スイッチ
ExternalSwitch

仮想マシン
Windows Server 2012 R2

HV02 192.168.0.2
•

Hyper-V

VM01 192.168.0.3
仮想スイッチ
ExternalSwitch
55
ここからの作業は HV01 上から実行します。
Hyper-V ホストのライブマイグレーションを有効にする
① HV01 と HV02 のライブマイグレーションを有効にする
PS C:¥> Enable-VMMigration -ComputerName HV01, HV02
②

任意のネットワークカードを使用してライブマイグレーションを受信できるようにする
Set-VMHost -ComputerName HV01, HV02 -UseAnyNetworkForMigration $True

③

パフォーマンスオプションを「圧縮」モードに設定する
Set-VMHost -ComputerName HV01, HV02 -VirtualMachineMigrationPerformanceOption
Compression

④

ライブマイグレーションの認証プロトコルを「Kerberos」に設定する
Set-VMHost -ComputerName HV01, HV02 -VirtualMachineMigrationAuthenticationType
Kerberos
56
⑤

同時に移行できる仮想マシンの数を 10 に変更する
PC C:¥> Set-VMHost -ComputerName HV01, HV02 -MaximumVirtualMachineMigrations 10

移行の対象となる仮想マシンの「プロセッサの互換性」を設定する
ライブマイグレーションに使用する物理コンピューターが異なるプロセッサバージョンを搭載している場
合には、仮想マシンごとに「プロセッサバージョンが異なる物理コンピューターへ移行する」を有効にし
て置く必要があります。
① 仮想マシンをシャットダウンする

PS C:¥> Stop-VM -ComputerName HV01 -Name VM01
② HV01 上の VM01 の「プロセッサバージョンが異なる物理コンピューターへ移行する」を有効にする

PS C:¥> Set-VMProcessor -ComputerName HV01 -VMName VM01
-CompatibilityForMigrationEnabled $True
③ 仮想マシンを起動する

PS C:¥> Start-VM -ComputerName HV01 -Name VM01
57
Kerberos 委任の設定を行う

委任の設定は、ライブマイグレーションを行う全てのコンピューター間で行う必要がありま
す。また、委任を許可する対象となるのは各コンピューターが持つ以下の 2 つのサービスで
す。
• CIFS
• Microsoft Virtual System Migration Service
Hyper-V over SMB を使用している場合にはファイルサーバーの CIFS も委任の対象となる
ことに注意してください。
今回は、HV01 と HV02 間での委任を許可するように設定します。

HV01

委任

HV02

CIFS

CIFS

Microsoft Virtual System
Migration Service

Microsoft Virtual System
Migration Service
58
① HV01 に HV02 CIFS サービスへの委任を許可する
PS C:¥> $TargetServer = “HV01”
PS C:¥> $TargetServerDN = (Get-ADComputer $TargetServer)
PS C:¥> $HVServer = Get-ADComputer HV02
PS C:¥> $HVServerName = $HVServer.Name
PS C:¥> $HVServerDNS = $HVServer.DNSHostName
PS C:¥> Set-ADObject -Identity $TargetServerDN -Add @{ “msDS-AllowedToDelegateTo” =
“cifs/$HVServerName”, “cifs/$HVServerDNS” }
② HV02 に HV01 CIFS サービスへの委任を許可する
PS C:¥> $TargetServer = “HV02”
PS C:¥> $TargetServerDN = (Get-ADComputer $TargetServer)
PS C:¥> $HVServer = Get-ADComputer HV01
PS C:¥> $HVServerName = $HVServer.Name
PS C:¥> $HVServerDNS = $HVServer.DNSHostName
PS C:¥> Set-ADObject -Identity $TargetServerDN -Add @{ “msDS-AllowedToDelegateTo” =
“cifs/$HVServerName”, “cifs/$HVServerDNS” }
59
③ HV01 に HV02 Microsoft Virtual System Migration サービスへの委任を許可する
PS C:¥> $ServiceName = “Microsoft Virtual System Migration Service”
PS C:¥> $TargetServer = “HV01”
PS C:¥> $TargetServerDN = (Get-ADComputer $TargetServer)
PS C:¥> $HVServer = Get-ADComputer HV02
PS C:¥> $HVServerName = $HVServer.Name
PS C:¥> $HVServerDNS = $HVServer.DNSHostName
PS C:¥> Set-ADObject -Identity $TargetServerDN -Add @{ “msDS-AllowedToDelegateTo” =
“$ServiceName/$HVServerName”, “$ServiceName/$HVServerDNS” }
④ HV02 に HV01 Microsoft Virtual System Migration サービスへの委任を許可する

PS C:¥> $ServiceName = “Microsoft Virtual System Migration Service”
PS C:¥> $TargetServer = “HV02”
PS C:¥> $TargetServerDN = (Get-ADComputer $TargetServer)
PS C:¥> $HVServer = Get-ADComputer HV01
PS C:¥> $HVServerName = $HVServer.Name
PS C:¥> $HVServerDNS = $HVServer.DNSHostName
PS C:¥> Set-ADObject -Identity $TargetServerDN -Add @{ “msDS-AllowedToDelegateTo” =
“$ServiceName/$HVServerName”, “$ServiceName/$HVServerDNS” }

60
⑤ HV02 を再起動する(再起動が完了するまで待ち合せる)
※委任の設定を適用するためにコンピューターを再起動する必要があります
PS C:¥> Restart-Computer -ComputerName HV02 -Wait -Force
⑥ HV01 を再起動する
※HV02の再起動が完了してから実行してください。
PS C:¥> Restart-Computer -Force
コンピューターアカウントに移行先となるストレージへのアクセス権を与える
※ライブマイグレーションはコンピューターアカウントによる処理であるため、移行先のス
トレージ対してコンピューターアカウントによるフルアクセス権が必要です。

61
ライブマイグレーションを実行する
今回は共有ボリュームや共有フォルダを使用しない シェアード ナシング ライブ マイグ
レーション を実行してみます。
① 仮想マシン VM01 が HV01 上で動作していることを確認
PS C:¥> Get-VM -ComputerName HV01
② 仮想マシン VM01 を HV02 に移動する
※HV02 上の E:¥VM¥VM01 に仮想ハードディスクごと移動するものとします
PS C:¥> Move-VM -ComputerName HV01 -Name VM01 -DestinationHost HV02
-IncludeStorage -DestinationStoragePath E:¥VM¥VM01
統合スクリプト環境上で実行すると、画面上に移行のプログレスバーが表示されます。
③ 仮想マシン VM01 が HV02 上で動作していることを確認する
PS C:¥> Get-VM -ComputerName HV01
62
第3部 エキスパートを目指す方へ
ここからは、Hyper-V だけに特化した手法ではなく、Windows PowerShell の
基本的なテクニックから、バックグラウンドジョブ、ワークフローなどの高度な
テクニックまでを解説します。
Visual Studioからの呼び出し方法についても解説しています。
63
第3部 ~ PowerShell エキスパートを目指す方へ
Windows PowerShell には他にもさまざまなテクニックが用意されています。特に、バック
グラウンドジョブの概念はシステム管理を行う上で重要です。

Part1 基礎編
1.Windows PowerShell の位置づけ
2.基本的なコマンドレットと書式の基礎
3.基本的な文法とスクリプトの作り方
4.Tips

Part4 ワークフロー編
11.
12.
13.
14.

Windows PowerShell Workflow とは
Windows PowerShell Workflow の基礎
ワークフロー特有の記述
ワークフロージョブとデータの永続化

Part2 リモーティング編
5.リモーティングの準備と基礎
6.-ComputerNameを使用したリモート操作
7.PS セッションとは
8.コネクションの永続化と再利用可能なPSセッション
9.Windows PowerShell Web Access(PSWA)
Part3 バックグラウンドジョブ
10. バックグラウンドジョブ

Part5 開発者編
15.
16.
17.
18.

開発者にとっての Windows PowerShell とは
開発者のための Windows PowerShell 基礎知識
開発者として必要な情報の取得
コマンドレット以外からオブジェクトのインスタン
スを作成する
19. Visual Studio(C#)から PowerShell を呼び出す
64
Part 1 基礎編

65
基礎編
1. Windows PowerShell の位置づけ

66
Windows PowerShell の位置づけ
Windows Familiar – インフラエンジニアから見ると
• Windows Script(WSH)に変わる管理プラットフォーム
• 高機能なスクリプティング機能による自動管理
• WinRM を介したリモートサーバー管理
Windows Familiar – 開発者 から見ると
• 高機能なクラスライブラリ
• コーディング、テスティングの大幅なコスト削減
Non-Windows Familiar から見ると
• OMI(Open Management Infrastructure)を実装したリモートサーバー
• 手元のプラットフォームからリモート管理が可能
• 使い慣れた言語からリモート管理が可能
67
代表的なスクリプト言語
バッチファイル(拡張子 .bat)

OSに合わせて継続的なエンハンス

MS-DOS時代から使われてきたコマンドシェル上のスクリプト。脈々と現代に引き継がれて
おり、利用者が多い。豊富なコマンド群によって支えられており、案外使い出がある。複数
のスクリプトを取りまとめる役割としても便利。

Visual Basic のスクリプト版。「Visual」とあるが、Visual ではない。わかりやすい文法と、
緩い規則によって根強いファンが多い。亜種として VBA もあるが微妙に文法は異なる。

Jscript(拡張子 .js)

今後エンハンスの予定は無い

JavaScript のMS 実装版として、VBScript とともに登場。JavaScript を Microsoft の独自
仕様によって拡張することで、汎用性を増している。

Windows
Script

今後エンハンスの予定は無い

VBScript(拡張子 .vbs)

PowerShell(拡張子 .ps1)
いわずと知れた高機能スクリプト言語。.NET Framework が使えると言うメリットから、利
用者は爆発的に増殖中。多くの製品がPowerShell用のコマンドレットを提供しており、
Windows Script Host は Server Coreのメニュー程度でしかお目にかかれなくなりつつある。
68
スクリプトの実行環境
bat

exe

VBScript

JScript

PowerShell エンジン

COM
Script Engine

cmd/
command

PowerShell スクリプト

Windows Script Host
Cscript.exe
Wscript.exe

C
O
M

.NET Framework
Class Library
CLR(共通言語ランタイム)

Windows

69
コマンドシェルの進化と機能の包含
DOS/
Win31

Win9x/
Me

NT

2000

XP/2003
Vista/2008

Win7/
2008R2

8

低機能
command.com
cmd.exe

Windows Script Host

高機能

PowerShell 上では
bat/vbs/js も実行可能

100

Windows PowerShell

コマンドレットの数
200
約
2300

70
VBScript vs PowerShell
Exchange 2003 (VBScript)
メール
ボックス
統計

Exchange 2007(PowerShell)

Set listExchange_Mailboxs =
GetObject("winmgmts:{impersonationLevel=impersonate}!¥¥COMPUTERNAME¥ROOT¥MicrosoftExchangeV2").InstancesOf("Excha
nge_Mailbox")

get-mailboxstatistics
–server $servername

For Each objExchange_Mailbox in listExchange_Mailboxs
WScript.echo "AssocContentCount
=” + objExchange_Mailbox.AssocContentCount
WScript.echo " DateDiscoveredAbsentInDS =” + objExchange_Mailbox.DateDiscoveredAbsentInDS
WScript.echo " DeletedMessageSizeExtended =" + objExchange_Mailbox.DeletedMessageSizeExtended
WScript.echo " LastLoggedOnUserAccount =" + objExchange_Mailbox.LastLoggedOnUserAccount
WScript.echo " LastLogoffTime =" + objExchange_Mailbox.LastLogoffTime
WScript.echo " LastLogonTime
=" + objExchange_Mailbox.LastLogonTime
WScript.echo " LegacyDN =" + objExchange_Mailbox.LegacyDN
WScript.echo " MailboxDisplayName =” + objExchange_Mailbox. MailboxDisplayName
WScript.echo " MailboxGUID
=" + objExchange_Mailbox.MailboxGUID
WScript.echo " ServerName
=" + objExchange_Mailbox.ServerName
WScript.echo " Size =" + objExchange_Mailbox.Size
WScript.echo " StorageGroupName
=" + objExchange_Mailbox.StorageGroupName
WScript.echo " StorageLimitInfo
=" + objExchange_Mailbox.StorageLimitInfo
WScript.echo " StoreName
=" + objExchange_Mailbox.StoreName
WScript.echo " TotalItems
=" + objExchange_Mailbox.TotalItems
Next

データ
ベース
管理

Dim StorGroup as New CDOEXM.StorageGroup
StorGroup.DataSource.Open "LDAP://" + DCServer + "/ CN=First Storage Group,CN=InformationStore,CN=" +
Server + ",CN=Servers,CN=First Administrative Group, CN=Administrative Groups,CN=First Organization,
CN=Microsoft Exchange,CN=Services, CN=Configuration," + DomainName
StorGroup.MoveLogFiles("C:¥newlogPath", 0)

受信者
管理

Dim objMailbox As CDOEXM.IMailboxStore
Set objMailbox = GetObject("LDAP://" + DCServer + "CN=FOO,CN=users," + DomainName)

objMailbox.CreateMailbox "LDAP://" + DCServer + "/CN=Private MDB,CN=First Storage
Group,CN=InformationStore,CN=" + Server + ",CN=Servers,CN=First Administrative Group, CN=Administrative
Groups,CN=First Organization, CN=Microsoft Exchange,CN=Services, CN=Configuration," + DomainName

move-storagegrouppath
-identity "First Storage
Group"
–log "C:¥newlogPath"
enable-mailbox
-identity domain¥FOO
–database "First Storage
Group¥Private MDB"

71
WBEM - Web Based Enterprise Management
http://www.dmtf.org/standards/wbem
マイクロソフトやインテル、シスコシステムズ、旧コンパック・コンピュータなどによって提案され、標準化
団体DMTF(Desktop Management Task Force)によって標準化された規格である。その名の通り、「Web ベー
スのエンタープライズ管理」のための仕様であり、ネットワーク上に存在するサーバーや OS、ネットワーク
機器などの統合管理に必要なプロトコルやデータ構造を規定する。要するに、従来の SNMP(Simple Network
Management Protocol)や syslog に代わる、HTTP と XML をベースとした新世代のネットワーク管理プロトコ
ルである。すでにマイクロソフト Windows や HP-UX などのおもなOSをはじめ、サーバー製品、ストレージ製
品、ネットワーク機器、そしてHP OpenView をはじめとするネットワーク管理ツールにおいて、業界標準の
ネットワーク管理プロトコルとしてサポートされている。
出典 http://h50146.www5.hp.com/products/software/oe/hpux/developer/column/smh_02/

72
HP における
WBEM の実装

出典 http://h50146.www5.hp.com/products/software/oe/hpux/developer/column/smh_02/

73
Solaris における WBEM の実装

出典
http://docs.oracle.com/cd/E19455-01/8067119/6jg10nqef/index.html

74
Microsoft の
実装

75
History of Microsoft Management Framework
2000年 Windows 2000 に WMI をインプリメント
– 29 WMI プロバイダを含む
– 同時に Windows NT, 98, 95 用の WMI もダウンロード開始
(15 WMI プロバイダー)
※どちらかといえば ”プロバイダー” 提供ベンダー向けのテクノロジー
※ Windows ファミリ間の相互運用性に留まる
WS-Management とは Web Services
for Management のこと。Windows
Server ではない。

2005年 WS-Management が DMTF へ提出、承認
2007年 Windows Server 2008 に WS-Management を実装(WinRM)
• HTTP/S を介して他プラットフォームとの接続が可能に
• Windows PowerShell で WinRM を介したリモートサーバー管理が標準手法
として取り込まれる

76
Windows Management Framework
http://www.microsoft.com/downloads/
OS

WMF 3.0

WMF 4.0

Windows 7

SP1 以降

SP1 以降

Windows Server 2008

SP2 以降

×

Windows Server 2008 R2

SP1 以降

SP1 以降

Windows 8

標準

○

Windows 8.1

ー

標準

Windows Server 2012

標準

○

Windows Server 2012 R2

ー

標準

前提条件
• Windows PowerShell ISE がインストールされていること
• Microsoft .NET Framework 4.0 がインストールされていること

77
Windows Management Framework
IT Pro

IT Developer

Solution
Developer

Service
Provider

Windows Management Framework

開
発
誰が作るの?

標準化されたアクセス Windows PowerShell
標準化されたプロトコル

WS-Management(WinRM)
(Web Service for Management)

標準化された
CIMOM、SMI-S
オブジェクトモデル

CPU

他の
プラットフォーム

http

WS-Man
CIMOM、
SMI-S

Storage Network Devices
SMI-S(Storage Management Initiative - Specification)

78
The Open Group Membership 2012/10/5 時点
Platinum - 5
• Capgemini Netherlands
• Hewlett-Packard USA
• IBM USA
• Kingdee Software (China) Co. Ltd China
• Oracle Corporation USA
Gold – 44(抜粋)
• Microsoft Corporation USA
• NTT Data Corporation
• ReGIS Inc.
Silver – 256 (Japan のみ抜粋)
• Asahi Techneion Co., Ltd
• AXE, Inc.
• eflow Inc.
• Information-technology Promotion Agency,
Japan
• Japan Aerospace Exploration Agency (JAXA)
• Mizuho Information and Research Institute, Inc.

• Nissan Motor Co., Ltd.
• Nomura Research Institute, Ltd.
• Rococo Co Ltd
• SIOS Technology, Inc.
• Sony CSL
• Symphony Ltd.
Academic – 38 (Japan のみ抜粋)
• Aoyama Gakuin University
• Kyoto University
• Nagoya University
• The University of Tokyo Information Technology
Center

79
Open Management Infrastructure(nanoWBEM)
• オープンソース版 CIM Server
• 軽量 250KB、C で開発されている
Windows PowerShell、その他

WinRM Client
WinRM Server
WS-Management(WinRM)
Providers : CIMOM,SMI-S

CPU Storage Network Devices

各種言語

OMI Client
OMI Server
WS-Management(OMI)
Providers : CIMOM,SMI-S

CPU Storage Network Devices
80
81
OMI サポート プラットフォーム
• HP-UX 11i v2 and v3 (PA-RISC and IA64)
• Sun Solaris 8 and 9 (SPARC) and Solaris 10 (SPARC and x86)
• Red Hat Enterprise Linux 4 (x86/x64) and 5 (x86/x64) Server

• Novell SUSE Linux Enterprise Server 9 (x86) and 10 SP1 (x86/x64)
• IBM AIX v5.3 and v6.1 (POWER)

• MacOS 10.5 (Intel)
• Windows(限定的)
最新版は OMI Source - v.1.0.7a (2013年5月)
82
http://www.opengroup.org/

83
マイクロソフト製品と Windows PowerShell の関係
• 製品ごとに専用の”コマンドレット”が用意されている
• 多くの管理 GUI は裏でコマンドレットを呼んでいる
• インフラ担当者に、各製品への”標準化されたアクセス方法”を提供する
Active Directory
管理センター

PowerShell
コンソール

System Center
Virtual Machine Manager

Active Directory
PowerShell Module

Hyper-V
PowerShell Module

Active Directory

Hyper-V

84
Windows PowerShell ISE
• Powershell_ise.exe
• Windows PowerShell 専用エディタ
• IntelliSense に対応

スクリプトエディタ

スクリプト実行画面
コマンドレットを直接実行

英語圏の人たちは”アイス”
と読むらしい

コ
マ
ン
ド
レ
ッ
ト
検
索
85
基礎編
2. 基本的なコマンドレットと書式の基礎

86
事前準備
•

コンソールの環境設定
• 簡易編集を有効に

•

エクスプローラー(フォルダー)の環境設定
• 「拡張子を表示しない」を無効に

•

実行ポリシーの設定
※オンプレミスの”署名無しスクリプト”を実行できるようにする
PS C:¥>Set-ExecutionPolicy RemoteSigned

•

リモートからの操作を有効にする(リモーティングの有効化)
PS C:¥>Enable-PSRemoting –force

•

必要に応じて自分専用の初期設定ファイルを作成(規定では存在しない)
PS C:¥>notepad $profile

87
実行ポリシーの設定~ Set-ExecutionPolicy
http://technet.microsoft.com/ja-jp/library/dd347628.aspx
•
•

“管理者として実行” する必要がある
実行ポリシー
–

–
–
–

–

“ポリシーの設定”は、規定では
Restricted:制限つき (オペレーターモード)(規定値)
コンピューター全体に影響する。
•
対話形式のみ
適用範囲を制限するには、
•
スクリプトは実行できない
Scope も同時に定義する。
AllSigned:署名
•
スクリプトは、信頼された発行元による署名が必要
RemoteSigned:リモートの署名
•
“インターネットゾーン” のスクリプトは信頼された発行元による署名が必要
Unrestricted:無制限
•
すべてのスクリプトを実行可能
•
リモートのスクリプトについては常に警告
Bypass:バイパス
•
何もブロックされず警告も表示されない
88
コマンドレットの構造
<操作>-<ターゲット>
(例)
Checkpoint-VM
Compare-VM
Export-VM
Get-VM
Import-VM
Measure-VM
Move-VM
New-VM
Remove-VM

Rename-VM
Repair-VM
Restart-VM
Resume-VM
Save-VM
Set-VM
Start-VM
Stop-VM
Suspend-VM
89
コマンドレットとモジュール
• PowerShell の実行単位は「コマンドレット」
• コマンドレットはモジュール(Module)によって提供される
• モジュールが読み込まれていないとコマンドレットを使用することは
できない(Import-Module <モジュール名>)
CmdLet
CmdLet
CmdLet
CmdLet

Module
構造

Add-Computer
Add-Content
Checkpoint-Computer
Clear-Content
Clear-EventLog
Clear-Item
Clear-ItemProperty
Complete-Transaction

Microsoft.PowerShell.
Management

規定のモジュール

Add-VMDvdDrive
Add-VMFibreChannelHba
Add-VMHardDiskDrive
Add-VMMigrationNetwork
Add-VMNetworkAdapter
Add-VMNetworkAdapterAcl
・
・
・

Hyper-V
例
90
モジュールに関するコマンドレット
• 読み込まれているモジュール一覧の取得
PS C:¥> Get-Module

• 使用可能なモジュール一覧の取得
PS C:¥> Get-Module

-ListAvailable

• モジュールを読み込む
PS C:¥> Import-Module <モジュール名>
PS C:¥> Import-Module Hyper-V

• 使用可能なモジュールを全て読み込む
PS C:¥> Import-Module (Get-Module -ListAvailable).Name

91
コマンドレット情報を取得する
• 使用可能なコマンドレット一覧を取得する
PS C:¥> Get-Command

• “-VM” という文字列を含むコマンドレットの一覧
PS C:¥> Get-Command *-vm* -CommandType

Cmdlet

• 特定のモジュール内のコマンドレット一覧
PS C:¥> Get-Command -Module Hyper-V

•

コマンドレットの書式
PS C:¥> Get-Help <コマンドレット> -detailed
PS C:¥> Get-Help Move-VM -detailed
92
エイリアス
コマンドレットにはエイリアスが用意されているものがある
• 入力の簡易化
• DOSコマンドやLinux系シェルとの互換性
• エイリアスの一覧を取得する
PS C:¥> Get-Alias

93
コマンドレットの戻り値
• コマンドレットの戻り値は“オブジェクト”である
• PowerShell はオブジェクトを操作する言語
• 戻り値を「どのように操作できるか」を知っていることが重要
• オブジェクトには「メソッド」と「プロパティ」が用意されている
戻り値を直接、”操作”することが可能

Get-Service

サービス一覧

stop()

オブジェクト

94
もしも”オブジェクト”が自転車だったら...
プロパティ

メソッド
操作

プロパティ
色

メソッド
ペダルをこいで前に進む

サイズ

ハンドルを右に切る

型

ハンドルを左に切る

ブランド

フロント ブレーキをかける

パーツ

リア ブレーキをかける

95
もしも”オブジェクト”が「Windows のサービス」だったら。。。

プロパティ

メソッド

DisplayName

Stop()

MachineName

Start()

Status
DependentServices

Windows
サービス

Pause()

96
メソッドとプロパティを調べるには
• コマンドレットのメソッドとプロパティを表示
<コマンドレット> | get-member
<コマンドレット> | get-member | sort-object Name | format-list

※ COMのメンバーも取得できる
New-Object -com scripting.filesystemobject | Get-Member
• サービスに対して行える操作を取得する
Get-Service | Get-Member

• 仮想マシンに対して行える操作を取得する
Get-VM | Get-Member
97
TIPS オブジェクトであるということは...
PS C:¥>$a = “abc”
#普通ならば $a は”文字列” になるけれど...
#オブジェクトだからメソッドとプロパティが用意されている

PS C:¥>$a.ToUpper()
PS C:¥>ABC
PS C:¥>$a.ToUpper().Split("B")[0]
PS C:¥>A

98
コマンドからの出力もオブジェクト化される
ipconfig の出力結果からIPアドレスを取りだす

PS C:¥> (ipconfig)[18].Split(":")[1].Trim()
object

ipconfig の の18行目
出力結果
(0から数えて)
コロンで分割した
(0から数えて)2
つ目の値

前後の空白を
トリミング

IPv4 アドレス . . . . . . . . . . : 192.168.1.100
99
PSドライブ
ファイルシステムだけではなく、さまざまなオブジェクトがドライブとしてアク
セス可能(CD コマンドで移動可能)
PS C:¥> Get-PSDrive











ファイルシステム
エイリアス(Alias:)
レジストリ(HKLM:、HKCU:)
証明書(Cert:)
環境変数(Env:)
変数(Variable:)
WSMAN設定(Wsman:)
Active Directory(AD:)
IIS(IIS:)
Remote Desktop Service(RDS:)

モジュールが読み込まれて
いないと使えないドライブ
もある
(例)ActiveDirectory
100
基礎編
3. 基本的な文法とスクリプトの作り方
さまざまな使用例から使い方を学びましょう

101
1.
2.
3.
4.
5.

6.

7.
8.

起動中のサービス一覧
 パイプライン
 Where-Object による条件指定
特定のサービスを停止する
 () でオブジェクトを表現する
ネットワーク情報を取得する
 出力結果のフォーマット変換
ネットワークの設定を変更する
ローカルコンピューター名を変更する
 変数の宣言
 変数の遅延展開
 Array 値
 ハッシュテーブル
 環境変数
リモートからコンピューター名を変更する
※標準コマンドレット or WMI
 クレデンシャルの使い方
 WMI に必要なアクセス権
ドメインに参加させる
※標準コマンドレット or WMI
複数のコンピューターをドメインに参加させる
 スクリプトの継続行
 ファイルの入出力方法
 ファイルのコード変換

 CSV のヘッダー行について
 繰り返し処理
9.
イベントログを収集する
 Select-Object により必要な要素のみを取り出す
10. イベントログをバックアップする
11. 独自のイベントログを登録する
12. 仮想マシンを作成して起動する
 スクリプトの引数を定義する
 名前付き引数
13. Hyper-V ライブマイグレーションを実行する
14. パフォーマンスログを取得する
15. 役割と機能をインストールする
16. 仮想ドメインコントローラを複製する
17. Hyper-V 仮想スイッチを作成する
18. リモートコンピューターから機能を一括で削除する
19. リモートコンピューターを一括でシャットダウンする
20. すべての Hyper-V ホストの仮想マシンを強制的にシャッ
トダウンする
21. すべてのHyper-V ホストのライブマイグレーションを有効
化する

102
1.起動中のサービス一覧を取得する
object

サービス一覧

パイプ

PS C:¥>get-service | where-object {$_.Status -eq "Running"}

サービス一覧
を出力

object

まオ
まブ
渡ジ
さェ
れク
るト
の

サービス一覧

103
パイプラインについて
コマンドレット1

コマンドレット2

結果

結果

オブジェクト

入力パラメタ

コマンドレット3

入力パラメタ

PS > Get-Service | Where-Object {$_.Status -EQ "Running"} | Select-Object
-Property Name, Servicetype | Sort-Object -Property ServiceType
PS > Get-Service | Where-Object Status -EQ "Running" | Select-Object Name,
Servicetype | Sort-Object ServiceType
V3ではこう書ける
•
•
•
•

サービスの一覧を取得
Status が Running のみを抽出
Name プロパティとServiceType プロパティを抽出
ServiceType でソート

104
TIPS 条件を指定して結果を絞り込む Where-Object

#サイズが1024バイト以上のファイルを検索する

Dir | Where-Object {$_.length -GT 1024} `
|Select-Object Name,length

#Active Directory のユーザー名に”a”を含むユーザーを取得する

Get-ADUser -Filter * `
|Where-Object {$_.name -Like “*a*”} `
| ForEach-Object name

105
TIPS PS 3.0 では書式を簡略化できます

PS C:¥>get-service | where-object {$_.Status -eq "Running"}
V3 ではこう書ける

PS C:¥>get-service | where-object Status -eq "Running"

106
2.特定のサービスを停止する
PS C:¥>Stop-Service WSerarch
メソッド

PS C:¥>(Get-Service -Name WSearch).Stop()

Windows Search サービスの
インスタンスを取得

インスタンスに対して
メソッドを実行

object

Windows Search
107
TIPS()で括るとオブジェクトを表す
#Dir の出力結果の最初の行から
#Nameプロパティだけを取り出す

(dir)[0].Name

#変数を使用すると以下のように書き換えられる

$D = Dir
$D[0].Name

108
3.ネットワーク情報を取得する
ネットワークアダプタの一覧

Format-List の略

PS C:¥> Get-NetAdapter | FL Name, InterfaceIndex, MacAddress
IP アドレスの取得

PS C:¥> Get-NetIPAddress -InterfaceIndex 28 -AddressFamily IPv4

109
TIPS 出力結果のフォーマットを変換

dir | format-table Name,Length
dir | format-list Name,Length
dir | format-wide Name -column 6
dir | out-gridview

110
4.ネットワークの設定を変更する
静的なIPV4アドレスを設定する
PS C:¥>New-NetIPAddress -InterfaceIndex 24 -IPAddress 192.168.205.102
-AddressFamily IPv4 -PrefixLength 24 -DefaultGateway 192.168.205.254
既存の静的アドレスを変更する場合には Set-NetIPAddress を使用する

DNS の設定
PS C:¥>Set-DnsClientServerAddress -Interface 24
-ServerAddress 192.168.205.1, 192.168.205.3
IP アドレスの削除
PS C:¥> Remove-IPAddress -InterfaceIndex 24 -AddressFamily IPv4
DNSの設定を削除する
PS C:¥> Set-DnsClientServerAddress -Interface 24 -ResetServerAddress

DHCP を有効にする
PS C:¥> Set-NetIPInterface -InterfaceIndex 24 -Dhcp Enabled

111
5.ローカルコンピューター名を変更する
ローカルコンピューター名の取得
方法1 PS C:¥> $Env:ComputerName
方法2 PS C:¥> (Get-WmiObject -Class Win32_ComputerSystem).Name

ローカルコンピューター名の変更
標準のコマンドレットを使用する場合
C:¥> Rename-Computer -NewName “tfwin8-xx” -Force -Restart
WMI を使用する場合
PS C:¥> $New_ClientName = “New_ClientName”
PS C:¥> $SysInfo = Get-WmiObject -Class Win32_ComputerSystem
PS C:¥> $SysInfo.Rename($New_ClientName)
PS C:¥> Restart-Computer
112
TIPS 変数を使うには
$FirstName = "Junichi"
$LastName = "Anno"
$FullName = $FirstName + " " + $LastName
Write-Output $FullName
$arrFullName = $FullName.Split(" ")
Write-Output $arrFullname[0]
PS C:¥> C:¥hogehoge.ps1
Junichi Anno
Junichi

出力結果

113
TIPS 変数の宣言について
通常は自動判別

PS > $A = 1
PS > $B = “1”
PS > $A + $B
2
PS > $B + $A
11
PS > $A = “abc”
PS > $A + $B
abc1

System.Int32
System.String

先にある System.Int32 に自動変換

自動変換できない値で
あればエラーとなる

先にあるSystem.String に自動変換

System.String で置き換えが可能

114
明示的に宣言することも可能

PS > [System.Int32] $A = 1
PS > [System.String] $B = “abc”
PS > [System.Array] $C = “今年は”, 2012, “年です”

0: 今年は
1: 2012
2: 年です

[System.String]
[System.Int32]
[System.String]

PS > $A = 987.654
PS > $A
Int32 にキャストされる
988
明に宣言すると自動変換はできない

PS > $A = “Hello”
Cannot convert value "Hello" to type "System.Int32“
PS > [System.String] $A = “Hello”

115
変数を削除する

PS > [System.Int32] $A = 1
PS > Remove-Variable A
自分で作成した変数を全て削除
※削除できないものについてエラーが出る

PS > Get-Variable | Remove-Variable

116
TIPS 変数の展開について
PS >$FirstName = "Junichi"
PS >$LastName = "Anno"
PS >$FullName = “$FirstName $LastName”
PS >Write-Output $FullName
Junichi Anno
PS >$FullName = ‘$FirstName $LastName’
PS >Write-Output $FullName
$FirstName $LastName

ダブルクオーテーションで
括った場合は変数は展開さ
れる

シングルクオーテーション
で括った場合には変数は展
開されない

117
TIPS 変数の遅延展開
通常

PS > $Name = “Junichi”
PS > $Message = “Hello $Name”
PS > $Message
Hello Junichi

この時点で変数は展開される

遅延展開

PS > $Name = “Junichi”
{} で括ると変数は展開されない
PS > $Message = { “Hello $Name” }
$Message を定義した後で $Name に値を入れているこ
PS > $Name = “Taro”
とに注意
PS > $Message
Hello $Name
PS > & $Message
Echo の代わりに & を使用
Hello Taro
118
遅延展開を利用して関数として定義

PS > $Message = { Param( $Name ) “Hello $Name” }
PS > & $Message Junichi
Hello Junichi

119
TIPS Array 値
Array の作り方
空のアレイを作成(あえてしなくてもよい)
PS > $Users = @()
PS > $Users = “Junichi”, ”Naoko”, “Kazunori”
PS > $Users.Count
3
PS > $Users
Junichi
Naoko
Kazunori
PS > $Users += “Maki”
値を追加
数値を追加
PS > $Users += 512
{}で括っているので遅延展開変数
PS > $a = { [system.math]::Pow( 2, $N ) }
PS > $Users += $a
遅延展開変数を追加
120
Array 値の参照
PS > $Users[3]
Maki
配列の一番最後
PS > $Users[-1]
PS > $N = 6
遅延展開変数の入った行を参照
PS > & $Users[5]
64
$users から値を取りだし
PS > Foreach ($u in $Users) { New-ADUser -Name $u }
ながらユーザーを作成
PS > $Users[2..4]
配列の2番から4番を取りだす
kazunori と一致するものがあるかどうかを検査
PS > ($Users -eq “Kazunori”).Count
Kazunori 以外のものを抽出
PS > $Users -ne “Kazunori”
M が含まれる行を抽出
PS > $Users -like “*M*”
121
PS > $arrINT = 1,2,3,4,5,6,7,8,9
PS > $arrINT -ge 5

2つの配列を合成

PS > $Users += $arrINT

2つの配列を合成

PS > $Users | Sort-Object $_

昇順に並べ替えて出力

PS > $Users = $Users -ne “Kazunori”

Kazunori を削除

PS > [System.Array]::Reverse($Users)

Users の中の並び順を逆にする

122
空白を文字列で埋める(PadLeft / PadRight)

## $N[] に、001 ~ 100 の文字列を格納する
PS > $N = @()
PS > 001..100 | % { $N += ("$_").Padleft(3,"0")}
PS > User$N
001
002
・
100
PS > $VMs = $N | % {echo VM$_}
PS > $VMs
VM001
VM002
・
VM100
123
TIPS HashTable
HashTable の作り方
PS > $Users = @{}

注意 Array は ()

PS > $Users.0001 = “Junichi”

キー 1 に 値 Junichi を登録

PS > $Users.”0001” = “Junichi”

キー 0001 に 値 Junichi を登録

PS > $Users.Add( “0001”, “Junichi” )

PS > $Users.Remove(“0001”)

キー 0001 の行を削除

124
CSV ファイルから値を読み込んでHashTable を作成
PS > $USDJPY = Import-CSV -Path C:¥tools¥USDJPY.csv –Encoding Default

PS > $HT = @{}
PS > While ( $i -lt $USDJPY.Count ) {$HT.Add( $USDJPY.日付[ $i ], $USDJPY.終値
[ $i ] ) ; $i++ }

PS > $HT.”2012/2/10”
77.65

125
TIPS 環境変数の取得
#環境変数の一覧を取得
cd env:
dir
#特定の環境変数を取得
$env:computername
$env:username
$env:userdomain
$env:SessionName

126
6.コンピューター名を変更する(リモートから)
標準のコマンドレットを使用する
##スタンドアロンのコンピューターの場合
PS C:¥> $ClientName = “ClientName”
PS C:¥> $Cred = Get-Credential
PS C:¥> $New_ClientName = “New_ClientName”
PS C:¥> Rename-Computer -ComputerName $ClientName -LocalCredential $Cred
-NewName $New_ClientName -Force -Restart

##ドメインに参加しているコンピューターの場合
PS C:¥> $ClientName = “ClientName”
PS C:¥> $Cred = Get-Credential
PS C:¥> $New_ClientName = “New_ClientName”
PS C:¥> Rename-Computer -ComputerName $ClientName -DomainCredential $Cred
-NewName $New_ClientName -Force -Restart
127
WMI を使用する
変更

WMI

Server

Client

PS C:¥> $ClientName = “ClientName”
PS C:¥> $Cred = Get-Credential
PS C:¥> $New_ClientName = “New_ClientName”
PS C:¥> $SysInfo = Get-WmiObject -Class Win32_ComputerSystem
-ComputerName $ClientName -Credential $Cred
PS C:¥> $SysInfo.Rename($New_ClientName)

PS C:¥> Restart-Computer -ComputerName $ClientName -Credential $cred -Force
128
TIPS クレデンシャルの作成
その1
PS C:¥> $Cred = Get-Credential
ポップアップが表示される

その2
PS C:¥> $user = “administrator “
PS C:¥> $pass = ConvertTo-SecureString "P@ssw0rd“
-AsPlainText -Force
PS C:¥> $Cred = New-Object
System.Management.Automation.PSCredential $user, $pass
129
TIPS WMI Tester
http://technet.microsoft.com/en-us/library/cc782719(v=ws.10)
• WMI への接続性をテストするツール
• リモートコンピューターへの接続も
テストできる

130
TIPS 非ドメインメンバーから WMI接続 が拒否される原因と対処

代表的なエラー番号
• 0x800706ba
• 0x80041003
• 0x80070005
代表的な原因
• Firewall の設定
• アクセス権

131
必要なアクセス権
• Distributed COM Users メンバーである
こと

• (規定では)システム管理者であること
※wmimgmt.msc で変更可能

132
必要な Firewall の設定
• Windows Management Instrumentation のルール

133
7.ドメインに参加させる
Server

参加指示

AD Domain

Client

Client

Client

Workgroup

標準のコマンドレットを使用する

PS C:¥> $Domain = “tf.com”
PS C:¥> $Client = “ClientComputer”
PS C:¥> $LocalCred = Get-Credential junichia
PS C:¥> $DomainCred = Get-Credential tf¥administrator
PS C:¥> $Admin = “tf¥administrator”
PS C:¥> $Pass = “P@ssword”
PS C:¥> Add-Computer -ComputerName $Clienit -LocalCredential $Cred
-Credential $DomainCred -DomainName $Domain -OUPath “OU=営業部” -Restart -Force
134
WMIのクラスを直接使用する
認証に関する通信を暗号化する
PS C:¥> $Domain = “tf.com”
これを指定しないと以下のエラー
PS C:¥> $Client = “ClientComputer”
“Client connection to WINMGMT
needs to be encrypted for this
PS C:¥> $Cred = Get-Credential junichia
operation. Please adjust your
PS C:¥> $Admin = “tf¥administrator”
IWbemServices proxy security settings
and retry. ”
PS C:¥> $Pass = “P@ssword”
PS C:¥> $SysInfo = Get-WmiObject -Class Win32_ComputerSystem
-ComputerName $ClientComputer -Credential $Cred -Authentication PacketPrivacy
PS C:¥> $SysInfo.JoinDomainOrWorkgroup($Domain, $Pass, $Admin, “OU=xx”, 3 )
PS C:¥> Restart-Computer -ComputerName $Client -Credential $Cred -Force

1: ドメインに参加
+
2: コンピューターアカウントの作成

135
8.複数のコンピューターをドメインに参加させる
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 各種定数の設定
Client
Client
CSV
Server
$Cred = Get-Credential junichia
$Domain = "tf.com"
$Admin = "tf¥administrator"
tfwin8-01,192.168.205.101,経理部
$Pass = "P@ssword"
tfwin8-02,192.168.205.102,営業部
# いったん、SJISで作成したファイルを読み込み、UNICODEで保存する
・
$InputFile = "C:¥Tools¥Computers.csv"
・
$OutputFile = "C:¥Tools¥Computers_unicode.csv"
Get-Content $InputFile -Encoding String | Out-File $OutputFile -Encoding unicode
# CSVファイルを読み込む
$Computers = Import-Csv -Path $OutputFile -Header ComputerName,IPAddress,Department -Delimiter ","
# コンピューター名と部署を取り出し、ドメインに参加させる
ForEach ($c in $Computers)
{
$Client = $c.ComputerName
$OU = "OU=" + $c.Department + ",DC=TF,DC=COM
$SysInfo = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $Client `
-Credential $Cred -Authentication PacketPrivacy
$SysInfo.JoinDomainOrWorkgroup($Domain, $Pass, $Admin, $OU , 3 )
Restart-Computer -ComputerName $Client -Credential $Cred -Force
}
136
TIPS 行継続
アクサン グラーブ記号 (`) を使用する

copy-item C:¥tmp¥*.txt `
-destination C:¥

こ
い
つ

137
TIPS 入出力方法
これを抑えておけば、ひとまずたいていのことはできます
#標準出力
Write-Output “Hello”

#ファイルから入力

Echo “Hello”

$file = Get-Content -Path c:¥tmp¥list.txt
$file = type c:¥tmp¥list.txt

#標準入力
$InputData = Read-Host

#CSVファイルから入力
$file = Import-CSV -Path c:¥test.csv

#ファイルに出力
Out-File -filepath C:¥tmp¥list.txt -inputobject
$Record
138
TIPS 出力方法の違い
空白で区切られる

PS C:¥> 1 + 2 + 3
6
PS C:¥> “1” + “2” + “3”
123
PS C:¥> Windows PowerShell
<エラー>

※ Echo は Write-Output のAlias

PS C:¥> Write-Output 1 + 2 + 3
1
+
2
+
3
PS C:¥> Echo Windows PowerShell
Windows
PowerShell
PS C:¥> Echo “Windows PowerShell”
Windows PowerShell
139
TIPS ファイルのコード変換
SJIS作成したファイルは日本語が正しく扱われないことがある
∴ Get-Content で読み込み、Out-File でUnicodeで保存する

Get-Content -Path $Input -Encoding String | `
Out-File -Encoding UNICODE
指定可能な文字コード
String
Unicode
Byte
BigEndianUnicode
UTF8
UTF7

UTF32
Ascii
Default
Oem

140
TIPS Import-CSV でのヘッダーの取り扱いについて
• 規定では、1行目はヘッダーとして扱われる
ComputerName, IPAddress, Department
tfwin8-01,192.168.205.101,経理部
tfwin8-02,192.168.205.102,営業部
・
・

• ヘッダーが無い場合には -Header パラメタで指定可能
• -Header を指定すると1行目はデータとして扱われる
• ヘッダー単位(列単位)で取り出しが可能
$Computers = Import-Csv -Path $OutputFile -Header ComputerName,IPAddress
$Computers.IPAddress

141
TIPS Out-GridView を使用して出力結果をながめる
入力したグリッド形式データを参照するための EXCEL VIEWER 的ツール
Import-CSV -Path $File | Out-GridView

142
TIPS 繰り返し処理1
Active Directory ユーザー一覧から name プロパティをリストする

#ForEach-Object
Get-ADUser -Filter * | ForEach-Object {$_.name}
Get-ADUser -Filter * | ForEach-Object name

V3

#foreach
$Users = Get-ADUser -Filter *
foreach ($user in $Users) { $user.name }
143
TIPS 繰り返し処理2
#1から10までを出力
1..10
#1から10 をリダイレクトして出力
1..10 | % {echo $_ }
#User1 から User10 を作成
1..10 | % {New-ADUser “User$_” }
※ % は foreach のエイリアス
144
TIPS 繰り返し処理3
$i = 0
do
{

}

Write-Host $i
$i++

while ($i -lt 10)

$i = 0
do
{

}

Write-Host $i
$i++

until ($i -ge 10)

145
9.イベントログを収集する
リモートコンピューターのセキュリティログから、最新10個のログを取りだす

C:¥> Get-EventLog -LogName Security -ComputerName tfdc01 -Newest 10
特定の日時範囲のログを取りだす

C:¥> Get-EventLog -LogName Security -ComputerName tfdc01 -After “2012/6/1
00:00:00” -Before “2012/6/1 00:10:00”
特定のイベントIDを取りだす

C:¥> Get-EventLog -LogName Security -ComputerName tfdc01 -InstanceID 4632
失敗した監査を取りだす

C:¥> Get-EventLog -LogName Security -ComputerName tfdc01 -EntryType FailureAudit
メッセージに “ログオン” という言葉が含まれているログを取りだす

C:¥> Get-EventLog -LogName Security -ComputerName tfdc01 -Message “*ログオン*”
146
イベントログを集計する

C:¥> Get-EventLog -LogName Application | Group-Object -Property EntryType
-NoElement
C:¥> Get-EventLog -LogName Application |Group-Object -Property Source,EntryType
-NoElement | Select-Object Name,Count

147
TIPS Select-Object で必要な要素のみを取りだす
結果から必要な要素だけを抜き出して処理する
パイプの後ろで使用することをお勧め(なんかおかしい...)
PS C:¥> $Data = Dir
× PS C:¥> Select-Object -InputObject $Data -Property Name
○ PS C:¥> $Data | Select-Object -Property Name

重複データを除く
$data |Select-Object -Unique -Property Name
最後の10個だけ取得
$data | Select-Object -Last 10
最初の5個だけ取得
$data | Select-Object -First 5
148
10. イベントログをバックアップする
PowerShell は管理者モードで起動してください

セキュリティイベントログをローカルにバックアップする(EVT形式)
C:¥> $logFileName = "Security"
C:¥> $exportFileName = "C:¥tmp¥" + $logFileName + (get-date -f yyyyMMddhhmmss) + ".evt"
C:¥> $exportfilename
C:¥> $logFile = Get-WmiObject Win32_NTEventlogFile | Where-Object {$_.logfilename -eq
$logFileName}
C:¥> $logFile.backupeventlog($exportFileName)

149
11.独自のイベントログを登録する
ログファイル名 TechFielders、イベントソース TechFielders を新規に登録する

C:¥> New-EventLog -Source "TechFielders" -LogName "TechFielders"
TechFielders ログにイベントログを書き込む

C:¥> Write-EventLog -LogName TechFielders -Source “TechFielders”
-EntryType Information -EventId 5963 -Message “元気出せこの野郎!1,2,3 ダァ!"

150
12. 仮想マシンを作成して起動する
PS C:¥> .¥CreateVirtualMachine.ps1 -VMName “VM01" -Mem 1024mb
CreateVirtualMachine.ps1
1 param([string] $VMName = "NA", [int] $CPU = 1, [int] $Mem = 10MB)

2 echo -InputObject $VMName, $CPU, $Mem
3 $SwitchName = "Intel(R) 82579LM Gigabit Network Connection - Virtual Switch"
4 New-VM -BootDevice CD `

5

-MemoryStartupBytes $Mem `

6

-Name $VMName `

7

-SwitchName $SwitchName `

8

-VHDPath ¥¥junichia-vdi¥$VMName¥$VMName.vhdx

9 Set-VM -ProcessorCount $CPU -DynamicMemory -Name $VMName
10 Add-VMNetworkAdapter -VMName $VMName -SwitchName $SwitchName

11 Start-VM -Name $VMName

151
TIPS 引数を受け取る

5つの引数

C:¥> .¥hogehoge.ps1 My name is “Junichi Anno” .

Write-Output $args[3]

Junichi Anno

foreach ( $a in $args )
{
Write-Output $a
}

My
name
is
Junichi Anno
.

152
TIPS 名前付き引数の使い方
引数を所定の名前の変数に格納することで、文法チェック等が行いやすくなる

C:¥> hogehoge.ps1 -userid anno
param([string] $UserID = “ID", [string] $Password =“PASS")
Write-Output $userid
Write-Output $Password
規定値
anno
PASS

出力結果

153
13. Hyper-V ライブマイグレーション
メモリ内データ
Guest

Host01

構成情報

Guest

Host01

¥¥Server¥Share¥xxx.vhdx
$Source の中の VM で始ま
るゲストOSを検索している

$Source = “HostSV01”
$Dist = “HostSV02”
$VMs = get-vm -ComputerName $Source -Name VM*
foreach ($VMName in $VMs.Name) {
Move-VM -ComputerName $Source -Name $VMName -DestinationHost $Dist
}

154
14. パフォーマンスログを取得する
プロセッサー(コア単位)の利用率を1秒に1回取得して表示する
1
2
3
4
5
6
7
8
9
10
11

Do
{
$perf =Get-WmiObject -Class win32_perfformatteddata_perfos_processor `
-Property PercentProcessorTime
目的のパフォーマンスカウン
foreach ($p in $perf) {
タ(今回はCPU使用率)が含ま
$outrec = "Processor" + $i + ":" + $p.PercentProcessorTime れているWMIクラスを指定する
echo $outrec
}
1秒スリープ
Start-Sleep -Seconds 1
cls
画面をクリア
} while (-1)

155
TIPS パフォーマンスカウンターの調査方法
パフォーマンスカウンタークラスの一覧を取得するには
C:¥> Get-CimClass Win32_PerfFormatted* |ft CimClassName

C:¥> Get-CimClass Win32_PerfRaw* |ft CimClassName

win32_perfformatteddata_perfos_processor クラスが持ってい
るカウンターの一覧を取得する
C:¥> $PerfMon = Get-CimClass Win32_PerfFormattedData_perfos_processor
C:¥> $PerfMon.CimClassProperties |ft Name

156
15. 役割と機能をインストールする
役割/機能の一覧を取得する
C:¥> Get-WindowsFeature
C:¥> Get-WindowsFeature |Select-Object Name

157
ServerCore にすべての GUI をインストールする(フルインストール)
PS C:¥> Add-WindowsFeature -Name User-Interfaces-Infra -IncludeAllSubFeature
-IncludeManagementTools

ServerCore に管理ツールだけをインストールする(MinShell)
PS C:¥> Add-WindowsFeature –Name Server-gui-mgmt-infra -IncludeManagementTools

158
(参考)Windows Server 2012 GUI オプション
Server Core

MinShell

Server W/GUI

Desktop Experience

コマンドプロンプト

Available

Available

Available

Available

Windows PowerShell
サーバーマネージャー

Available

Available

Available

Available

Not Available

Available

Available

Available

MMC
コントロールパネル

Not Available

Available

Available

Available

Not Available

Not Available

Available

Available

コントロールパネル内
のアプレット

Not Available

Some Available

Available

Available

Windows Explorer
タスクバー

Not Available

Not Available

Available

Available

Not Available

Not Available

Available

Available

通知エリア

Not Available

Not Available

Available

Available

Internet Explorer
ヘルプ

Not Available

Not Available

Available

Available

Not Available

Not Available

Available

Available

テーマ

Not Available

Not Available

Not Available

Available

スタートスクリーン

Not Available

Not Available

Not Available

Available

WinRTアプリ

Not Available

Not Available

Not Available

Available

メディアプレーヤー

Not Available

Not Available

Not Available

Available

159
ServerManager モジュールでサポートされている
コマンドレット
PS C:¥> Import-Module ServerManager
PS C:¥> Get-Command -Module ServerManager
Alias
Alias
Function
Function
Cmdlet
Cmdlet
Cmdlet

Add-WindowsFeature
Remove-WindowsFeature
Disable-ServerManagerStandardUserRemoting
Enable-ServerManagerStandardUserRemoting
Get-WindowsFeature
Install-WindowsFeature
Uninstall-WindowsFeature

servermanager
servermanager
servermanager
servermanager
servermanager
servermanager
servermanager

160
16. DC を複製する
Windows Server 2012 以降では、仮想化されたドメインコントローラーを複製して展
開することがでる。
(条件)
• 複製元はPDCエミュレーターであってはならない
• 複製元は Clonable Domain Controllers グループのメンバーでなくてはならない
• Hyper-V ホストは Windows Server 2012
• DCは Windows Server 2012

DC01
(pdc)

DC02

Hyper-V
ホスト

Hyper-V
ホスト

Export

VHD

Import

DC03
Hyper-V
ホスト
161
$SourceDC = "DC02"
$DistDC = "DC03"
$distPDCEmu = DC01"
$HyperVHost = “ITCAMP-TMP"

PDCエミュレーターを複製元となるDC以外に移動
Move-ADDirectoryServerOperationMasterRole -Identity $distPDCEmu -OperationMasterRole PDCEmulator
Get-ADComputer $SourceDC | %{Add-ADGroupMember -Identity "Cloneable Domain Controllers" -Members
$_.samAccountName}
複製元DCをClonable Domain Controllers グループのメンバーにする

Invoke-Command -ComputerName $SourceDC -ScriptBlock { Get-ADDCCloningExcludedApplicationList -GenerateXml
-Force }
$SB = "New-ADDCCloneConfigFile -Static ` 新しいドメインコンローラーの
-IPv4Address ""192.168.210.51"" `
構成ファイルを作成
-IPv4DNSResolver ""192.168.210.50"" `
-IPv4SubnetMask ""255.255.255.0"" `
-IPv4DefaultGateway ""192.168.210.254"" `
-CloneComputerName " + $DistDC + `
" -SiteName ""Default-First-Site-Name"""
Invoke-Command -ComputerName $SourceDC -ScriptBlock { $SB }
Stop-VM $SourceDC

複製元DCをシャットダウン

162
つづき
Get-VM $SourceDC | %{ Export-VM $_ -Path C:¥VMs}

複製元DCをエクスポート

Start-VM -Name $SourceDC 複製元DCを起動
エクスポートした仮想マシンをインポート
$CFG = (Dir “C:¥VMs¥$SourceDC¥Virtual Machines¥*.xml”).FullName
md E:¥$DistDC
Import-VM -Path "$CFG" -ComputerName $HyperVHost -GenerateNewId -Copy
-VhdDestinationPath E:¥$DistDC
VMの名前が複製元と同じになってしまうので、変更する。ここでは同じHyper-Vホストを使用して
いるので、OffになっているほうのDCを変名している。
Get-VM $SourceDC |Where-Object {$_.State -EQ "Off"} | Rename-VM -NewName $DistDC
複製先を起動。起動後自動的にDC間複製が始まる。
Start-VM $DistDC

163
17. 仮想スイッチを作成する
$PCName = "itcamp-pc01"
Invoke-Command -ComputerName $PCName -ScriptBlock {New-VMSwitch -Name "External" `
-AllowManagementOS $True -NetAdapterInterfaceDescription "Intel(R) 82579LM Gigabit Network Connection"}
New-VMSwitch -ComputerName $PCName -Name "WS2012Labs-Public" -SwitchType Private
New-VMSwitch -ComputerName $PCName -Name "WS2012Labs-CorpNet" -SwitchType Private
New-VMSwitch -ComputerName $PCName -Name "WS2012Labs-Storage" -SwitchType Private
New-VMSwitch -ComputerName $PCName -Name "WS2012Labs-Internet" -SwitchType Private
New-VMSwitch -ComputerName $PCName -Name "WS2012Labs-HA" -SwitchType Private

164
18. リモートコンピューターから機能を一括で削除する
ワークフローを使用してリモートコンピューターからフェールオーバークラス
タリングを削除する
Workflow RemoveFOCsWF {
$PCs = Import-Csv -Path pclist.txt -Header "PC","IP"

itcamp-pc01,192.168.210.1
itcamp-pc02,192.168.210.2
itcamp-pc03,192.168.210.3
itcamp-pc04,192.168.210.4
itcamp-pc05,192.168.210.5
itcamp-pc06,192.168.210.6
・
・

foreach -Parallel ($pc in $PCs) {
Write-Output -InputObject $pc.pc
Remove-WindowsFeature -ComputerName $pc.pc Failover-Clustering -IncludeManagementTools Restart
}
}
RemoveFOCsWF
165
19. リモートコンピューターを一括でシャットダウンする
Workflow RestartAllPCsWF {
$PCs = Import-Csv -Path pclist.txt -Header "PC","IP"
foreach -Parallel ($pc in $PCs) {
Write-Output -InputObject $pc.pc
##Restart-Computer -PSComputerName $pc.PC -Force
Stop-Computer -PSComputerName $pc.PC -Force
}

itcamp-pc01,192.168.210.1
itcamp-pc02,192.168.210.2
itcamp-pc03,192.168.210.3
itcamp-pc04,192.168.210.4
itcamp-pc05,192.168.210.5
itcamp-pc06,192.168.210.6
・
・

}

RestartAllPCsWF

166
20. すべての Hyper-V ホストの仮想マシンを強制的にシャットダウン
ワークフローを使用して一斉にシャットダウン
Workflow StopAllVMs {
$PCs = Import-Csv -Path pclist.txt -Header "PC","IP"
foreach -Parallel ($pc in $PCs){
##Get-VM -ComputerName $pc.pc |Start-VM
Get-VM -ComputerName $pc.pc |Stop-VM -Force
}

itcamp-pc01,192.168.210.1
itcamp-pc02,192.168.210.2
itcamp-pc03,192.168.210.3
itcamp-pc04,192.168.210.4
itcamp-pc05,192.168.210.5
itcamp-pc06,192.168.210.6
・
・

}
167
21. すべての Hyper-V ホストのマイグレーション設定を有効化
Workflow DisableMigrationWF {

$PCs = Import-Csv -Path c:¥tools¥ps¥HOLSetup¥pclist.txt -Header "PC","IP"
foreach -Parallel ($pc in $PCs) {

itcamp-pc01,192.168.210.1
itcamp-pc02,192.168.210.2
itcamp-pc03,192.168.210.3
itcamp-pc04,192.168.210.4
itcamp-pc05,192.168.210.5
itcamp-pc06,192.168.210.6
・
・

##Disable-VMMigration -ComputerName $pc.pc
##Set-VMHost -ComputerName $pc.pc -VirtualMachineMigrationAuthenticationType CredSSP `
-MaximumVirtualMachineMigrations 2 -UseAnyNetworkForMigration $true
Enable-VMMigration -ComputerName $pc.pc
Set-VMHost -ComputerName $pc.pc -VirtualMachineMigrationAuthenticationType Kerberos `
-MaximumVirtualMachineMigrations 2 -UseAnyNetworkForMigration $True
}
}
DisableMigrationWF

168
基礎編
5. その他の Tips
その他、知っていると便利な使用法について

169
True と False の指定
$True と $False は予約語である
C:¥> $MyNameIsJunichi = $True
C:¥> If ($MyNameIsJunichi -eq $True) {Echo 1}
1

170
日時を取得(Date オブジェクト)
プロパティ
PS C:¥> (Date).Year
2012

メソッド
PS C:¥> (date).adddays(10)
24年 5月 23日 12:49:10

Date
Day
DayOfWeek
DayOfYear
Hour
Kind
Millisecond
Minute
Month
Second
Ticks
TimeOfDay
Year

Add
AddDays
AddHours
AddMilliseconds
AddMinutes
AddMonths
AddSeconds
AddTicks
AddYears
CompareTo
Equals
GetDateTimeFormats
GetHashCode
GetType
GetTypeCode

DateTime

IsDaylightSavingTime
Subtract
ToBinary
ToFileTime
ToFileTimeUtc
ToLocalTime
ToLongDateString
ToLongTimeString
ToOADate
ToShortDateString
ToShortTimeString
ToString
ToUniversalTime

171
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する

More Related Content

What's hot

ゼロトラスト・アーキテクチャを無料で(やれるだけ)実現する
ゼロトラスト・アーキテクチャを無料で(やれるだけ)実現するゼロトラスト・アーキテクチャを無料で(やれるだけ)実現する
ゼロトラスト・アーキテクチャを無料で(やれるだけ)実現するKeioOyama
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例kazuhcurry
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方Yoshiyasu SAEKI
 
「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!Hirotaka Sato
 
IT エンジニアのための 流し読み Windows 10 - 超概要!Windows Defender シリーズ
IT エンジニアのための 流し読み Windows 10 - 超概要!Windows Defender シリーズIT エンジニアのための 流し読み Windows 10 - 超概要!Windows Defender シリーズ
IT エンジニアのための 流し読み Windows 10 - 超概要!Windows Defender シリーズTAKUYA OHTA
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方歩 柴田
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~NTT DATA OSS Professional Services
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48Preferred Networks
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会
【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会
【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会真乙 九龍
 

What's hot (20)

ゼロトラスト・アーキテクチャを無料で(やれるだけ)実現する
ゼロトラスト・アーキテクチャを無料で(やれるだけ)実現するゼロトラスト・アーキテクチャを無料で(やれるだけ)実現する
ゼロトラスト・アーキテクチャを無料で(やれるだけ)実現する
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
HTTP/2 入門
HTTP/2 入門HTTP/2 入門
HTTP/2 入門
 
MongoDBの監視
MongoDBの監視MongoDBの監視
MongoDBの監視
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!
 
IT エンジニアのための 流し読み Windows 10 - 超概要!Windows Defender シリーズ
IT エンジニアのための 流し読み Windows 10 - 超概要!Windows Defender シリーズIT エンジニアのための 流し読み Windows 10 - 超概要!Windows Defender シリーズ
IT エンジニアのための 流し読み Windows 10 - 超概要!Windows Defender シリーズ
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会
【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会
【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会
 

Viewers also liked

PowerShell を使用した Hyper-V の管理
PowerShell を使用した Hyper-V の管理PowerShell を使用した Hyper-V の管理
PowerShell を使用した Hyper-V の管理Kazuki Takai
 
Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版
Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版
Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版junichi anno
 
Hyper vを理解する
Hyper vを理解するHyper vを理解する
Hyper vを理解するNaoki Abe
 
Azureの管理権限について
Azureの管理権限について Azureの管理権限について
Azureの管理権限について junichi anno
 
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)Tomokazu Kizawa
 
トラブルから理解するHyper vの基礎
トラブルから理解するHyper vの基礎トラブルから理解するHyper vの基礎
トラブルから理解するHyper vの基礎Naoki Abe
 
Bat jscrpt powershell
Bat jscrpt powershellBat jscrpt powershell
Bat jscrpt powershellNaoyuki Sano
 
さくらインターネットのサービス概要について(さくらインターネットのクラウド基盤で実現するWindows Server活用セミナー)
さくらインターネットのサービス概要について(さくらインターネットのクラウド基盤で実現するWindows Server活用セミナー)さくらインターネットのサービス概要について(さくらインターネットのクラウド基盤で実現するWindows Server活用セミナー)
さくらインターネットのサービス概要について(さくらインターネットのクラウド基盤で実現するWindows Server活用セミナー)さくらインターネット株式会社
 
WS2012R2本とキティさんとわたし
WS2012R2本とキティさんとわたしWS2012R2本とキティさんとわたし
WS2012R2本とキティさんとわたしwintechq
 
Hyper-V エンタープライズ設計の現実解:2015 年版
Hyper-V エンタープライズ設計の現実解:2015 年版Hyper-V エンタープライズ設計の現実解:2015 年版
Hyper-V エンタープライズ設計の現実解:2015 年版Daichi Ogawa
 
Active directory のセキュリティ対策 131107
Active directory のセキュリティ対策 131107Active directory のセキュリティ対策 131107
Active directory のセキュリティ対策 131107wintechq
 
Microsoft の ID 連携技術
Microsoft の ID 連携技術Microsoft の ID 連携技術
Microsoft の ID 連携技術shigeya
 
Ultimate SharePoint Infrastructure Best Practices - Japanese Version - #JPSPS
Ultimate SharePoint Infrastructure Best Practices - Japanese Version - #JPSPSUltimate SharePoint Infrastructure Best Practices - Japanese Version - #JPSPS
Ultimate SharePoint Infrastructure Best Practices - Japanese Version - #JPSPSMichael Noel
 
Microsoft と Digital Identity
Microsoft と Digital IdentityMicrosoft と Digital Identity
Microsoft と Digital Identityjunichi anno
 
Vdi を より使いやすいインフラにするためのセキュリティ設計
Vdi を より使いやすいインフラにするためのセキュリティ設計Vdi を より使いやすいインフラにするためのセキュリティ設計
Vdi を より使いやすいインフラにするためのセキュリティ設計junichi anno
 
Active Directory 最新情報 2012.8.31 暫定版
Active Directory 最新情報 2012.8.31 暫定版Active Directory 最新情報 2012.8.31 暫定版
Active Directory 最新情報 2012.8.31 暫定版junichi anno
 
Dynamic Access Control 演習編
Dynamic Access Control 演習編Dynamic Access Control 演習編
Dynamic Access Control 演習編junichi anno
 
Dynamic Access Control 解説編
Dynamic Access Control 解説編Dynamic Access Control 解説編
Dynamic Access Control 解説編junichi anno
 
SaaS としての IDM の役割
SaaS としての IDM の役割SaaS としての IDM の役割
SaaS としての IDM の役割junichi anno
 
仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製する仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製するjunichi anno
 

Viewers also liked (20)

PowerShell を使用した Hyper-V の管理
PowerShell を使用した Hyper-V の管理PowerShell を使用した Hyper-V の管理
PowerShell を使用した Hyper-V の管理
 
Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版
Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版
Windows PowerShell によるWindows Server 管理の自動化 v4.0 2014.03.13 更新版
 
Hyper vを理解する
Hyper vを理解するHyper vを理解する
Hyper vを理解する
 
Azureの管理権限について
Azureの管理権限について Azureの管理権限について
Azureの管理権限について
 
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
 
トラブルから理解するHyper vの基礎
トラブルから理解するHyper vの基礎トラブルから理解するHyper vの基礎
トラブルから理解するHyper vの基礎
 
Bat jscrpt powershell
Bat jscrpt powershellBat jscrpt powershell
Bat jscrpt powershell
 
さくらインターネットのサービス概要について(さくらインターネットのクラウド基盤で実現するWindows Server活用セミナー)
さくらインターネットのサービス概要について(さくらインターネットのクラウド基盤で実現するWindows Server活用セミナー)さくらインターネットのサービス概要について(さくらインターネットのクラウド基盤で実現するWindows Server活用セミナー)
さくらインターネットのサービス概要について(さくらインターネットのクラウド基盤で実現するWindows Server活用セミナー)
 
WS2012R2本とキティさんとわたし
WS2012R2本とキティさんとわたしWS2012R2本とキティさんとわたし
WS2012R2本とキティさんとわたし
 
Hyper-V エンタープライズ設計の現実解:2015 年版
Hyper-V エンタープライズ設計の現実解:2015 年版Hyper-V エンタープライズ設計の現実解:2015 年版
Hyper-V エンタープライズ設計の現実解:2015 年版
 
Active directory のセキュリティ対策 131107
Active directory のセキュリティ対策 131107Active directory のセキュリティ対策 131107
Active directory のセキュリティ対策 131107
 
Microsoft の ID 連携技術
Microsoft の ID 連携技術Microsoft の ID 連携技術
Microsoft の ID 連携技術
 
Ultimate SharePoint Infrastructure Best Practices - Japanese Version - #JPSPS
Ultimate SharePoint Infrastructure Best Practices - Japanese Version - #JPSPSUltimate SharePoint Infrastructure Best Practices - Japanese Version - #JPSPS
Ultimate SharePoint Infrastructure Best Practices - Japanese Version - #JPSPS
 
Microsoft と Digital Identity
Microsoft と Digital IdentityMicrosoft と Digital Identity
Microsoft と Digital Identity
 
Vdi を より使いやすいインフラにするためのセキュリティ設計
Vdi を より使いやすいインフラにするためのセキュリティ設計Vdi を より使いやすいインフラにするためのセキュリティ設計
Vdi を より使いやすいインフラにするためのセキュリティ設計
 
Active Directory 最新情報 2012.8.31 暫定版
Active Directory 最新情報 2012.8.31 暫定版Active Directory 最新情報 2012.8.31 暫定版
Active Directory 最新情報 2012.8.31 暫定版
 
Dynamic Access Control 演習編
Dynamic Access Control 演習編Dynamic Access Control 演習編
Dynamic Access Control 演習編
 
Dynamic Access Control 解説編
Dynamic Access Control 解説編Dynamic Access Control 解説編
Dynamic Access Control 解説編
 
SaaS としての IDM の役割
SaaS としての IDM の役割SaaS としての IDM の役割
SaaS としての IDM の役割
 
仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製する仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製する
 

Similar to Hyper-V を Windows PowerShell から管理する

PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理junichi anno
 
RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門Etsuji Nakai
 
Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Tech Summit 2016
 
Windows で PHP をビルドしてみた
Windows で PHP をビルドしてみたWindows で PHP をビルドしてみた
Windows で PHP をビルドしてみたy-uti
 
Windows server technical preview hyper v の新機能
Windows server technical preview hyper v の新機能Windows server technical preview hyper v の新機能
Windows server technical preview hyper v の新機能Syuichi Murashima
 
microPCFを使ってみよう
microPCFを使ってみようmicroPCFを使ってみよう
microPCFを使ってみようHiroaki_UKAJI
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefnpsg
 
Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf)
Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf) Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf)
Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf) VirtualTech Japan Inc.
 
Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf)
Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf) Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf)
Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf) VirtualTech Japan Inc.
 
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料Yasutaka Hamada
 
FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始めtetsusat
 
OpenStack Liberty をインストールしてみた
OpenStack Liberty をインストールしてみたOpenStack Liberty をインストールしてみた
OpenStack Liberty をインストールしてみたTakashi Umeno
 
「さくらのクラウド」におけるVyattaの活用事例
「さくらのクラウド」におけるVyattaの活用事例「さくらのクラウド」におけるVyattaの活用事例
「さくらのクラウド」におけるVyattaの活用事例SAKURA Internet Inc.
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境yut148atgmaildotcom
 
OpenShift v3 Technical Overview
OpenShift v3 Technical OverviewOpenShift v3 Technical Overview
OpenShift v3 Technical OverviewNakayama Kenjiro
 
RDOを使ったOpenStack Havana - Neutron 構築編
RDOを使ったOpenStack Havana - Neutron 構築編RDOを使ったOpenStack Havana - Neutron 構築編
RDOを使ったOpenStack Havana - Neutron 構築編VirtualTech Japan Inc.
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックEmma Haruka Iwao
 

Similar to Hyper-V を Windows PowerShell から管理する (20)

PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理
 
RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門
 
Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動
 
Lxc on cloud
Lxc on cloudLxc on cloud
Lxc on cloud
 
Windows で PHP をビルドしてみた
Windows で PHP をビルドしてみたWindows で PHP をビルドしてみた
Windows で PHP をビルドしてみた
 
Windows server technical preview hyper v の新機能
Windows server technical preview hyper v の新機能Windows server technical preview hyper v の新機能
Windows server technical preview hyper v の新機能
 
microPCFを使ってみよう
microPCFを使ってみようmicroPCFを使ってみよう
microPCFを使ってみよう
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
WebServerDevelopment
WebServerDevelopmentWebServerDevelopment
WebServerDevelopment
 
Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf)
Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf) Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf)
Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf)
 
Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf)
Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf) Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf)
Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf)
 
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
 
Version管理 1
Version管理 1Version管理 1
Version管理 1
 
FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始め
 
OpenStack Liberty をインストールしてみた
OpenStack Liberty をインストールしてみたOpenStack Liberty をインストールしてみた
OpenStack Liberty をインストールしてみた
 
「さくらのクラウド」におけるVyattaの活用事例
「さくらのクラウド」におけるVyattaの活用事例「さくらのクラウド」におけるVyattaの活用事例
「さくらのクラウド」におけるVyattaの活用事例
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
 
OpenShift v3 Technical Overview
OpenShift v3 Technical OverviewOpenShift v3 Technical Overview
OpenShift v3 Technical Overview
 
RDOを使ったOpenStack Havana - Neutron 構築編
RDOを使ったOpenStack Havana - Neutron 構築編RDOを使ったOpenStack Havana - Neutron 構築編
RDOを使ったOpenStack Havana - Neutron 構築編
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニック
 

More from junichi anno

V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...
V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...
V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...junichi anno
 
Microsoft Azure のセキュリティ
Microsoft Azure のセキュリティMicrosoft Azure のセキュリティ
Microsoft Azure のセキュリティjunichi anno
 
Azure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure ADAzure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure ADjunichi anno
 
Azure AD による Web API の 保護
Azure AD による Web API の 保護 Azure AD による Web API の 保護
Azure AD による Web API の 保護 junichi anno
 
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~junichi anno
 
個人情報を守るための アプリケーション設計(概要)
個人情報を守るためのアプリケーション設計(概要)個人情報を守るためのアプリケーション設計(概要)
個人情報を守るための アプリケーション設計(概要)junichi anno
 
IoT のセキュリティアーキテクチャと実装モデル on Azure
IoT のセキュリティアーキテクチャと実装モデル on AzureIoT のセキュリティアーキテクチャと実装モデル on Azure
IoT のセキュリティアーキテクチャと実装モデル on Azurejunichi anno
 
DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計
DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計
DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計junichi anno
 
Azure Active Directory 1枚資料 20151125版
Azure Active Directory 1枚資料 20151125版Azure Active Directory 1枚資料 20151125版
Azure Active Directory 1枚資料 20151125版junichi anno
 
リソーステンプレート入門
リソーステンプレート入門リソーステンプレート入門
リソーステンプレート入門junichi anno
 
File Server on Azure IaaS
File Server on Azure IaaSFile Server on Azure IaaS
File Server on Azure IaaSjunichi anno
 
Windows File Service 総復習-Windows Server 2012 R2編 第1版
Windows File Service 総復習-Windows Server 2012 R2編 第1版Windows File Service 総復習-Windows Server 2012 R2編 第1版
Windows File Service 総復習-Windows Server 2012 R2編 第1版junichi anno
 
Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...
Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...
Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...junichi anno
 
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版junichi anno
 
最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現
最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現
最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現junichi anno
 
クラウドにおける Windows Azure Active Directory の役割
クラウドにおける Windows Azure Active Directory の役割クラウドにおける Windows Azure Active Directory の役割
クラウドにおける Windows Azure Active Directory の役割junichi anno
 
Shared Nothing Live Migration で重要な「委任」について
Shared Nothing Live Migration で重要な「委任」についてShared Nothing Live Migration で重要な「委任」について
Shared Nothing Live Migration で重要な「委任」についてjunichi anno
 
Windows Server 2012 で管理をもっと自動化する
Windows Server 2012 で管理をもっと自動化するWindows Server 2012 で管理をもっと自動化する
Windows Server 2012 で管理をもっと自動化するjunichi anno
 
Power shell の基本操作と処理の自動化 v2_20120514
Power shell の基本操作と処理の自動化 v2_20120514Power shell の基本操作と処理の自動化 v2_20120514
Power shell の基本操作と処理の自動化 v2_20120514junichi anno
 

More from junichi anno (20)

V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...
V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...
V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...
 
Microsoft Azure のセキュリティ
Microsoft Azure のセキュリティMicrosoft Azure のセキュリティ
Microsoft Azure のセキュリティ
 
Azure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure ADAzure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure AD
 
Azure AD による Web API の 保護
Azure AD による Web API の 保護 Azure AD による Web API の 保護
Azure AD による Web API の 保護
 
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
 
Azure Key Vault
Azure Key VaultAzure Key Vault
Azure Key Vault
 
個人情報を守るための アプリケーション設計(概要)
個人情報を守るためのアプリケーション設計(概要)個人情報を守るためのアプリケーション設計(概要)
個人情報を守るための アプリケーション設計(概要)
 
IoT のセキュリティアーキテクチャと実装モデル on Azure
IoT のセキュリティアーキテクチャと実装モデル on AzureIoT のセキュリティアーキテクチャと実装モデル on Azure
IoT のセキュリティアーキテクチャと実装モデル on Azure
 
DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計
DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計
DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計
 
Azure Active Directory 1枚資料 20151125版
Azure Active Directory 1枚資料 20151125版Azure Active Directory 1枚資料 20151125版
Azure Active Directory 1枚資料 20151125版
 
リソーステンプレート入門
リソーステンプレート入門リソーステンプレート入門
リソーステンプレート入門
 
File Server on Azure IaaS
File Server on Azure IaaSFile Server on Azure IaaS
File Server on Azure IaaS
 
Windows File Service 総復習-Windows Server 2012 R2編 第1版
Windows File Service 総復習-Windows Server 2012 R2編 第1版Windows File Service 総復習-Windows Server 2012 R2編 第1版
Windows File Service 総復習-Windows Server 2012 R2編 第1版
 
Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...
Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...
Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...
 
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
 
最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現
最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現
最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現
 
クラウドにおける Windows Azure Active Directory の役割
クラウドにおける Windows Azure Active Directory の役割クラウドにおける Windows Azure Active Directory の役割
クラウドにおける Windows Azure Active Directory の役割
 
Shared Nothing Live Migration で重要な「委任」について
Shared Nothing Live Migration で重要な「委任」についてShared Nothing Live Migration で重要な「委任」について
Shared Nothing Live Migration で重要な「委任」について
 
Windows Server 2012 で管理をもっと自動化する
Windows Server 2012 で管理をもっと自動化するWindows Server 2012 で管理をもっと自動化する
Windows Server 2012 で管理をもっと自動化する
 
Power shell の基本操作と処理の自動化 v2_20120514
Power shell の基本操作と処理の自動化 v2_20120514Power shell の基本操作と処理の自動化 v2_20120514
Power shell の基本操作と処理の自動化 v2_20120514
 

Hyper-V を Windows PowerShell から管理する

  • 1. 勉強会キット Windows PowerShell 4.0 による Windows Server 2012 R2 の管理 ~ Hyper-V 編 第一版 2013.12.01 日本マイクロソフト株式会社 エバンジェリスト 安納 順一 Junichi Anno BLOG http://blogs.technet.com/junichia/ 1
  • 2. はじめに この勉強会キットでは、Windows PowerShell を使用してリモートコンピューターから Hyper-V を管理するための手法を学習します。 演習では Windows Server 2012 R2 と Hyper-V Server 2012 R2 を使用していますが、多 くの操作は旧バージョンの OS でも動作します。 この勉強会キットは3部構成になっています。 第1部 基本的な操作方法 このセクションではインストール直後の OS を、PowerShell のコマンドレットだけ を使用して Hyper-V が使用できるように環境設定していきます。 第2部 ライブマイグレーション このセクションでは、第1部でセットアップした Hyper-V 環境にさらに手を入れてラ イブマイグレーションが実行できるようにします。 第3部 Windows PowerShell エキスパートを目指す方へ 第1部、第2部では細かな技術解説は行っていません。このセクションでは、Windows PowrShell の細かいテクニックも含め、Windows Server 全般を管理するためのスクリ プトを作成するのに必要なテクニックについて解説しています。 2
  • 3. 事前準備 本勉強会キットの手順書に沿って学習する場合には、事前に以下の環境を準備してください。 なお、ホスト名やIPアドレスは演習中に Windows PowerShell コマンドレットを使用して 設定するので、事前設定は必要ありません。 いずれの OS も以下よりダウンロードできます (OSがインストールされたVHDファイルもダウンロードできます) http://technet.microsoft.com/ja-jp/evalcenter/dn205286.aspx 物理マシン Windows Server 2012 R2 (GUI使用サーバー) 物理マシン Hyper-V Server 2012 R2 Sysprep済の 仮想ハードディスク Windows Server 2012 R2 第1部で使用 第2部で使用 ライブマイグレーションを行う場合には2台の物理サーバーが必要です 3
  • 4. Agenda 第1部 基本的な操作方法 このセクションではインストール直後の OS を、PowerShell のコマンドレットだ けを使用して Hyper-V が使用できるように環境設定していきます。 第2部 ライブマイグレーション このセクションでは、第1部でセットアップした Hyper-V 環境にさらに手を入れ てライブマイグレーションが実行できるようにします。 第3部 Windows PowerShell エキスパートを目指す方へ 第1部、第2部では細かな技術解説は行っていません。このセクションでは、 Windows PowrShell の細かいテクニックも含め、Windows Server 全般を管理する ためのスクリプトを作成するのに必要なテクニックについて解説しています。 4
  • 6. 1台目の Windows Server 1. Windows Server 2012 R2 のインストール 2. Windows PowerShell の基本設定  統合スクリプト環境の起動  実行ポリシーの設定  リモーティングの設定 3. 4. Windows Server の基本設定  IP アドレスの設定  DNS の設定  ローカルコンピューター名の設定  Windows Update の実行 Hyper-V の構成  Hyper-V 役割のインストール  Hyper-V ホストの規定値を変更する  仮想ハードディスクの保存先  仮想マシンの保存先  Hyper-V レプリカの有効化  仮想スイッチの作成 5. DNS サーバーの構成  DNS サーバー役割のインストール  DNS ゾーンの確認 6. Active Directory ドメインの構成  AD DS 役割のインストール  Active Directory ドメインの構築 7. DHCP Server の構成  DHCP サービスのインストール  DHCP サービスを構成する  スコープを作成する 8. 仮想マシンの構成  ゲスト OS の作成  ゲスト OS の初期設定  ゲスト OS の環境設定 6
  • 7. 1.Windows Server 2012 R2 のインストール ① Windows Server 2012 R2 を「GUI付き」で普通にインストール してください。ここでは Windows PowerShell は使用しません。 以降の手順で Windows PowerShell を使用して環境設定を行い ます。 7
  • 8. 2. Windows PowerShell の基本設定 統合スクリプト環境の起動 ① Windows Server 2012 R2 にサインインする ② デスクトップのタスクバーに登録されている Windows PowerShell アイコンをク リックして PowerShell コンソールを起動する。 ③ 一度コンソールを閉じる ④ Windows PowerShell アイコンを「右クリック」して「ISE を管理者として実行 する」を選択し、ISE(統合スクリプト環境)を起動する。 スクリプトエディタ スクリプト実行画面 コマンドレットを直接実行 コ マ ン 文字が小さい場合には ド [Ctrl]+[+] で拡大できます。 レ [Ctrl] + [-] で縮小できます。 ッ ト 検 索 8
  • 9. 実行ポリシーの設定 ① 以下のコマンドレットを実行し、ローカルで作成したスクリプトは署名なしで実行 できるように実行ポリシーを変更する PS C:¥>Set-ExecutionPolicy RemoteSigned リモーティングの有効化 ① 以下のコマンドレットを実行し、PowerShell によるリモート管理を有効にする PS C:¥>Enable-PSRemoting –force 9
  • 10. 3. Windows Server の基本設定 IP アドレスの設定 ① ネットワークアダプタの一覧を表示し、IPアドレスを設定するネットワークカードの InterfaceIndex を特定する PS C:¥> Get-NetAdapter | FT Name, InterfaceIndex, InterfaceDescription ② ターゲットとなるネットワークアダプターの情報を確認する(以下の例では InterfaceIndex = 13 としている) PS C:¥> Get-NetIPAddress -InterfaceIndex 13 -AddressFamily IPv4 ③ 既定では DHCP を利用するように設定されているので、以下のコマンドを使用して静的な IP アドレスを設定する PS C:¥>New-NetIPAddress -InterfaceIndex 13 -IPAddress 192.168.0.1 -AddressFamily IPv4 -PrefixLength 24 -DefaultGateway 192.168.0.254 ※ DefaultGateway は必要に応じて ※ 既存の静的アドレスを変更する場合には Set-NetIPAddress を使用する 10
  • 11. DNS の設定 ① DNS サーバーのアドレスを設定する PS C:¥>Set-DnsClientServerAddress -Interface 24 -ServerAddress 192.168.0.1 ※ 複数の DNS サーバーが存在する場合にはカンマで区切って指定する 参考 IP アドレスの削除 PS C:¥> Remove-IPAddress -InterfaceIndex 24 -AddressFamily IPv4 DNSの設定を削除する PS C:¥> Set-DnsClientServerAddress -Interface 24 -ResetServerAddress DHCP を有効にする PS C:¥> Set-NetIPInterface -InterfaceIndex 24 -Dhcp Enabled 11
  • 12. ローカルコンピューター名を設定する ① 現在のコンピューター名を取得する PS C:¥> $Env:ComputerName ② 新しいコンピューター名を設定し、再起動する PS C:¥> Rename-Computer -NewName “HV01” -Force -Restart 12
  • 13. Windows Update を実行する ① 以下のコマンドを実行して、Windows Update PowerShell Module をダウンロードする PS C:¥> $web = New-Object System.Net.WebClient PS C:¥> $zipfile = "http://gallery.technet.microsoft.com/scriptcenter/” PS C:¥> $zipfile = $zipfile + “2d191bcd-3308-4edd-9de2-88dff796b0bc/file/41459/28/PSWindowsUpdate.zip" PS C:¥> $web.DownloadFile($zipfile, "C:¥tmp¥PSWindowsUpdate.zip") 上記コマンドでダウンロードできない場合には、以下のサイトから Windows Update PowerShell Module の最新版をダウンロードしてください http://gallery.technet.microsoft.com/scriptcenter/2d191bcd-3308-4edd-9de2-88dff796b0bc ※「Windows Update PowerShell Modules」で検索すればヒットします ② 以下のコマンドを使用して、ダウンロードした PSWindowsUpdate.zip ファイルを適当な場所に 展開する。ここでは C:¥tmp フォルダに展開しています。 PS C:¥> Add-Type -AssemblyName System.IO.Compression.FileSystem PS C:¥> $ZipFile = Get-Item C:¥tmp¥PSWindowsUpdate.zip PS C:¥> [IO.Compression.ZipFile]::ExtractToDirectory( $ZipFile, ‘C:¥tmp’ ) ③ Dir コマンドで、 PSWindowsUpdate フォルダが作成されていることを確認 13
  • 14. ④ 以下のコマンドを実行し、フォルダの中に格納されているすべてのファイルの「ブロック 解除」を行う。この操作はファイルのプロパティ画面から「ブロックの解除」を行うのと 同様である。 PS C:¥>Unblock-File <ファイルの保存先>¥*.* (例) PS C:¥>Unblock-File c:¥tmp¥PSWindowsUpdate¥*.* ⑤ PowerShell モジュールの格納場所を確認する PS C:¥>$env:PSModulePath C:¥Users¥Administrator¥Documents¥WindowsPowerShell¥Modules;C:¥windows¥system32¥Wind owsPowerShell¥v1.0¥Modules¥;C:¥Program Files (x86)¥Microsoft SDKs¥Windows Azure¥PowerShell¥ ⑥ 既定では C:¥Users¥junichia¥Documents¥WindowsPowerShell¥Modules が存在しない ので、以下のコマンドで PowerShell モジュールの格納場所を作成する PS C:¥> md C:¥Users¥Administrator¥Documents¥WindowsPowerShell¥Modules 14
  • 15. ⑦ 以下のコマンドを実行し PSWindowsUpdate フォルダーを C:¥Users¥Administrator¥Documents¥WindowsPowerShell¥Modules 配下に移動する 以下の例では PSWindowsUpdate フォルダーは C:¥tmp にあるものとしている PS C:¥> Move C:¥tmp¥PSWindowsUpdate C:¥Users¥Administrator¥Documents ¥WindowsPowerShell¥Modules ⑧ PSWindowsUpdate モジュールを読み込む PS C:¥> Import-Module PSWindowsUpdate ⑨ Windows Update を実行する PS C:¥> Get-WUInstall -AcceptAll 15
  • 16. 4. Hyper-V の構成 Hyper-V 役割をインストールする ① 以下のコマンドで現在インストールされている役割と機能の一覧を参照する PS C:¥> Get-WindowsFeature ② 以下のコマンドを実行して、Hyper-V 役割と管理ツール群をインストールし再起動する PS C:¥> Add-WindowsFeature Hyper-V -IncrudeAllSubFeature -IncludeManagementTools -Restart ③ Hyper-V 関連のコマンドレットを確認する PS C:¥> Get-Command -Module Hyper-V 16
  • 17. Hyper-V ホストの設定値を変更する ① Hyper-V ホストの規定値を確認する PS C:¥> Get-VMHost | FL ② 仮想ハードディスクの既定の保存先を設定する ※以下の例では仮想ハードディスクの既定の保存先を D:¥VM に指定しています PS C:¥> Set-VMHost -VirtualHardDiskPath D:¥VM ③ 仮想ハードディスクの構成ファイルの既定の保存先を設定する PS C:¥> Set-VMHost -VirtualMachinePath D:¥VM 17
  • 18. Hyper-Vレプリカを有効にする ① Hyper-V レプリカの設定値を確認する PS C:¥> Get-VMReplicationServer | FL ② Hyper-V レプリカを有効にし、認証タイプを Kerberos にする PS C:¥> Set-VMReplicationServer -ReplicationEnabled $True -AllowedAuthenticationType Kerberos ③ どんなサーバーからの複製も受け入れ、複製の保存先を D:¥VM に設定する PS C:¥> Set-VMReplicationServer -ReplicationAllowedFromAnyServer $True -DefaultStorageLocation D:¥VM ④ Windows Firewall の受信規則を確認する PS C:¥> Get-NetFirewallRule -Direction Inbound 18
  • 19. ⑤ Windows Firewall の受信規則の中から、Hyper-V レプリカに関する設定を確認する PS C:¥> Get-NetFirewallRule -Direction Inbound -Desctiption *レプリカ* ※ HTTP と HTTPS に関する規則が存在することがわかります ※ それぞれ、ルール名で保存されています HTTP : VIRT-HVRHHTTPL-In-TCP-NoScope HTTPS : VIRT-HVRHHTTPSL-In-TCP-NoScope ⑥ “Hyper-V レプリカ HTTP リスナー(TCP受信)”規則を有効にする PS C:¥> Set-NetFirewallRule -Name “VIRT-HVRHTTPL-In-TCP-NoScope” -Enabled True $ は必要ありません 19
  • 20. 仮想スイッチの作成 ① 仮想スイッチの一覧を表示する PS C:¥> Get-VMSwitch ※まだ仮想スイッチは存在しません ② ネットワークアダプターの一覧を表示し、外部仮想スイッチにバインドするネットワーク アダプターの Name 値を確認する PS C:¥> Get-NetAdapter | FL ③ 新しい外部スイッチを “ExternalSwitch” という名前で作成する。以下の例ではバインド 先のネットワークアダプタ名は“イーサネット”として指定している。 PS C:¥> New-VMSwitch -Name “ExternalSwitch” -NetAdapterInterName “イーサネット” -AllowManagementOS $True ④ ②で確認したHyper-V ホストの NIC が仮想化され、“ExternalSwitch”に接続されたこと を確認する PS C:¥> Get-NetAdapter | FL ※ “vEthernet (ExternalSwitch)” という仮想NIC が新たに作成されたことを確認してく ださい 20
  • 21. 5. DNS サーバーを構成する DNSサーバー役割をインストールする ① DNS をインストールする PS C:¥> Add-WindowsFeature dns -IncludeManagementTools -IncrudeAllSubFeature -Restart ② DNS サービス関連のコマンドレットを確認する PS C:¥> Get-Command *DNSServer* DNS ゾーン の確認 ① 現在のゾーン設定を確認する PS C:¥> Get-DNSServerZone 現時点ではゾーンは存在しません。以降の手順でActive Directory ドメインを構築します。 21
  • 22. 6. Active Directory ドメインを構成する Active Directory Domain Service (AD DS)役割をインストールする ① AD DS をインストールする PS C:¥> Add-WindowsFeature AD-Domain-Services -IncludeManagementTools -IncrudeAllSubFeature -Restart ② AD DS 関連のコマンドレットを確認する PS C:¥> Get-Command -module ActiveDirectory Active Directory ドメインを構築する ここでは Contoso.com ドメインを作成します ① 必要なモジュールをインポートする PS C:¥> Import-Module ADDSDeployment ② 以下のコマンドを実行して回復モードパスワードを SecureString に変換し、$Password 変数に格納する。ここではパスワードを P@ssw0rd としています。 PS C:¥> $Password = ConvertTo-SecureString “P@ssw0rd” -AsPlainText -Force 22
  • 23. ③ ドメインコントローラーに昇格する ※ 以下は便宜上改行していますが、実際には1行で入力してください PS C:¥> Install-ADDSForest -CreateDnsDelegation:$False -DatabasePath “C:¥Windows¥NTDS” -DomainMode “Win2012R2” -DomainName “contoso.com” -DomainNetbiosName “CONTOSO” -ForestMode “Win2012R2” -InstallDns:$True -LogPath C:¥Windows¥NTDS” -NoRebootOnCompletion:$False -SysvolPath “C:¥Windows¥Sysvol” -SafeModeAdministratorPassword $Password -Force:$True インストールが完了すると自動的に再起動されます。 23
  • 24. ④ Contoso.com ゾーンが作成されていることを確認する PS C:¥> Get-DNSServerZone -Name contoso.com | FL 24
  • 25. 7. DHCP サーバーを構成する DHCP サービスをインストールする 今後仮想マシンを作成した際にアドレスをリースできるようにするため、DHCPサーバーを セットアップしておきます。 ① 以下のコマンドで DHCP サービスをインストールする PS C:¥> Add-WindowsFeature DHCP -IncrudeAllSubFeature -IncludeManagementTools -Restart ※ -Restart パラメタは、再起動が必要な場合に限って再起動が行われます。DHCPサービスのインストールでは再起動は 行われません。 ② DHCPサービス関連のコマンドレットを確認する PS C:¥> Get-Command *DHCP* 25
  • 26. DHCP サービスを構成する ① DHCP サーバーのバインディングが 192.168.0.1 に設定されていることを確認する ※バインディングが有効にされた NIC を通じて DHCP サービスによる IP アドレスリースが行われます PS C:¥> Get-DHCPServerV4Binding BindingState が True であることを確認してください。 ② DHCP サービスのバインディングを 192.168.0.1 に設定する(設定されていない場合) ※事前に Get-NetAdapter で NIC の Name プロパティを確認してください。以下の例で -InterfaceAlias に指定している値は NIC の Name プロパティです。 PS C:¥>Set-DHCPServerV4Binding -InterfaceAlias “vEthernet (ExternalSwitch)” -BindingState $True ③ DHCP サービスを Active Directory で承認する PS C:¥> Add-DHCPServerInDC -DnsName contoso.com ④ DHCP サービスに必要なセキュリティグループを作成する ※Netsh コマンドを使用します PS C:¥> Netsh dhcp add SecurityGroups 26
  • 27. ⑤ DHCP サービスを再起動 PS C:¥> Restart-Service DHCPServer ⑥ もしサーバーマネージャー上に「DHCP サーバーの構成が必要です」が表示され続けるよ うであれば、以下のコマンドを実行してアラートをリセットする PS C:¥> Set-ItemProperty –Path registry::HKLM¥SOFTWARE¥Microsoft¥ServerManager¥Roles¥12 –Name ConfigurationState –Value 2 27
  • 28. スコープを作成する ① IPV4 のスコープを追加 PS C:¥>Add-DHCPServerV4Scope -StartRange 192.168.0.10 -EndRange 192.168.0.20 -SubnetMask 255.255.255.0 -Name “Scope for VMs” -State Active ② 追加したスコープを表示し、Scope ID を確認する ※ この演習では 192.168.0.0 と設定されているはず PS C:¥>Get-DHCPServerV4Scope ③ 作成したスコープに DNS Server を追加する PS C:¥> Set-DhcpServerV4ScopeOptionValue -ScopeID 192.168.0.0 -DnsServer 192.168.0.1 28
  • 29. 8. 仮想マシンの構成 ここでは既に OS がインストールされている仮想ハードディスクを使用して、新しいゲ ストOSを作成します ゲスト OS の作成 ① ゲストOSの一覧を取得する ※何も表示されません PS C:¥> Get-VM ② ゲストOS を作成する この例では VM01 という名前のゲストOSを作成します。仮想マシンの世代は「第一世代」 としています。また、仮想ハードディスクの保存先は D:¥VMs¥VM01.vhd です。 PS C:¥> New-VM -Name “VM01” -MemoryStartupBytes 1024MB -VHDPath D:¥VMs¥VM01.vhd -SwitchName “ExternalSwitch” -Generation 1 -BootDevice IDE 29
  • 30. ③ 作成したゲストOS VM01 の設定値を確認する PS C:¥> Get-VM -Name VM01 | FL ④ 動的メモリを有効にし、仮想CPUの割り当て数を 2 に変更する PS C:¥> Set-VM -Name VM01 -ProcessorCount 2 -DynamicMemory ⑤ ゲストOSを起動する PS C:¥> Start-VM VM01 30
  • 31. ゲスト OS の初期設定(この部分だけゲストOS側で実施します) この演習では、ゲスト OS として Sysprep が適用された Windows Server 2012 R2 を使用しています。 ※評価版ダウンロードサイトからダウンロードした「VHD」ファイル そのため、リモート(Hyper-V ホスト)からの管理を有効にするには、Hyper-V マネージャーからゲス ト OS 「VM01」に接続して、以下の操作を行う必要があります。 • • OOBE セットアップ • 言語の選択(規定値は英語です) • 利用許諾への合意 • パスワードの設定(言語で En-US を選択した場合、キーボード配列は 101/102 となります。ご 注意ください) パスワードとして P@ssw0rd を使用する場合、 101/102 キーボードの場合、「@」は [Shift] + [2] となります。 ゲストOSの PowerShell コンソールから以下を実行してリモーティングを有効化 PS C:¥> Enable-PSRemoting -Force • ゲストOS の PowerShell コンソールから ネットワーク探索を有効化 PS C:¥> netsh advfirewall firewall set rule group=”network discovery” new enable=yes 31
  • 32. ゲスト OS の環境設定を行う ※この操作は Hyper-V ホスト側でおこないます ① ゲストOSをリモート管理するために、Hyper-V ホスト側の TrustedHosts の設定を行う PS C:¥> Set-Item WSMan:¥localhost¥Client¥TrustedHosts 192.168.0.* -Concatenate ② ゲストOSに接続するための資格情報を作成する ※ここではゲストOSのパスワードが P@ssw0rd であるとします PS C:¥> $User = “Administrator” PS C:¥> $Pass = ConvertTo-SecureString “P@ssw0rd” -AsPlainText -Force PS C:¥> $Cred = New-Object System.Management.Automation.PSCredential $user, $pass ③ ゲストOSにリースされているIPアドレスを確認する PS C:¥> Get-DhcpServerV4Lease -ScopeId 192.168.0.0 ④ 作成したクレデンシャルを使用して、ゲストOSに接続する ※ ゲストOS VM01 には、DHCPサーバーより 192.168.0.11 がリースされているものとします PS C:¥> Enter-PSSession 192.168.0.11 -Credential $Cred 32
  • 33. ⑤ ゲストOS のネットワークアダプター情報を確認する (InterfaceIndex を確認してください) ※ゲストOSのセッションに接続したまま実行します [192.168.0.11] :PS C:¥> Get-NetAapter ⑥ ゲストOS のIPアドレスを確認する(InterfaceIndex = 12 としています) ※PrefixOrigin が DHCPであることを確認してください ※ゲストOSのセッションに接続したまま実行します [192.168.0.11] :PS C:¥> Get-NetIPAddress -InterfaceIndex 12 -AddressFamily IPv4 ⑦ ゲスト OS の IP アドレスを 192.168.0.100 に設定する ※ゲストOSのセッションに接続したまま実行します [192.168.0.11] :PS C:¥> New-NetIPAddress -InterfaceIndex 12 -IPAddress 192.168.0.100 -AddressFamily IPv4 -PrefixLength 24 このコマンドを実行すると ゲストOSのIPアドレス変更によってセッションが切断されます。 これは正しい動作です。自動的に再接続が試みられますが、[Ctrl]+[C] でキャンセルして ください。 33
  • 34. ⑧ 再度ゲストOSに接続する PS C:¥> $User = “Administrator” PS C:¥> $Pass = ConvertTo-SecureString “P@ssw0rd” -AsPlainText -Force PS C:¥> $Cred = New-Object System.Management.Automation.PSCredential $user, $pass PS C:¥> Enter-PSSession 192.168.0.100 -Credential $Cred [192.168.0.100] :PS C:¥> ⑨ DNSサーバーの設定を行う ※ゲストOSのセッションに接続したまま実行します [192.168.0.100] PS C:¥>Set-DnsClientServerAddress -Interface 12 -ServerAddress 192.168.0.1 ⑩ コンピューター名を変更する ※ゲストOSのセッションに接続したまま実行します [192.168.0.100] :PS C:¥> Rename-Computer -NewName “HV01” -Force -Restart ⑪ セッションを閉じる [192.168.0.100] :PS C:¥> Exit PS C:¥> 34
  • 35. ⑫ VM01 を DNS に登録する PS C:¥> Add-DnsServerResourceRecordA -Name VM01 -IPAddress 192.168.0.100 -ZoneName contoso.com ⑬ 再度ゲストOSに接続する PS C:¥> $User = “Administrator” PS C:¥> $Pass = ConvertTo-SecureString “P@ssw0rd” -AsPlainText -Force PS C:¥> $Cred = New-Object System.Management.Automation.PSCredential $user, $pass PS C:¥> Enter-PSSession 192.168.0.100 -Credential $Cred [192.168.0.100] :PS C:¥> 35
  • 36. ⑫ VM01 を ドメインに参加させる ※ゲストOSのセッションに接続したまま実行します [192.168.0.100] :PS C:¥> $Domain = “contoso.com” [192.168.0.100] :PS C:¥> $Client = $Env:COMPUTERNAME [192.168.0.100] :PS C:¥> $User = “Administrator” [192.168.0.100] :PS C:¥> $Pass = ConvertTo-SecureString “P@ssw0rd” -AsPlainText -Force [192.168.0.100] :PS C:¥> $Cred = New-Object System.Management.Automation.PSCredential $user , $pass [192.168.0.100] :PS C:¥> $DomainUser = “Contoso¥Administrator” [192.168.0.100] :PS C:¥> $DomainPass = ConvertTo-SecureString “P@ssw0rd” -AsPlainText -Force [192.168.0.100] :PS C:¥> $DomainCred = New-Object System.Management.Automation.PSCredential $DomainUser , $DomainPass [192.168.0.100] :PS C:¥> Add-Computer -ComputerName $Clienit -LocalCredential $Cred -Credential $DomainCred -DomainName $Domain ⑬ セッションを閉じる [192.168.0.100] :PS C:¥> Exit PS C:¥> 36
  • 37. ⑫ 仮想マシン VM01 を再起動する PS C:¥> Restart-VM VM01 -Force ⑬ 資格情報なしで VM01 に接続できることを確認する PS C:¥> Enter-PSSession VM01 [VM01]: PS C:¥> ⑭ セッションを閉じる [VM01]: PS C:¥> Exit PS C:¥> 37
  • 38. 第2部 ライブマイグレーション このセクションでは、第1部で作成した環境に Hyper-V サーバーをもう1台加 え、ライブマイグレーションが行える環境を構築します。 もちろん、各種設定は Windows PowerShell のみで行います。 38
  • 39. 以降の作業ではライブマイグレーションを行うため、Hyper-V がインストールされた2台目 の Windows Server が必要となります。ここでは、Hyper-V Server 2012 R2 を使用してい ます。 2台目の Windows Server 9. Hyper-V Server 2012 R2 のインストール 10. Windows PowerShell の基本設定  実行ポリシーの設定  リモーティング(リモート管理)の設定 11. Windows Server の基本設定  IP アドレスの設定  DNS の設定  コンピューター名の設定  Active Directory ドメインへの参加  Windows Update の実行 12. Hyper-V の構成  PowerShell モジュールのインストール  Hyper-V ホストの規定値を変更する • 仮想ハードディスクの保存先 • 仮想マシンの保存先  Hyper-V レプリカの有効化  仮想スイッチの作成 ライブマイグレーションの設定を実行 ※1台目のサーバー HV01 で実施 13. ライブマイグレーションの環境設定  ライブマイグレーションの有効化  仮想マシンの「プロセッサの互換性」の設定  委任の設定 14. ライブマイグレーションの実行 39
  • 40. 9. Hyper-V Server 2012 R2 のインストール 2台目の PC を用意し、Hyper-V がインストールされた Windows Server 2012 R2 を用意してください。 ここでは Hyper-V Server 2012 R2 を使用します。 Hyper-V Server 2012 R2 をインストールすると自動的に Hyper-V もイ ンストールされます。 40
  • 41. 10. Windows PowerShell の基本設定 Hype-V Server 2012 R2 では統合スクリプト環境(ISE)を使用することはできません。 スクリプト環境の起動 ① Hyper-V Server 2012 R2 にサインインする ② コマンドプロンプトで以下のコマンドを実行して PowerShell コンソールを起動する。プロン プトが 「PS」に変わったことを確認してください。 C:¥> PowerShell PS C:¥> 実行ポリシーの設定 ① 以下のコマンドレットを実行し、ローカルで作成したスクリプトは署名なしで実行できるよう に実行ポリシーを変更する PS C:¥>Set-ExecutionPolicy RemoteSigned リモーティングの有効化 ① 以下のコマンドレットを実行し、PowerShell によるリモート管理を有効にする PS C:¥>Enable-PSRemoting –force 41
  • 42. 11. Hyper-V Server の基本設定 IP アドレスの設定 ① ネットワークアダプタの一覧を表示し、IPアドレスを設定するネットワークカードの InterfaceIndex を特定する PS C:¥> Get-NetAdapter | FT Name, InterfaceIndex, InterfaceDescription ② ターゲットとなるネットワークアダプターの情報を確認する(以下の例では InterfaceIndex = 13 としている) PS C:¥> Get-NetIPAddress -InterfaceIndex 13 -AddressFamily IPv4 ③ 既定では DHCP を利用するように設定されているので、以下のコマンドを使用して静的な IP アドレスを設定する PS C:¥>New-NetIPAddress -InterfaceIndex 13 -IPAddress 192.168.0.2 -AddressFamily IPv4 -PrefixLength 24 ※ DefaultGateway は必要に応じて ※ 既存の静的アドレスを変更する場合には Set-NetIPAddress を使用する 42
  • 43. DNS の設定 ① DNS サーバーのアドレスを設定する PS C:¥>Set-DnsClientServerAddress -Interface 13 -ServerAddress 192.168.0.1 ※ 複数の DNS サーバーが存在する場合にはカンマで区切って指定する 参考 IP アドレスの削除 PS C:¥> Remove-IPAddress -InterfaceIndex 24 -AddressFamily IPv4 DNSの設定を削除する PS C:¥> Set-DnsClientServerAddress -Interface 24 -ResetServerAddress DHCP を有効にする PS C:¥> Set-NetIPInterface -InterfaceIndex 24 -Dhcp Enabled 43
  • 44. ローカルコンピューター名を設定する ① 現在のコンピューター名を取得する PS C:¥> $Env:ComputerName ② 新しいコンピューター名を設定し、再起動する PS C:¥> Rename-Computer -NewName “HV02” -Force -Restart ③ 再起動後サインインして、再度 PowerShell コンソールを起動する C:¥> PowerShell PS C:¥> 44
  • 45. Hyper-V Server “HV02” を Contoso ドメインに参加させる ① ドメインに参加させる PS C:¥> $Domain = “contoso.com” PS C:¥> $Client = $Env:COMPUTERNAME PS C:¥> $User = “Administrator” PS C:¥> $Pass = ConvertTo-SecureString “P@ssw0rd” -AsPlainText -Force PS C:¥> $Cred = New-Object System.Management.Automation.PSCredential $user , $pass PS C:¥> $DomainUser = “Contoso¥Administrator” PS C:¥> $DomainPass = ConvertTo-SecureString “P@ssw0rd” -AsPlainText -Force PS C:¥> $DomainCred = New-Object System.Management.Automation.PSCredential $DomainUser , $DomainPass PS C:¥> Add-Computer -ComputerName $Clienit -LocalCredential $Cred -Credential $DomainCred -DomainName $Domain ② コンピューターを再起動する PS C:¥> Restert-Computer ③ 再起動後、ドメインアカウント(contoso¥administrator)でサインインしてください 45
  • 46. Windows Update を実行する ① 以下のコマンドを実行して、Windows Update PowerShell Module をダウンロードする PS C:¥> $web = New-Object System.Net.WebClient PS C:¥> $zipfile = "http://gallery.technet.microsoft.com/scriptcenter/” PS C:¥> $zipfile = $zipfile + “2d191bcd-3308-4edd-9de2-88dff796b0bc/file/41459/28/PSWindowsUpdate.zip" PS C:¥> $web.DownloadFile($zipfile, "C:¥tmp¥PSWindowsUpdate.zip") 上記コマンドでダウンロードできない場合には、以下のサイトから Windows Update PowerShell Module の最新版をダウンロードしてください http://gallery.technet.microsoft.com/scriptcenter/2d191bcd-3308-4edd-9de2-88dff796b0bc ※「Windows Update PowerShell Modules」で検索すればヒットします ② 以下のコマンドを使用して、ダウンロードした PSWindowsUpdate.zip ファイルを適当な場所に 展開する。ここでは C:¥tmp フォルダに展開しています。 PS C:¥> Add-Type -AssemblyName System.IO.Compression.FileSystem PS C:¥> $ZipFile = Get-Item C:¥tmp¥PSWindowsUpdate.zip PS C:¥> [IO.Compression.ZipFile]::ExtractToDirectory( $ZipFile, ‘C:¥tmp’ ) ③ Dir コマンドで、 PSWindowsUpdate フォルダが作成されていることを確認 46
  • 47. ④ 以下のコマンドを実行し、フォルダの中に格納されているすべてのファイルの「ブロック 解除」を行う。この操作はファイルのプロパティ画面から「ブロックの解除」を行うのと 同様である。 PS C:¥>Unblock-File <ファイルの保存先>¥*.* (例) PS C:¥>Unblock-File c:¥tmp¥PSWindowsUpdate¥*.* ⑤ PowerShell モジュールの格納場所を確認する PS C:¥>$env:PSModulePath C:¥Users¥Administrator¥Documents¥WindowsPowerShell¥Modules;C:¥windows¥system32¥Wind owsPowerShell¥v1.0¥Modules¥;C:¥Program Files (x86)¥Microsoft SDKs¥Windows Azure¥PowerShell¥ ⑥ 既定では C:¥Users¥junichia¥Documents¥WindowsPowerShell¥Modules が存在しない ので、以下のコマンドで PowerShell モジュールの格納場所を作成する PS C:¥> md C:¥Users¥Administrator¥Documents¥WindowsPowerShell¥Modules 47
  • 48. ⑦ 以下のコマンドを実行し PSWindowsUpdate フォルダーを C:¥Users¥Administrator¥Documents¥WindowsPowerShell¥Modules 配下に移動する 以下の例では PSWindowsUpdate フォルダーは C:¥tmp にあるものとしている PS C:¥> Move C:¥tmp¥PSWindowsUpdate C:¥Users¥Administrator¥Documents ¥WindowsPowerShell¥Modules ⑧ PSWindowsUpdate モジュールを読み込む PS C:¥> Import-Module PSWindowsUpdate ⑨ Windows Update を実行する PS C:¥> Get-WUInstall -AcceptAll 48
  • 49. 12. Hyper-V の構成 Hyper-V Server には既にHyper-Vの役割がインストールされていますが、PowerShell 管理 用モジュールはインストールされていません。ここでは管理モジュールをインストールします。 Windows PowerShell 用 Hyper-V モジュールをインストールする ① 以下のコマンドで現在インストールされている役割と機能の一覧を参照する PS C:¥> Get-WindowsFeature ② 以下のコマンドを実行して、Windows PowerShell 用 Hyper-V モジュールをインストー ルする PS C:¥> Add-WindowsFeature Hyper-V-PowerShell -IncludeAllSubFeature ③ Hyper-V 関連のコマンドレットを確認する PS C:¥> Get-Command -Module Hyper-V 49
  • 50. Hyper-V ホストの設定値を変更する ① Hyper-V ホストの規定値を確認する PS C:¥> Get-VMHost | FL ② 仮想ハードディスクの既定の保存先を設定する ※以下の例では仮想ハードディスクの既定の保存先を E:¥VM に指定しています PS C:¥> Set-VMHost -VirtualHardDiskPath E:¥VM ③ 仮想ハードディスクの構成ファイルの既定の保存先を設定する PS C:¥> Set-VMHost -VirtualMachinePath E:¥VM 50
  • 51. Hyper-Vレプリカを有効にする ① Hyper-V レプリカの設定値を確認する PS C:¥> Get-VMReplicationServer | FL ② Hyper-V レプリカを有効にし、認証タイプを Kerberos にする PS C:¥> Set-VMReplicationServer -ReplicationEnabled $True -AllowedAuthenticationType Kerberos ③ どんなサーバーからの複製も受け入れ、複製の保存先を E:¥VM に設定する PS C:¥> Set-VMReplicationServer -ReplicationAllowedFromAnyServer $True -DefaultStorageLocation E:¥VM ④ Windows Firewall の受信規則を確認する PS C:¥> Get-NetFirewallRule -Direction Inbound 51
  • 52. ⑤ Windows Firewall の受信規則の中から、Hyper-V レプリカに関する設定を確認する PS C:¥> Get-NetFirewallRule -Direction Inbound -Desctiption *レプリカ* ※ HTTP と HTTPS に関する規則が存在することがわかります ※ それぞれ、ルール名で保存されています HTTP : VIRT-HVRHHTTPL-In-TCP-NoScope HTTPS : VIRT-HVRHHTTPSL-In-TCP-NoScope ⑥ “Hyper-V レプリカ HTTP リスナー(TCP受信)”規則を有効にする PS C:¥> Set-NetFirewallRule -Name “VIRT-HVRHTTPL-In-TCP-NoScope” -Enabled True $ は必要ありません 52
  • 53. 仮想スイッチの作成 ライブマイグレーションを実行するには、HV01と同じ名前の仮想スイッチを作成しておく必 要があります) ① ネットワークアダプターの一覧を表示し、外部仮想スイッチにバインドするネットワーク アダプターの Name 値を確認する PS C:¥> Get-NetAdapter | FL ② 新しい外部スイッチを “ExternalSwitch” という名前で作成する。以下の例ではバインド 先のネットワークアダプタ名は“イーサネット”として指定している。 PS C:¥> New-VMSwitch -Name “ExternalSwitch” -NetAdapterInterName “イーサネット” -AllowManagementOS $True ③ ②で確認したHyper-V ホストの NIC が仮想化され、“ExternalSwitch”に接続されたこと を確認する PS C:¥> Get-NetAdapter | FL ※ “vEthernet (ExternalSwitch)” という仮想NIC が新たに作成されたことを確認してく ださい 53
  • 54. ⑤ 仮想スイッチ ExternalSwitch が作成されたことを確認する PS C:¥> Get-VMSwitch 54
  • 55. 13.ライブマイグレーションの有効化と実行 ここまでの作業で以下のような環境が構築できました。 ここからは HV01 と HV02 間でライブマイグレーションを行うための設定をしていきます。 ここからの作業は HV01 上の PowerShell ISE から実行します。 Active Directory ドメイン Contoso.com 物理マシン 物理マシン Windows Server 2012 R2 Hyper-V Server 2012 R2 (GUI使用サーバー) HV01 192.168.0.1 • • • • Hyper-V AD DS DNS DHCP 仮想スイッチ ExternalSwitch 仮想マシン Windows Server 2012 R2 HV02 192.168.0.2 • Hyper-V VM01 192.168.0.3 仮想スイッチ ExternalSwitch 55
  • 56. ここからの作業は HV01 上から実行します。 Hyper-V ホストのライブマイグレーションを有効にする ① HV01 と HV02 のライブマイグレーションを有効にする PS C:¥> Enable-VMMigration -ComputerName HV01, HV02 ② 任意のネットワークカードを使用してライブマイグレーションを受信できるようにする Set-VMHost -ComputerName HV01, HV02 -UseAnyNetworkForMigration $True ③ パフォーマンスオプションを「圧縮」モードに設定する Set-VMHost -ComputerName HV01, HV02 -VirtualMachineMigrationPerformanceOption Compression ④ ライブマイグレーションの認証プロトコルを「Kerberos」に設定する Set-VMHost -ComputerName HV01, HV02 -VirtualMachineMigrationAuthenticationType Kerberos 56
  • 57. ⑤ 同時に移行できる仮想マシンの数を 10 に変更する PC C:¥> Set-VMHost -ComputerName HV01, HV02 -MaximumVirtualMachineMigrations 10 移行の対象となる仮想マシンの「プロセッサの互換性」を設定する ライブマイグレーションに使用する物理コンピューターが異なるプロセッサバージョンを搭載している場 合には、仮想マシンごとに「プロセッサバージョンが異なる物理コンピューターへ移行する」を有効にし て置く必要があります。 ① 仮想マシンをシャットダウンする PS C:¥> Stop-VM -ComputerName HV01 -Name VM01 ② HV01 上の VM01 の「プロセッサバージョンが異なる物理コンピューターへ移行する」を有効にする PS C:¥> Set-VMProcessor -ComputerName HV01 -VMName VM01 -CompatibilityForMigrationEnabled $True ③ 仮想マシンを起動する PS C:¥> Start-VM -ComputerName HV01 -Name VM01 57
  • 58. Kerberos 委任の設定を行う 委任の設定は、ライブマイグレーションを行う全てのコンピューター間で行う必要がありま す。また、委任を許可する対象となるのは各コンピューターが持つ以下の 2 つのサービスで す。 • CIFS • Microsoft Virtual System Migration Service Hyper-V over SMB を使用している場合にはファイルサーバーの CIFS も委任の対象となる ことに注意してください。 今回は、HV01 と HV02 間での委任を許可するように設定します。 HV01 委任 HV02 CIFS CIFS Microsoft Virtual System Migration Service Microsoft Virtual System Migration Service 58
  • 59. ① HV01 に HV02 CIFS サービスへの委任を許可する PS C:¥> $TargetServer = “HV01” PS C:¥> $TargetServerDN = (Get-ADComputer $TargetServer) PS C:¥> $HVServer = Get-ADComputer HV02 PS C:¥> $HVServerName = $HVServer.Name PS C:¥> $HVServerDNS = $HVServer.DNSHostName PS C:¥> Set-ADObject -Identity $TargetServerDN -Add @{ “msDS-AllowedToDelegateTo” = “cifs/$HVServerName”, “cifs/$HVServerDNS” } ② HV02 に HV01 CIFS サービスへの委任を許可する PS C:¥> $TargetServer = “HV02” PS C:¥> $TargetServerDN = (Get-ADComputer $TargetServer) PS C:¥> $HVServer = Get-ADComputer HV01 PS C:¥> $HVServerName = $HVServer.Name PS C:¥> $HVServerDNS = $HVServer.DNSHostName PS C:¥> Set-ADObject -Identity $TargetServerDN -Add @{ “msDS-AllowedToDelegateTo” = “cifs/$HVServerName”, “cifs/$HVServerDNS” } 59
  • 60. ③ HV01 に HV02 Microsoft Virtual System Migration サービスへの委任を許可する PS C:¥> $ServiceName = “Microsoft Virtual System Migration Service” PS C:¥> $TargetServer = “HV01” PS C:¥> $TargetServerDN = (Get-ADComputer $TargetServer) PS C:¥> $HVServer = Get-ADComputer HV02 PS C:¥> $HVServerName = $HVServer.Name PS C:¥> $HVServerDNS = $HVServer.DNSHostName PS C:¥> Set-ADObject -Identity $TargetServerDN -Add @{ “msDS-AllowedToDelegateTo” = “$ServiceName/$HVServerName”, “$ServiceName/$HVServerDNS” } ④ HV02 に HV01 Microsoft Virtual System Migration サービスへの委任を許可する PS C:¥> $ServiceName = “Microsoft Virtual System Migration Service” PS C:¥> $TargetServer = “HV02” PS C:¥> $TargetServerDN = (Get-ADComputer $TargetServer) PS C:¥> $HVServer = Get-ADComputer HV01 PS C:¥> $HVServerName = $HVServer.Name PS C:¥> $HVServerDNS = $HVServer.DNSHostName PS C:¥> Set-ADObject -Identity $TargetServerDN -Add @{ “msDS-AllowedToDelegateTo” = “$ServiceName/$HVServerName”, “$ServiceName/$HVServerDNS” } 60
  • 61. ⑤ HV02 を再起動する(再起動が完了するまで待ち合せる) ※委任の設定を適用するためにコンピューターを再起動する必要があります PS C:¥> Restart-Computer -ComputerName HV02 -Wait -Force ⑥ HV01 を再起動する ※HV02の再起動が完了してから実行してください。 PS C:¥> Restart-Computer -Force コンピューターアカウントに移行先となるストレージへのアクセス権を与える ※ライブマイグレーションはコンピューターアカウントによる処理であるため、移行先のス トレージ対してコンピューターアカウントによるフルアクセス権が必要です。 61
  • 62. ライブマイグレーションを実行する 今回は共有ボリュームや共有フォルダを使用しない シェアード ナシング ライブ マイグ レーション を実行してみます。 ① 仮想マシン VM01 が HV01 上で動作していることを確認 PS C:¥> Get-VM -ComputerName HV01 ② 仮想マシン VM01 を HV02 に移動する ※HV02 上の E:¥VM¥VM01 に仮想ハードディスクごと移動するものとします PS C:¥> Move-VM -ComputerName HV01 -Name VM01 -DestinationHost HV02 -IncludeStorage -DestinationStoragePath E:¥VM¥VM01 統合スクリプト環境上で実行すると、画面上に移行のプログレスバーが表示されます。 ③ 仮想マシン VM01 が HV02 上で動作していることを確認する PS C:¥> Get-VM -ComputerName HV01 62
  • 63. 第3部 エキスパートを目指す方へ ここからは、Hyper-V だけに特化した手法ではなく、Windows PowerShell の 基本的なテクニックから、バックグラウンドジョブ、ワークフローなどの高度な テクニックまでを解説します。 Visual Studioからの呼び出し方法についても解説しています。 63
  • 64. 第3部 ~ PowerShell エキスパートを目指す方へ Windows PowerShell には他にもさまざまなテクニックが用意されています。特に、バック グラウンドジョブの概念はシステム管理を行う上で重要です。 Part1 基礎編 1.Windows PowerShell の位置づけ 2.基本的なコマンドレットと書式の基礎 3.基本的な文法とスクリプトの作り方 4.Tips Part4 ワークフロー編 11. 12. 13. 14. Windows PowerShell Workflow とは Windows PowerShell Workflow の基礎 ワークフロー特有の記述 ワークフロージョブとデータの永続化 Part2 リモーティング編 5.リモーティングの準備と基礎 6.-ComputerNameを使用したリモート操作 7.PS セッションとは 8.コネクションの永続化と再利用可能なPSセッション 9.Windows PowerShell Web Access(PSWA) Part3 バックグラウンドジョブ 10. バックグラウンドジョブ Part5 開発者編 15. 16. 17. 18. 開発者にとっての Windows PowerShell とは 開発者のための Windows PowerShell 基礎知識 開発者として必要な情報の取得 コマンドレット以外からオブジェクトのインスタン スを作成する 19. Visual Studio(C#)から PowerShell を呼び出す 64
  • 66. 基礎編 1. Windows PowerShell の位置づけ 66
  • 67. Windows PowerShell の位置づけ Windows Familiar – インフラエンジニアから見ると • Windows Script(WSH)に変わる管理プラットフォーム • 高機能なスクリプティング機能による自動管理 • WinRM を介したリモートサーバー管理 Windows Familiar – 開発者 から見ると • 高機能なクラスライブラリ • コーディング、テスティングの大幅なコスト削減 Non-Windows Familiar から見ると • OMI(Open Management Infrastructure)を実装したリモートサーバー • 手元のプラットフォームからリモート管理が可能 • 使い慣れた言語からリモート管理が可能 67
  • 68. 代表的なスクリプト言語 バッチファイル(拡張子 .bat) OSに合わせて継続的なエンハンス MS-DOS時代から使われてきたコマンドシェル上のスクリプト。脈々と現代に引き継がれて おり、利用者が多い。豊富なコマンド群によって支えられており、案外使い出がある。複数 のスクリプトを取りまとめる役割としても便利。 Visual Basic のスクリプト版。「Visual」とあるが、Visual ではない。わかりやすい文法と、 緩い規則によって根強いファンが多い。亜種として VBA もあるが微妙に文法は異なる。 Jscript(拡張子 .js) 今後エンハンスの予定は無い JavaScript のMS 実装版として、VBScript とともに登場。JavaScript を Microsoft の独自 仕様によって拡張することで、汎用性を増している。 Windows Script 今後エンハンスの予定は無い VBScript(拡張子 .vbs) PowerShell(拡張子 .ps1) いわずと知れた高機能スクリプト言語。.NET Framework が使えると言うメリットから、利 用者は爆発的に増殖中。多くの製品がPowerShell用のコマンドレットを提供しており、 Windows Script Host は Server Coreのメニュー程度でしかお目にかかれなくなりつつある。 68
  • 69. スクリプトの実行環境 bat exe VBScript JScript PowerShell エンジン COM Script Engine cmd/ command PowerShell スクリプト Windows Script Host Cscript.exe Wscript.exe C O M .NET Framework Class Library CLR(共通言語ランタイム) Windows 69
  • 71. VBScript vs PowerShell Exchange 2003 (VBScript) メール ボックス 統計 Exchange 2007(PowerShell) Set listExchange_Mailboxs = GetObject("winmgmts:{impersonationLevel=impersonate}!¥¥COMPUTERNAME¥ROOT¥MicrosoftExchangeV2").InstancesOf("Excha nge_Mailbox") get-mailboxstatistics –server $servername For Each objExchange_Mailbox in listExchange_Mailboxs WScript.echo "AssocContentCount =” + objExchange_Mailbox.AssocContentCount WScript.echo " DateDiscoveredAbsentInDS =” + objExchange_Mailbox.DateDiscoveredAbsentInDS WScript.echo " DeletedMessageSizeExtended =" + objExchange_Mailbox.DeletedMessageSizeExtended WScript.echo " LastLoggedOnUserAccount =" + objExchange_Mailbox.LastLoggedOnUserAccount WScript.echo " LastLogoffTime =" + objExchange_Mailbox.LastLogoffTime WScript.echo " LastLogonTime =" + objExchange_Mailbox.LastLogonTime WScript.echo " LegacyDN =" + objExchange_Mailbox.LegacyDN WScript.echo " MailboxDisplayName =” + objExchange_Mailbox. MailboxDisplayName WScript.echo " MailboxGUID =" + objExchange_Mailbox.MailboxGUID WScript.echo " ServerName =" + objExchange_Mailbox.ServerName WScript.echo " Size =" + objExchange_Mailbox.Size WScript.echo " StorageGroupName =" + objExchange_Mailbox.StorageGroupName WScript.echo " StorageLimitInfo =" + objExchange_Mailbox.StorageLimitInfo WScript.echo " StoreName =" + objExchange_Mailbox.StoreName WScript.echo " TotalItems =" + objExchange_Mailbox.TotalItems Next データ ベース 管理 Dim StorGroup as New CDOEXM.StorageGroup StorGroup.DataSource.Open "LDAP://" + DCServer + "/ CN=First Storage Group,CN=InformationStore,CN=" + Server + ",CN=Servers,CN=First Administrative Group, CN=Administrative Groups,CN=First Organization, CN=Microsoft Exchange,CN=Services, CN=Configuration," + DomainName StorGroup.MoveLogFiles("C:¥newlogPath", 0) 受信者 管理 Dim objMailbox As CDOEXM.IMailboxStore Set objMailbox = GetObject("LDAP://" + DCServer + "CN=FOO,CN=users," + DomainName) objMailbox.CreateMailbox "LDAP://" + DCServer + "/CN=Private MDB,CN=First Storage Group,CN=InformationStore,CN=" + Server + ",CN=Servers,CN=First Administrative Group, CN=Administrative Groups,CN=First Organization, CN=Microsoft Exchange,CN=Services, CN=Configuration," + DomainName move-storagegrouppath -identity "First Storage Group" –log "C:¥newlogPath" enable-mailbox -identity domain¥FOO –database "First Storage Group¥Private MDB" 71
  • 72. WBEM - Web Based Enterprise Management http://www.dmtf.org/standards/wbem マイクロソフトやインテル、シスコシステムズ、旧コンパック・コンピュータなどによって提案され、標準化 団体DMTF(Desktop Management Task Force)によって標準化された規格である。その名の通り、「Web ベー スのエンタープライズ管理」のための仕様であり、ネットワーク上に存在するサーバーや OS、ネットワーク 機器などの統合管理に必要なプロトコルやデータ構造を規定する。要するに、従来の SNMP(Simple Network Management Protocol)や syslog に代わる、HTTP と XML をベースとした新世代のネットワーク管理プロトコ ルである。すでにマイクロソフト Windows や HP-UX などのおもなOSをはじめ、サーバー製品、ストレージ製 品、ネットワーク機器、そしてHP OpenView をはじめとするネットワーク管理ツールにおいて、業界標準の ネットワーク管理プロトコルとしてサポートされている。 出典 http://h50146.www5.hp.com/products/software/oe/hpux/developer/column/smh_02/ 72
  • 73. HP における WBEM の実装 出典 http://h50146.www5.hp.com/products/software/oe/hpux/developer/column/smh_02/ 73
  • 74. Solaris における WBEM の実装 出典 http://docs.oracle.com/cd/E19455-01/8067119/6jg10nqef/index.html 74
  • 76. History of Microsoft Management Framework 2000年 Windows 2000 に WMI をインプリメント – 29 WMI プロバイダを含む – 同時に Windows NT, 98, 95 用の WMI もダウンロード開始 (15 WMI プロバイダー) ※どちらかといえば ”プロバイダー” 提供ベンダー向けのテクノロジー ※ Windows ファミリ間の相互運用性に留まる WS-Management とは Web Services for Management のこと。Windows Server ではない。 2005年 WS-Management が DMTF へ提出、承認 2007年 Windows Server 2008 に WS-Management を実装(WinRM) • HTTP/S を介して他プラットフォームとの接続が可能に • Windows PowerShell で WinRM を介したリモートサーバー管理が標準手法 として取り込まれる 76
  • 77. Windows Management Framework http://www.microsoft.com/downloads/ OS WMF 3.0 WMF 4.0 Windows 7 SP1 以降 SP1 以降 Windows Server 2008 SP2 以降 × Windows Server 2008 R2 SP1 以降 SP1 以降 Windows 8 標準 ○ Windows 8.1 ー 標準 Windows Server 2012 標準 ○ Windows Server 2012 R2 ー 標準 前提条件 • Windows PowerShell ISE がインストールされていること • Microsoft .NET Framework 4.0 がインストールされていること 77
  • 78. Windows Management Framework IT Pro IT Developer Solution Developer Service Provider Windows Management Framework 開 発 誰が作るの? 標準化されたアクセス Windows PowerShell 標準化されたプロトコル WS-Management(WinRM) (Web Service for Management) 標準化された CIMOM、SMI-S オブジェクトモデル CPU 他の プラットフォーム http WS-Man CIMOM、 SMI-S Storage Network Devices SMI-S(Storage Management Initiative - Specification) 78
  • 79. The Open Group Membership 2012/10/5 時点 Platinum - 5 • Capgemini Netherlands • Hewlett-Packard USA • IBM USA • Kingdee Software (China) Co. Ltd China • Oracle Corporation USA Gold – 44(抜粋) • Microsoft Corporation USA • NTT Data Corporation • ReGIS Inc. Silver – 256 (Japan のみ抜粋) • Asahi Techneion Co., Ltd • AXE, Inc. • eflow Inc. • Information-technology Promotion Agency, Japan • Japan Aerospace Exploration Agency (JAXA) • Mizuho Information and Research Institute, Inc. • Nissan Motor Co., Ltd. • Nomura Research Institute, Ltd. • Rococo Co Ltd • SIOS Technology, Inc. • Sony CSL • Symphony Ltd. Academic – 38 (Japan のみ抜粋) • Aoyama Gakuin University • Kyoto University • Nagoya University • The University of Tokyo Information Technology Center 79
  • 80. Open Management Infrastructure(nanoWBEM) • オープンソース版 CIM Server • 軽量 250KB、C で開発されている Windows PowerShell、その他 WinRM Client WinRM Server WS-Management(WinRM) Providers : CIMOM,SMI-S CPU Storage Network Devices 各種言語 OMI Client OMI Server WS-Management(OMI) Providers : CIMOM,SMI-S CPU Storage Network Devices 80
  • 81. 81
  • 82. OMI サポート プラットフォーム • HP-UX 11i v2 and v3 (PA-RISC and IA64) • Sun Solaris 8 and 9 (SPARC) and Solaris 10 (SPARC and x86) • Red Hat Enterprise Linux 4 (x86/x64) and 5 (x86/x64) Server • Novell SUSE Linux Enterprise Server 9 (x86) and 10 SP1 (x86/x64) • IBM AIX v5.3 and v6.1 (POWER) • MacOS 10.5 (Intel) • Windows(限定的) 最新版は OMI Source - v.1.0.7a (2013年5月) 82
  • 84. マイクロソフト製品と Windows PowerShell の関係 • 製品ごとに専用の”コマンドレット”が用意されている • 多くの管理 GUI は裏でコマンドレットを呼んでいる • インフラ担当者に、各製品への”標準化されたアクセス方法”を提供する Active Directory 管理センター PowerShell コンソール System Center Virtual Machine Manager Active Directory PowerShell Module Hyper-V PowerShell Module Active Directory Hyper-V 84
  • 85. Windows PowerShell ISE • Powershell_ise.exe • Windows PowerShell 専用エディタ • IntelliSense に対応 スクリプトエディタ スクリプト実行画面 コマンドレットを直接実行 英語圏の人たちは”アイス” と読むらしい コ マ ン ド レ ッ ト 検 索 85
  • 87. 事前準備 • コンソールの環境設定 • 簡易編集を有効に • エクスプローラー(フォルダー)の環境設定 • 「拡張子を表示しない」を無効に • 実行ポリシーの設定 ※オンプレミスの”署名無しスクリプト”を実行できるようにする PS C:¥>Set-ExecutionPolicy RemoteSigned • リモートからの操作を有効にする(リモーティングの有効化) PS C:¥>Enable-PSRemoting –force • 必要に応じて自分専用の初期設定ファイルを作成(規定では存在しない) PS C:¥>notepad $profile 87
  • 88. 実行ポリシーの設定~ Set-ExecutionPolicy http://technet.microsoft.com/ja-jp/library/dd347628.aspx • • “管理者として実行” する必要がある 実行ポリシー – – – – – “ポリシーの設定”は、規定では Restricted:制限つき (オペレーターモード)(規定値) コンピューター全体に影響する。 • 対話形式のみ 適用範囲を制限するには、 • スクリプトは実行できない Scope も同時に定義する。 AllSigned:署名 • スクリプトは、信頼された発行元による署名が必要 RemoteSigned:リモートの署名 • “インターネットゾーン” のスクリプトは信頼された発行元による署名が必要 Unrestricted:無制限 • すべてのスクリプトを実行可能 • リモートのスクリプトについては常に警告 Bypass:バイパス • 何もブロックされず警告も表示されない 88
  • 90. コマンドレットとモジュール • PowerShell の実行単位は「コマンドレット」 • コマンドレットはモジュール(Module)によって提供される • モジュールが読み込まれていないとコマンドレットを使用することは できない(Import-Module <モジュール名>) CmdLet CmdLet CmdLet CmdLet Module 構造 Add-Computer Add-Content Checkpoint-Computer Clear-Content Clear-EventLog Clear-Item Clear-ItemProperty Complete-Transaction Microsoft.PowerShell. Management 規定のモジュール Add-VMDvdDrive Add-VMFibreChannelHba Add-VMHardDiskDrive Add-VMMigrationNetwork Add-VMNetworkAdapter Add-VMNetworkAdapterAcl ・ ・ ・ Hyper-V 例 90
  • 91. モジュールに関するコマンドレット • 読み込まれているモジュール一覧の取得 PS C:¥> Get-Module • 使用可能なモジュール一覧の取得 PS C:¥> Get-Module -ListAvailable • モジュールを読み込む PS C:¥> Import-Module <モジュール名> PS C:¥> Import-Module Hyper-V • 使用可能なモジュールを全て読み込む PS C:¥> Import-Module (Get-Module -ListAvailable).Name 91
  • 92. コマンドレット情報を取得する • 使用可能なコマンドレット一覧を取得する PS C:¥> Get-Command • “-VM” という文字列を含むコマンドレットの一覧 PS C:¥> Get-Command *-vm* -CommandType Cmdlet • 特定のモジュール内のコマンドレット一覧 PS C:¥> Get-Command -Module Hyper-V • コマンドレットの書式 PS C:¥> Get-Help <コマンドレット> -detailed PS C:¥> Get-Help Move-VM -detailed 92
  • 94. コマンドレットの戻り値 • コマンドレットの戻り値は“オブジェクト”である • PowerShell はオブジェクトを操作する言語 • 戻り値を「どのように操作できるか」を知っていることが重要 • オブジェクトには「メソッド」と「プロパティ」が用意されている 戻り値を直接、”操作”することが可能 Get-Service サービス一覧 stop() オブジェクト 94
  • 97. メソッドとプロパティを調べるには • コマンドレットのメソッドとプロパティを表示 <コマンドレット> | get-member <コマンドレット> | get-member | sort-object Name | format-list ※ COMのメンバーも取得できる New-Object -com scripting.filesystemobject | Get-Member • サービスに対して行える操作を取得する Get-Service | Get-Member • 仮想マシンに対して行える操作を取得する Get-VM | Get-Member 97
  • 98. TIPS オブジェクトであるということは... PS C:¥>$a = “abc” #普通ならば $a は”文字列” になるけれど... #オブジェクトだからメソッドとプロパティが用意されている PS C:¥>$a.ToUpper() PS C:¥>ABC PS C:¥>$a.ToUpper().Split("B")[0] PS C:¥>A 98
  • 99. コマンドからの出力もオブジェクト化される ipconfig の出力結果からIPアドレスを取りだす PS C:¥> (ipconfig)[18].Split(":")[1].Trim() object ipconfig の の18行目 出力結果 (0から数えて) コロンで分割した (0から数えて)2 つ目の値 前後の空白を トリミング IPv4 アドレス . . . . . . . . . . : 192.168.1.100 99
  • 100. PSドライブ ファイルシステムだけではなく、さまざまなオブジェクトがドライブとしてアク セス可能(CD コマンドで移動可能) PS C:¥> Get-PSDrive           ファイルシステム エイリアス(Alias:) レジストリ(HKLM:、HKCU:) 証明書(Cert:) 環境変数(Env:) 変数(Variable:) WSMAN設定(Wsman:) Active Directory(AD:) IIS(IIS:) Remote Desktop Service(RDS:) モジュールが読み込まれて いないと使えないドライブ もある (例)ActiveDirectory 100
  • 102. 1. 2. 3. 4. 5. 6. 7. 8. 起動中のサービス一覧  パイプライン  Where-Object による条件指定 特定のサービスを停止する  () でオブジェクトを表現する ネットワーク情報を取得する  出力結果のフォーマット変換 ネットワークの設定を変更する ローカルコンピューター名を変更する  変数の宣言  変数の遅延展開  Array 値  ハッシュテーブル  環境変数 リモートからコンピューター名を変更する ※標準コマンドレット or WMI  クレデンシャルの使い方  WMI に必要なアクセス権 ドメインに参加させる ※標準コマンドレット or WMI 複数のコンピューターをドメインに参加させる  スクリプトの継続行  ファイルの入出力方法  ファイルのコード変換  CSV のヘッダー行について  繰り返し処理 9. イベントログを収集する  Select-Object により必要な要素のみを取り出す 10. イベントログをバックアップする 11. 独自のイベントログを登録する 12. 仮想マシンを作成して起動する  スクリプトの引数を定義する  名前付き引数 13. Hyper-V ライブマイグレーションを実行する 14. パフォーマンスログを取得する 15. 役割と機能をインストールする 16. 仮想ドメインコントローラを複製する 17. Hyper-V 仮想スイッチを作成する 18. リモートコンピューターから機能を一括で削除する 19. リモートコンピューターを一括でシャットダウンする 20. すべての Hyper-V ホストの仮想マシンを強制的にシャッ トダウンする 21. すべてのHyper-V ホストのライブマイグレーションを有効 化する 102
  • 103. 1.起動中のサービス一覧を取得する object サービス一覧 パイプ PS C:¥>get-service | where-object {$_.Status -eq "Running"} サービス一覧 を出力 object まオ まブ 渡ジ さェ れク るト の サービス一覧 103
  • 104. パイプラインについて コマンドレット1 コマンドレット2 結果 結果 オブジェクト 入力パラメタ コマンドレット3 入力パラメタ PS > Get-Service | Where-Object {$_.Status -EQ "Running"} | Select-Object -Property Name, Servicetype | Sort-Object -Property ServiceType PS > Get-Service | Where-Object Status -EQ "Running" | Select-Object Name, Servicetype | Sort-Object ServiceType V3ではこう書ける • • • • サービスの一覧を取得 Status が Running のみを抽出 Name プロパティとServiceType プロパティを抽出 ServiceType でソート 104
  • 105. TIPS 条件を指定して結果を絞り込む Where-Object #サイズが1024バイト以上のファイルを検索する Dir | Where-Object {$_.length -GT 1024} ` |Select-Object Name,length #Active Directory のユーザー名に”a”を含むユーザーを取得する Get-ADUser -Filter * ` |Where-Object {$_.name -Like “*a*”} ` | ForEach-Object name 105
  • 106. TIPS PS 3.0 では書式を簡略化できます PS C:¥>get-service | where-object {$_.Status -eq "Running"} V3 ではこう書ける PS C:¥>get-service | where-object Status -eq "Running" 106
  • 107. 2.特定のサービスを停止する PS C:¥>Stop-Service WSerarch メソッド PS C:¥>(Get-Service -Name WSearch).Stop() Windows Search サービスの インスタンスを取得 インスタンスに対して メソッドを実行 object Windows Search 107
  • 109. 3.ネットワーク情報を取得する ネットワークアダプタの一覧 Format-List の略 PS C:¥> Get-NetAdapter | FL Name, InterfaceIndex, MacAddress IP アドレスの取得 PS C:¥> Get-NetIPAddress -InterfaceIndex 28 -AddressFamily IPv4 109
  • 110. TIPS 出力結果のフォーマットを変換 dir | format-table Name,Length dir | format-list Name,Length dir | format-wide Name -column 6 dir | out-gridview 110
  • 111. 4.ネットワークの設定を変更する 静的なIPV4アドレスを設定する PS C:¥>New-NetIPAddress -InterfaceIndex 24 -IPAddress 192.168.205.102 -AddressFamily IPv4 -PrefixLength 24 -DefaultGateway 192.168.205.254 既存の静的アドレスを変更する場合には Set-NetIPAddress を使用する DNS の設定 PS C:¥>Set-DnsClientServerAddress -Interface 24 -ServerAddress 192.168.205.1, 192.168.205.3 IP アドレスの削除 PS C:¥> Remove-IPAddress -InterfaceIndex 24 -AddressFamily IPv4 DNSの設定を削除する PS C:¥> Set-DnsClientServerAddress -Interface 24 -ResetServerAddress DHCP を有効にする PS C:¥> Set-NetIPInterface -InterfaceIndex 24 -Dhcp Enabled 111
  • 112. 5.ローカルコンピューター名を変更する ローカルコンピューター名の取得 方法1 PS C:¥> $Env:ComputerName 方法2 PS C:¥> (Get-WmiObject -Class Win32_ComputerSystem).Name ローカルコンピューター名の変更 標準のコマンドレットを使用する場合 C:¥> Rename-Computer -NewName “tfwin8-xx” -Force -Restart WMI を使用する場合 PS C:¥> $New_ClientName = “New_ClientName” PS C:¥> $SysInfo = Get-WmiObject -Class Win32_ComputerSystem PS C:¥> $SysInfo.Rename($New_ClientName) PS C:¥> Restart-Computer 112
  • 113. TIPS 変数を使うには $FirstName = "Junichi" $LastName = "Anno" $FullName = $FirstName + " " + $LastName Write-Output $FullName $arrFullName = $FullName.Split(" ") Write-Output $arrFullname[0] PS C:¥> C:¥hogehoge.ps1 Junichi Anno Junichi 出力結果 113
  • 114. TIPS 変数の宣言について 通常は自動判別 PS > $A = 1 PS > $B = “1” PS > $A + $B 2 PS > $B + $A 11 PS > $A = “abc” PS > $A + $B abc1 System.Int32 System.String 先にある System.Int32 に自動変換 自動変換できない値で あればエラーとなる 先にあるSystem.String に自動変換 System.String で置き換えが可能 114
  • 115. 明示的に宣言することも可能 PS > [System.Int32] $A = 1 PS > [System.String] $B = “abc” PS > [System.Array] $C = “今年は”, 2012, “年です” 0: 今年は 1: 2012 2: 年です [System.String] [System.Int32] [System.String] PS > $A = 987.654 PS > $A Int32 にキャストされる 988 明に宣言すると自動変換はできない PS > $A = “Hello” Cannot convert value "Hello" to type "System.Int32“ PS > [System.String] $A = “Hello” 115
  • 116. 変数を削除する PS > [System.Int32] $A = 1 PS > Remove-Variable A 自分で作成した変数を全て削除 ※削除できないものについてエラーが出る PS > Get-Variable | Remove-Variable 116
  • 117. TIPS 変数の展開について PS >$FirstName = "Junichi" PS >$LastName = "Anno" PS >$FullName = “$FirstName $LastName” PS >Write-Output $FullName Junichi Anno PS >$FullName = ‘$FirstName $LastName’ PS >Write-Output $FullName $FirstName $LastName ダブルクオーテーションで 括った場合は変数は展開さ れる シングルクオーテーション で括った場合には変数は展 開されない 117
  • 118. TIPS 変数の遅延展開 通常 PS > $Name = “Junichi” PS > $Message = “Hello $Name” PS > $Message Hello Junichi この時点で変数は展開される 遅延展開 PS > $Name = “Junichi” {} で括ると変数は展開されない PS > $Message = { “Hello $Name” } $Message を定義した後で $Name に値を入れているこ PS > $Name = “Taro” とに注意 PS > $Message Hello $Name PS > & $Message Echo の代わりに & を使用 Hello Taro 118
  • 119. 遅延展開を利用して関数として定義 PS > $Message = { Param( $Name ) “Hello $Name” } PS > & $Message Junichi Hello Junichi 119
  • 120. TIPS Array 値 Array の作り方 空のアレイを作成(あえてしなくてもよい) PS > $Users = @() PS > $Users = “Junichi”, ”Naoko”, “Kazunori” PS > $Users.Count 3 PS > $Users Junichi Naoko Kazunori PS > $Users += “Maki” 値を追加 数値を追加 PS > $Users += 512 {}で括っているので遅延展開変数 PS > $a = { [system.math]::Pow( 2, $N ) } PS > $Users += $a 遅延展開変数を追加 120
  • 121. Array 値の参照 PS > $Users[3] Maki 配列の一番最後 PS > $Users[-1] PS > $N = 6 遅延展開変数の入った行を参照 PS > & $Users[5] 64 $users から値を取りだし PS > Foreach ($u in $Users) { New-ADUser -Name $u } ながらユーザーを作成 PS > $Users[2..4] 配列の2番から4番を取りだす kazunori と一致するものがあるかどうかを検査 PS > ($Users -eq “Kazunori”).Count Kazunori 以外のものを抽出 PS > $Users -ne “Kazunori” M が含まれる行を抽出 PS > $Users -like “*M*” 121
  • 122. PS > $arrINT = 1,2,3,4,5,6,7,8,9 PS > $arrINT -ge 5 2つの配列を合成 PS > $Users += $arrINT 2つの配列を合成 PS > $Users | Sort-Object $_ 昇順に並べ替えて出力 PS > $Users = $Users -ne “Kazunori” Kazunori を削除 PS > [System.Array]::Reverse($Users) Users の中の並び順を逆にする 122
  • 123. 空白を文字列で埋める(PadLeft / PadRight) ## $N[] に、001 ~ 100 の文字列を格納する PS > $N = @() PS > 001..100 | % { $N += ("$_").Padleft(3,"0")} PS > User$N 001 002 ・ 100 PS > $VMs = $N | % {echo VM$_} PS > $VMs VM001 VM002 ・ VM100 123
  • 124. TIPS HashTable HashTable の作り方 PS > $Users = @{} 注意 Array は () PS > $Users.0001 = “Junichi” キー 1 に 値 Junichi を登録 PS > $Users.”0001” = “Junichi” キー 0001 に 値 Junichi を登録 PS > $Users.Add( “0001”, “Junichi” ) PS > $Users.Remove(“0001”) キー 0001 の行を削除 124
  • 125. CSV ファイルから値を読み込んでHashTable を作成 PS > $USDJPY = Import-CSV -Path C:¥tools¥USDJPY.csv –Encoding Default PS > $HT = @{} PS > While ( $i -lt $USDJPY.Count ) {$HT.Add( $USDJPY.日付[ $i ], $USDJPY.終値 [ $i ] ) ; $i++ } PS > $HT.”2012/2/10” 77.65 125
  • 127. 6.コンピューター名を変更する(リモートから) 標準のコマンドレットを使用する ##スタンドアロンのコンピューターの場合 PS C:¥> $ClientName = “ClientName” PS C:¥> $Cred = Get-Credential PS C:¥> $New_ClientName = “New_ClientName” PS C:¥> Rename-Computer -ComputerName $ClientName -LocalCredential $Cred -NewName $New_ClientName -Force -Restart ##ドメインに参加しているコンピューターの場合 PS C:¥> $ClientName = “ClientName” PS C:¥> $Cred = Get-Credential PS C:¥> $New_ClientName = “New_ClientName” PS C:¥> Rename-Computer -ComputerName $ClientName -DomainCredential $Cred -NewName $New_ClientName -Force -Restart 127
  • 128. WMI を使用する 変更 WMI Server Client PS C:¥> $ClientName = “ClientName” PS C:¥> $Cred = Get-Credential PS C:¥> $New_ClientName = “New_ClientName” PS C:¥> $SysInfo = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $ClientName -Credential $Cred PS C:¥> $SysInfo.Rename($New_ClientName) PS C:¥> Restart-Computer -ComputerName $ClientName -Credential $cred -Force 128
  • 129. TIPS クレデンシャルの作成 その1 PS C:¥> $Cred = Get-Credential ポップアップが表示される その2 PS C:¥> $user = “administrator “ PS C:¥> $pass = ConvertTo-SecureString "P@ssw0rd“ -AsPlainText -Force PS C:¥> $Cred = New-Object System.Management.Automation.PSCredential $user, $pass 129
  • 130. TIPS WMI Tester http://technet.microsoft.com/en-us/library/cc782719(v=ws.10) • WMI への接続性をテストするツール • リモートコンピューターへの接続も テストできる 130
  • 131. TIPS 非ドメインメンバーから WMI接続 が拒否される原因と対処 代表的なエラー番号 • 0x800706ba • 0x80041003 • 0x80070005 代表的な原因 • Firewall の設定 • アクセス権 131
  • 132. 必要なアクセス権 • Distributed COM Users メンバーである こと • (規定では)システム管理者であること ※wmimgmt.msc で変更可能 132
  • 133. 必要な Firewall の設定 • Windows Management Instrumentation のルール 133
  • 134. 7.ドメインに参加させる Server 参加指示 AD Domain Client Client Client Workgroup 標準のコマンドレットを使用する PS C:¥> $Domain = “tf.com” PS C:¥> $Client = “ClientComputer” PS C:¥> $LocalCred = Get-Credential junichia PS C:¥> $DomainCred = Get-Credential tf¥administrator PS C:¥> $Admin = “tf¥administrator” PS C:¥> $Pass = “P@ssword” PS C:¥> Add-Computer -ComputerName $Clienit -LocalCredential $Cred -Credential $DomainCred -DomainName $Domain -OUPath “OU=営業部” -Restart -Force 134
  • 135. WMIのクラスを直接使用する 認証に関する通信を暗号化する PS C:¥> $Domain = “tf.com” これを指定しないと以下のエラー PS C:¥> $Client = “ClientComputer” “Client connection to WINMGMT needs to be encrypted for this PS C:¥> $Cred = Get-Credential junichia operation. Please adjust your PS C:¥> $Admin = “tf¥administrator” IWbemServices proxy security settings and retry. ” PS C:¥> $Pass = “P@ssword” PS C:¥> $SysInfo = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $ClientComputer -Credential $Cred -Authentication PacketPrivacy PS C:¥> $SysInfo.JoinDomainOrWorkgroup($Domain, $Pass, $Admin, “OU=xx”, 3 ) PS C:¥> Restart-Computer -ComputerName $Client -Credential $Cred -Force 1: ドメインに参加 + 2: コンピューターアカウントの作成 135
  • 136. 8.複数のコンピューターをドメインに参加させる 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # 各種定数の設定 Client Client CSV Server $Cred = Get-Credential junichia $Domain = "tf.com" $Admin = "tf¥administrator" tfwin8-01,192.168.205.101,経理部 $Pass = "P@ssword" tfwin8-02,192.168.205.102,営業部 # いったん、SJISで作成したファイルを読み込み、UNICODEで保存する ・ $InputFile = "C:¥Tools¥Computers.csv" ・ $OutputFile = "C:¥Tools¥Computers_unicode.csv" Get-Content $InputFile -Encoding String | Out-File $OutputFile -Encoding unicode # CSVファイルを読み込む $Computers = Import-Csv -Path $OutputFile -Header ComputerName,IPAddress,Department -Delimiter "," # コンピューター名と部署を取り出し、ドメインに参加させる ForEach ($c in $Computers) { $Client = $c.ComputerName $OU = "OU=" + $c.Department + ",DC=TF,DC=COM $SysInfo = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $Client ` -Credential $Cred -Authentication PacketPrivacy $SysInfo.JoinDomainOrWorkgroup($Domain, $Pass, $Admin, $OU , 3 ) Restart-Computer -ComputerName $Client -Credential $Cred -Force } 136
  • 137. TIPS 行継続 アクサン グラーブ記号 (`) を使用する copy-item C:¥tmp¥*.txt ` -destination C:¥ こ い つ 137
  • 138. TIPS 入出力方法 これを抑えておけば、ひとまずたいていのことはできます #標準出力 Write-Output “Hello” #ファイルから入力 Echo “Hello” $file = Get-Content -Path c:¥tmp¥list.txt $file = type c:¥tmp¥list.txt #標準入力 $InputData = Read-Host #CSVファイルから入力 $file = Import-CSV -Path c:¥test.csv #ファイルに出力 Out-File -filepath C:¥tmp¥list.txt -inputobject $Record 138
  • 139. TIPS 出力方法の違い 空白で区切られる PS C:¥> 1 + 2 + 3 6 PS C:¥> “1” + “2” + “3” 123 PS C:¥> Windows PowerShell <エラー> ※ Echo は Write-Output のAlias PS C:¥> Write-Output 1 + 2 + 3 1 + 2 + 3 PS C:¥> Echo Windows PowerShell Windows PowerShell PS C:¥> Echo “Windows PowerShell” Windows PowerShell 139
  • 140. TIPS ファイルのコード変換 SJIS作成したファイルは日本語が正しく扱われないことがある ∴ Get-Content で読み込み、Out-File でUnicodeで保存する Get-Content -Path $Input -Encoding String | ` Out-File -Encoding UNICODE 指定可能な文字コード String Unicode Byte BigEndianUnicode UTF8 UTF7 UTF32 Ascii Default Oem 140
  • 141. TIPS Import-CSV でのヘッダーの取り扱いについて • 規定では、1行目はヘッダーとして扱われる ComputerName, IPAddress, Department tfwin8-01,192.168.205.101,経理部 tfwin8-02,192.168.205.102,営業部 ・ ・ • ヘッダーが無い場合には -Header パラメタで指定可能 • -Header を指定すると1行目はデータとして扱われる • ヘッダー単位(列単位)で取り出しが可能 $Computers = Import-Csv -Path $OutputFile -Header ComputerName,IPAddress $Computers.IPAddress 141
  • 143. TIPS 繰り返し処理1 Active Directory ユーザー一覧から name プロパティをリストする #ForEach-Object Get-ADUser -Filter * | ForEach-Object {$_.name} Get-ADUser -Filter * | ForEach-Object name V3 #foreach $Users = Get-ADUser -Filter * foreach ($user in $Users) { $user.name } 143
  • 144. TIPS 繰り返し処理2 #1から10までを出力 1..10 #1から10 をリダイレクトして出力 1..10 | % {echo $_ } #User1 から User10 を作成 1..10 | % {New-ADUser “User$_” } ※ % は foreach のエイリアス 144
  • 145. TIPS 繰り返し処理3 $i = 0 do { } Write-Host $i $i++ while ($i -lt 10) $i = 0 do { } Write-Host $i $i++ until ($i -ge 10) 145
  • 146. 9.イベントログを収集する リモートコンピューターのセキュリティログから、最新10個のログを取りだす C:¥> Get-EventLog -LogName Security -ComputerName tfdc01 -Newest 10 特定の日時範囲のログを取りだす C:¥> Get-EventLog -LogName Security -ComputerName tfdc01 -After “2012/6/1 00:00:00” -Before “2012/6/1 00:10:00” 特定のイベントIDを取りだす C:¥> Get-EventLog -LogName Security -ComputerName tfdc01 -InstanceID 4632 失敗した監査を取りだす C:¥> Get-EventLog -LogName Security -ComputerName tfdc01 -EntryType FailureAudit メッセージに “ログオン” という言葉が含まれているログを取りだす C:¥> Get-EventLog -LogName Security -ComputerName tfdc01 -Message “*ログオン*” 146
  • 147. イベントログを集計する C:¥> Get-EventLog -LogName Application | Group-Object -Property EntryType -NoElement C:¥> Get-EventLog -LogName Application |Group-Object -Property Source,EntryType -NoElement | Select-Object Name,Count 147
  • 148. TIPS Select-Object で必要な要素のみを取りだす 結果から必要な要素だけを抜き出して処理する パイプの後ろで使用することをお勧め(なんかおかしい...) PS C:¥> $Data = Dir × PS C:¥> Select-Object -InputObject $Data -Property Name ○ PS C:¥> $Data | Select-Object -Property Name 重複データを除く $data |Select-Object -Unique -Property Name 最後の10個だけ取得 $data | Select-Object -Last 10 最初の5個だけ取得 $data | Select-Object -First 5 148
  • 149. 10. イベントログをバックアップする PowerShell は管理者モードで起動してください セキュリティイベントログをローカルにバックアップする(EVT形式) C:¥> $logFileName = "Security" C:¥> $exportFileName = "C:¥tmp¥" + $logFileName + (get-date -f yyyyMMddhhmmss) + ".evt" C:¥> $exportfilename C:¥> $logFile = Get-WmiObject Win32_NTEventlogFile | Where-Object {$_.logfilename -eq $logFileName} C:¥> $logFile.backupeventlog($exportFileName) 149
  • 150. 11.独自のイベントログを登録する ログファイル名 TechFielders、イベントソース TechFielders を新規に登録する C:¥> New-EventLog -Source "TechFielders" -LogName "TechFielders" TechFielders ログにイベントログを書き込む C:¥> Write-EventLog -LogName TechFielders -Source “TechFielders” -EntryType Information -EventId 5963 -Message “元気出せこの野郎!1,2,3 ダァ!" 150
  • 151. 12. 仮想マシンを作成して起動する PS C:¥> .¥CreateVirtualMachine.ps1 -VMName “VM01" -Mem 1024mb CreateVirtualMachine.ps1 1 param([string] $VMName = "NA", [int] $CPU = 1, [int] $Mem = 10MB) 2 echo -InputObject $VMName, $CPU, $Mem 3 $SwitchName = "Intel(R) 82579LM Gigabit Network Connection - Virtual Switch" 4 New-VM -BootDevice CD ` 5 -MemoryStartupBytes $Mem ` 6 -Name $VMName ` 7 -SwitchName $SwitchName ` 8 -VHDPath ¥¥junichia-vdi¥$VMName¥$VMName.vhdx 9 Set-VM -ProcessorCount $CPU -DynamicMemory -Name $VMName 10 Add-VMNetworkAdapter -VMName $VMName -SwitchName $SwitchName 11 Start-VM -Name $VMName 151
  • 152. TIPS 引数を受け取る 5つの引数 C:¥> .¥hogehoge.ps1 My name is “Junichi Anno” . Write-Output $args[3] Junichi Anno foreach ( $a in $args ) { Write-Output $a } My name is Junichi Anno . 152
  • 153. TIPS 名前付き引数の使い方 引数を所定の名前の変数に格納することで、文法チェック等が行いやすくなる C:¥> hogehoge.ps1 -userid anno param([string] $UserID = “ID", [string] $Password =“PASS") Write-Output $userid Write-Output $Password 規定値 anno PASS 出力結果 153
  • 154. 13. Hyper-V ライブマイグレーション メモリ内データ Guest Host01 構成情報 Guest Host01 ¥¥Server¥Share¥xxx.vhdx $Source の中の VM で始ま るゲストOSを検索している $Source = “HostSV01” $Dist = “HostSV02” $VMs = get-vm -ComputerName $Source -Name VM* foreach ($VMName in $VMs.Name) { Move-VM -ComputerName $Source -Name $VMName -DestinationHost $Dist } 154
  • 155. 14. パフォーマンスログを取得する プロセッサー(コア単位)の利用率を1秒に1回取得して表示する 1 2 3 4 5 6 7 8 9 10 11 Do { $perf =Get-WmiObject -Class win32_perfformatteddata_perfos_processor ` -Property PercentProcessorTime 目的のパフォーマンスカウン foreach ($p in $perf) { タ(今回はCPU使用率)が含ま $outrec = "Processor" + $i + ":" + $p.PercentProcessorTime れているWMIクラスを指定する echo $outrec } 1秒スリープ Start-Sleep -Seconds 1 cls 画面をクリア } while (-1) 155
  • 156. TIPS パフォーマンスカウンターの調査方法 パフォーマンスカウンタークラスの一覧を取得するには C:¥> Get-CimClass Win32_PerfFormatted* |ft CimClassName C:¥> Get-CimClass Win32_PerfRaw* |ft CimClassName win32_perfformatteddata_perfos_processor クラスが持ってい るカウンターの一覧を取得する C:¥> $PerfMon = Get-CimClass Win32_PerfFormattedData_perfos_processor C:¥> $PerfMon.CimClassProperties |ft Name 156
  • 158. ServerCore にすべての GUI をインストールする(フルインストール) PS C:¥> Add-WindowsFeature -Name User-Interfaces-Infra -IncludeAllSubFeature -IncludeManagementTools ServerCore に管理ツールだけをインストールする(MinShell) PS C:¥> Add-WindowsFeature –Name Server-gui-mgmt-infra -IncludeManagementTools 158
  • 159. (参考)Windows Server 2012 GUI オプション Server Core MinShell Server W/GUI Desktop Experience コマンドプロンプト Available Available Available Available Windows PowerShell サーバーマネージャー Available Available Available Available Not Available Available Available Available MMC コントロールパネル Not Available Available Available Available Not Available Not Available Available Available コントロールパネル内 のアプレット Not Available Some Available Available Available Windows Explorer タスクバー Not Available Not Available Available Available Not Available Not Available Available Available 通知エリア Not Available Not Available Available Available Internet Explorer ヘルプ Not Available Not Available Available Available Not Available Not Available Available Available テーマ Not Available Not Available Not Available Available スタートスクリーン Not Available Not Available Not Available Available WinRTアプリ Not Available Not Available Not Available Available メディアプレーヤー Not Available Not Available Not Available Available 159
  • 160. ServerManager モジュールでサポートされている コマンドレット PS C:¥> Import-Module ServerManager PS C:¥> Get-Command -Module ServerManager Alias Alias Function Function Cmdlet Cmdlet Cmdlet Add-WindowsFeature Remove-WindowsFeature Disable-ServerManagerStandardUserRemoting Enable-ServerManagerStandardUserRemoting Get-WindowsFeature Install-WindowsFeature Uninstall-WindowsFeature servermanager servermanager servermanager servermanager servermanager servermanager servermanager 160
  • 161. 16. DC を複製する Windows Server 2012 以降では、仮想化されたドメインコントローラーを複製して展 開することがでる。 (条件) • 複製元はPDCエミュレーターであってはならない • 複製元は Clonable Domain Controllers グループのメンバーでなくてはならない • Hyper-V ホストは Windows Server 2012 • DCは Windows Server 2012 DC01 (pdc) DC02 Hyper-V ホスト Hyper-V ホスト Export VHD Import DC03 Hyper-V ホスト 161
  • 162. $SourceDC = "DC02" $DistDC = "DC03" $distPDCEmu = DC01" $HyperVHost = “ITCAMP-TMP" PDCエミュレーターを複製元となるDC以外に移動 Move-ADDirectoryServerOperationMasterRole -Identity $distPDCEmu -OperationMasterRole PDCEmulator Get-ADComputer $SourceDC | %{Add-ADGroupMember -Identity "Cloneable Domain Controllers" -Members $_.samAccountName} 複製元DCをClonable Domain Controllers グループのメンバーにする Invoke-Command -ComputerName $SourceDC -ScriptBlock { Get-ADDCCloningExcludedApplicationList -GenerateXml -Force } $SB = "New-ADDCCloneConfigFile -Static ` 新しいドメインコンローラーの -IPv4Address ""192.168.210.51"" ` 構成ファイルを作成 -IPv4DNSResolver ""192.168.210.50"" ` -IPv4SubnetMask ""255.255.255.0"" ` -IPv4DefaultGateway ""192.168.210.254"" ` -CloneComputerName " + $DistDC + ` " -SiteName ""Default-First-Site-Name""" Invoke-Command -ComputerName $SourceDC -ScriptBlock { $SB } Stop-VM $SourceDC 複製元DCをシャットダウン 162
  • 163. つづき Get-VM $SourceDC | %{ Export-VM $_ -Path C:¥VMs} 複製元DCをエクスポート Start-VM -Name $SourceDC 複製元DCを起動 エクスポートした仮想マシンをインポート $CFG = (Dir “C:¥VMs¥$SourceDC¥Virtual Machines¥*.xml”).FullName md E:¥$DistDC Import-VM -Path "$CFG" -ComputerName $HyperVHost -GenerateNewId -Copy -VhdDestinationPath E:¥$DistDC VMの名前が複製元と同じになってしまうので、変更する。ここでは同じHyper-Vホストを使用して いるので、OffになっているほうのDCを変名している。 Get-VM $SourceDC |Where-Object {$_.State -EQ "Off"} | Rename-VM -NewName $DistDC 複製先を起動。起動後自動的にDC間複製が始まる。 Start-VM $DistDC 163
  • 164. 17. 仮想スイッチを作成する $PCName = "itcamp-pc01" Invoke-Command -ComputerName $PCName -ScriptBlock {New-VMSwitch -Name "External" ` -AllowManagementOS $True -NetAdapterInterfaceDescription "Intel(R) 82579LM Gigabit Network Connection"} New-VMSwitch -ComputerName $PCName -Name "WS2012Labs-Public" -SwitchType Private New-VMSwitch -ComputerName $PCName -Name "WS2012Labs-CorpNet" -SwitchType Private New-VMSwitch -ComputerName $PCName -Name "WS2012Labs-Storage" -SwitchType Private New-VMSwitch -ComputerName $PCName -Name "WS2012Labs-Internet" -SwitchType Private New-VMSwitch -ComputerName $PCName -Name "WS2012Labs-HA" -SwitchType Private 164
  • 165. 18. リモートコンピューターから機能を一括で削除する ワークフローを使用してリモートコンピューターからフェールオーバークラス タリングを削除する Workflow RemoveFOCsWF { $PCs = Import-Csv -Path pclist.txt -Header "PC","IP" itcamp-pc01,192.168.210.1 itcamp-pc02,192.168.210.2 itcamp-pc03,192.168.210.3 itcamp-pc04,192.168.210.4 itcamp-pc05,192.168.210.5 itcamp-pc06,192.168.210.6 ・ ・ foreach -Parallel ($pc in $PCs) { Write-Output -InputObject $pc.pc Remove-WindowsFeature -ComputerName $pc.pc Failover-Clustering -IncludeManagementTools Restart } } RemoveFOCsWF 165
  • 166. 19. リモートコンピューターを一括でシャットダウンする Workflow RestartAllPCsWF { $PCs = Import-Csv -Path pclist.txt -Header "PC","IP" foreach -Parallel ($pc in $PCs) { Write-Output -InputObject $pc.pc ##Restart-Computer -PSComputerName $pc.PC -Force Stop-Computer -PSComputerName $pc.PC -Force } itcamp-pc01,192.168.210.1 itcamp-pc02,192.168.210.2 itcamp-pc03,192.168.210.3 itcamp-pc04,192.168.210.4 itcamp-pc05,192.168.210.5 itcamp-pc06,192.168.210.6 ・ ・ } RestartAllPCsWF 166
  • 167. 20. すべての Hyper-V ホストの仮想マシンを強制的にシャットダウン ワークフローを使用して一斉にシャットダウン Workflow StopAllVMs { $PCs = Import-Csv -Path pclist.txt -Header "PC","IP" foreach -Parallel ($pc in $PCs){ ##Get-VM -ComputerName $pc.pc |Start-VM Get-VM -ComputerName $pc.pc |Stop-VM -Force } itcamp-pc01,192.168.210.1 itcamp-pc02,192.168.210.2 itcamp-pc03,192.168.210.3 itcamp-pc04,192.168.210.4 itcamp-pc05,192.168.210.5 itcamp-pc06,192.168.210.6 ・ ・ } 167
  • 168. 21. すべての Hyper-V ホストのマイグレーション設定を有効化 Workflow DisableMigrationWF { $PCs = Import-Csv -Path c:¥tools¥ps¥HOLSetup¥pclist.txt -Header "PC","IP" foreach -Parallel ($pc in $PCs) { itcamp-pc01,192.168.210.1 itcamp-pc02,192.168.210.2 itcamp-pc03,192.168.210.3 itcamp-pc04,192.168.210.4 itcamp-pc05,192.168.210.5 itcamp-pc06,192.168.210.6 ・ ・ ##Disable-VMMigration -ComputerName $pc.pc ##Set-VMHost -ComputerName $pc.pc -VirtualMachineMigrationAuthenticationType CredSSP ` -MaximumVirtualMachineMigrations 2 -UseAnyNetworkForMigration $true Enable-VMMigration -ComputerName $pc.pc Set-VMHost -ComputerName $pc.pc -VirtualMachineMigrationAuthenticationType Kerberos ` -MaximumVirtualMachineMigrations 2 -UseAnyNetworkForMigration $True } } DisableMigrationWF 168
  • 170. True と False の指定 $True と $False は予約語である C:¥> $MyNameIsJunichi = $True C:¥> If ($MyNameIsJunichi -eq $True) {Echo 1} 1 170
  • 171. 日時を取得(Date オブジェクト) プロパティ PS C:¥> (Date).Year 2012 メソッド PS C:¥> (date).adddays(10) 24年 5月 23日 12:49:10 Date Day DayOfWeek DayOfYear Hour Kind Millisecond Minute Month Second Ticks TimeOfDay Year Add AddDays AddHours AddMilliseconds AddMinutes AddMonths AddSeconds AddTicks AddYears CompareTo Equals GetDateTimeFormats GetHashCode GetType GetTypeCode DateTime IsDaylightSavingTime Subtract ToBinary ToFileTime ToFileTimeUtc ToLocalTime ToLongDateString ToLongTimeString ToOADate ToShortDateString ToShortTimeString ToString ToUniversalTime 171