ラベル PowerShell の投稿を表示しています。 すべての投稿を表示
ラベル PowerShell の投稿を表示しています。 すべての投稿を表示

2013年12月20日金曜日

AD管理PowerShellコマンドで連絡先(Contact)を作成

  • このエントリーをはてなブックマークに追加


 

AD管理用のPowershellでADのユーザー、グループなどに対していろんな操作ができます。New-ADUser、New-ADGroupなどのコマンドが用意されています。しかし、連絡先オブジェクトを操作するコマンドが提供されていません。どうやらNew-ADContact、Set-ADContactのようなコマンドがないです。

で、どうしたらいいですか?

実はNew-ADObjectというコマンドがあります。これを使って、連絡先を作ることができます。

  • 「Users」コンテナにC2という連絡先が作成される。属性には何の値が付与されていない状態
New-ADObject -Name c2 -Type contact -Path "cn=users,dc=contoso,dc=local"

 

  • Set-ADObjectで連絡先の属性を変更する

#連絡先オブジェクトをゲットして、変更しようとする属性を指定する
$contactPara=Get-ADObject -Identity "cn=c2,cn=users,dc=contoso,dc=local" -Properties "DisplayName","sn","GivenName","mail"

#各属性に値を設定する
$contactPara.DisplayName="Contact2"
$contactPara.sn="Test"
$contactPara.GivenName="Contact2"
$contactPara.mail=”contact2@contoso.local

#値を反映する
Set-ADObject -Instance $contactPara

属性がmulti-valued の場合は、配列に設定すればいいです。

$contactPara.url=@("www.contoso.com","www.f.com")

 

  • 連絡先を削除する
Remove-ADObject -Identity "cn=c1,cn=users,dc=contoso,dc=local"

 

参考

http://technet.microsoft.com/en-us/library/ee617254.aspx

2013年10月11日金曜日

Windows Server 2012 Failover Cluster logの場所

  • このエントリーをはてなブックマークに追加


Windows Server 2012ではGet-ClusterLogというPowershellコマンドがあります。これを使って、クラスタログの場所や、ログファイルの属性(サイズ、更新日時)などを確認することができます。

Get-ClusterLog

image

ログファイルのLengthは4369648で、場所は\\WS1202.abcd.local\admin$\Cluster\Reports\Cluster.logになっていることがわかります。

2013年9月5日木曜日

PowershellでHyper-V仮想マシンをバックアップする

  • このエントリーをはてなブックマークに追加


Windows Server 2012 でホストのバックアップ機能で仮想マシンをバックアップすることができます。

仮想マシンバックアップ用のPowershellコマンドを紹介します。

主な流れとしては、

1:バックアップポリシーを作成する

2:バックアップデータの保存場所、バックアップ対象の仮想マシン、バックアップスケジュールなどをポリシーに紐付ける

3:バックアップポリシーをセット、もしくは開始する

#既存のバックアップポリシーを削除
try { Remove-WBPolicy -all -force }
Catch { Write-Host "No existing Jobs to remove"}

#新しいバックアップポリシーを作成
$bkPolicy = New-WBPolicy

#バックアップデータの保存先を作成
#ローカルボリュームを使う
$bkTarget = New-WBBackupTarget -VolumePath B:

#ネットワーク共有の場合
#$bkTarget = New-WBBackupTarget -NetworkPath \\Server01\BackupStorageLocation


#保存先をポリシーに追加
Add-WBBackupTarget -Policy $bkPolicy -Target $bkTarget

#バックアップ対象となる仮想マシンをポリシーに追加
$VMs = Get-WBVirtualMachine | where vmname -like "et-lab*"
Add-WBVirtualMachine -Policy $bkPolicy -VirtualMachine $VMs

#バックアップスケジュールを設定し、ポリシーに追加
$bkTime = [datetime] "22:00"
Set-WBSchedule -Policy $bkPolicy -Schedule $bkTime


#ポリシーをアクティブする
Set-WBPolicy -Policy $bkPolicy -AllowDeleteOldBackups

#バックアップを直ちに開始。この場合は、スケジュールを設定する必要はない
#Start-WBBackup -Policy $bkPolicy -AllowDeleteOldBackups

2013年8月2日金曜日

Powershell 2.0では配列にContainsメッソドが使えない

  • このエントリーをはてなブックマークに追加


Powershell 2.0では、配列に要素が存在するかを確認するときに、Contains()メッソドを使うと、エラーが発生します。

[System.Object[]] に 'contains' という名前のメソッドが含まれないため、メソッドの呼び出しに失敗しました。
発生場所 行:1 文字:14
+ $arr.contains <<<< ("aa")
    + CategoryInfo          : InvalidOperation: (contains:String) []、RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

Powershell 3.0ではうまくいくのですが、Powershell 2.0では使えません。

image

代替策としては、-Containsを使います。

$arr  –contains  “aa”

実行すると、Trueが返って来ます。

Powershell 重複要素 異なる要素の出力と配列結合

  • このエントリーをはてなブックマークに追加


今日は、Powershellの配列についての話です。

複数配列に存在している同じ(共通)要素を取り出したり、異なる要素を出力したりすることがあります。

例えば、以下2つの配列があるとします。

$array1 = "apple","bear","cat","dog"
$array2 = "apple","book","cut","dog"

1)2つ配列の共通要素を出力する

$array1 | Where-Object { $array2 -contains $_}
または
$newArr = @()
$array1 | ForEach-Object{ if($array2 -contains $_){ $newArr += $_ }}

 

2)$array1にある、$array2にない要素を出力する

$array1 | Where-Object { $array2 -notcontains $_}
または
$newArr = @()
$array1 | ForEach-Object{ if($array2 -notcontains $_){ $newArr += $_ }}

 

3)2つの配列を結合して、重複要素を重複させないようにする

$unionArr = $array1 + $array2 |  Select-Object –Unique

image

2013年3月25日月曜日

PowershellでWordをPDFに変換

  • このエントリーをはてなブックマークに追加


以下の三行でワードをPDFに変換できます。

$Word=NEW-OBJECT –COMOBJECT WORD.APPLICATION

$Doc=$Word.Documents.Open(“C:\test.docx”)

$Doc.SaveAs([ref] “C:\test.pdf”, [ref] 17)

 

これをベースにして、複数ワードファイルを一括変換したり、フォルダ内のワードファイルを変換したりすることができます。

参考

Weekend Scripter: Convert Word Documents to PDF Files with PowerShell

2012年12月27日木曜日

Powershell 3.0 リモート処理を行う方法

  • このエントリーをはてなブックマークに追加


Powershell 3.0ではリモートコンピューターを操作、管理剃る方法は主に3つあります。

方法1:コマンドの-ComputerNameパラメーターを使う
・リモートコンピューターに対して、「リモート」から操作を行う。
・複数のコンピューターを指定可能
※-ComputerNameを使用する場合、PSセッションは張られない。

リモートコンピューターWS201202に対して、Get-Processを実行する

PS C:\Users\Administrator> Get-Process -ComputerName ws201202

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    166      11     1664       4304    59             360 csrss
    169      12     2120      15580   195             412 csrss
    415      36    19900      25208   870            1628 dfsrs

複数のリモートコンピューターを指定

PS C:\Users\Administrator> Get-Process -ComputerName ws201201,ws201202

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    112      11     4756      12688    89     0.47   3872 conhost
    160      11     1664       4300    59             360 csrss
    147      11     1572       1608    62     1.61    360 csrss
    169      12     2120      15580   195             412 csrss

-ComputerNameパラメーターを持つコマンド一覧を表示
PS>Get-Command -ParameterName ComputerName

 

方法2:Invoke-Command -ComputerName <name> -ScriptBlock {コマンドブロック}を使う
・-ComputerNameパラメーターを持たないコマンドに対応
・リモートコンピューターの「中」で処理を行う
・複数のコンピューター指定可能
・PSセッションが張られる。コマンド終了時にセッションは消滅

リモートコンピューターWS201201、WS201202上のC:\tempの中身を表示

PS C:\Users\Administrator> Invoke-Command -ComputerName ws201201,ws201202 -ScriptBlock {Get-ChildItem C:\temp}

    ディレクトリ: C:\temp

Mode                LastWriteTime     Length Name                                  PSComputerName
----                -------------     ------ ----                                  --------------
-a---        2012/12/27     15:43          0 test.txt                              ws201202
d----        2012/12/21     11:04            Exchange2013                          ws201201

 

方法3:Enter-PSSession -ComputerName … を使う
・対話モードでPowershellを実行(SSHのように使う)
・Exitコマンドでセッションを切断する。

PS C:\Users\Administrator> Enter-PSSession -ComputerName ws201202
[ws201202]: PS C:\Users\Administrator.TEST\Documents> Get-Process

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    164      11     1668       4308    60     2.34    360 csrss

PowerShellによるWindowsサーバ管理術
永尾 幸夫 小鮒 通成 国井 傑 竹島 友理 牟田口 大介
ソフトバンククリエイティブ
売り上げランキング: 174,591

2012年12月23日日曜日

Exchange Server 2010 Powershellで DAGを構成する

  • このエントリーをはてなブックマークに追加


Step 1:DAGを作成する
New-DatabaseAvailabilityGroup -Name 'RadoreDAG' -WitnessServer 'EXGW01' -WitnessDirectory 'C:\RadoreDAG'

Step2:1台目のメールボックスサーバーをDAGに追加する
Add-DatabaseAvailabilityGroupServer -Identity 'RadoreDAG' -MailboxServer 'EXCAS01'

Step3:DAG用のネットワーク(パブリック、レプリケーション)を作成する
パブリックネットワーク
New-DatabaseAvailabilityGroupNetwork -DatabaseAvailabilityGroup RadoreDAG -Name 
Internet –Description "Internet Network" -Subnets 94.101.92.0/24 -ReplicationEnabled:$False
レプリケーションネットワーク
New-DatabaseAvailabilityGroupNetwork -DatabaseAvailabilityGroup RadoreDAG -Name 
Backup -Description "Backup Network" -Subnets 192.168.0.0/16 -ReplicationEnabled:$True

Step 4:DAGのIPアドレスを設定する
Set-DatabaseAvailabilityGroup -Identity RadoreDAG -DatabaseAvailabilityGroupIPAddresses 94.101.92.10

Step 5:二台目のメールボックスサーバーをDAGに追加する
Add-DatabaseAvailabilityGroupServer -Identity 'RadoreDAG' -MailboxServer 'EXCAS02'

Step 6:メールボックスデータベースを作成する
New-MailboxDatabase -Server 'EXCAS01' -Name 'Database01' -EdbFilePath 'C:\Program Files\Microsoft\Exchange Server\V14\Mailbox\Database01\Database01.edb' -LogFolderPath 'C:\Program Files\Microsoft\Exchange Server\V14\Mailbox\Database01'

Step 7:データベースの状態を確認して、マウントする
Get-MailboxDatabaseCopyStatus

Mount-Database -Identity 'Database01'

Step 8:他のメールボックスサーバーにデータベースを複製する
Add-MailboxDatabaseCopy -Identity 'Database01' -MailboxServer 'EXCAS02' -ActivationPreference '2'

Step 9:データベース複製状態を確認し、複製を開始する
Get-MailboxDatabaseCopyStatus -Identity 'Database01'

Update-MailboxDatabaseCopy -Identity 'Database01\EXCAS02'


参考

http://www.yusufozturk.info/exchange-server/hosted-exchange-2010-setup-guide-part-2.html


ひと目でわかるExchange Server 2010
ひと目でわかるExchange Server 2010
posted with amazlet at 12.12.23
エディフィストラーニング株式会社 竹島友理 飯室美紀 田島静
日経BP社
売り上げランキング: 170,625



Powershell 3.0でHyper-VのVHDファイルを最適化する

  • このエントリーをはてなブックマークに追加


Hyper-Vの仮想環境で多くの仮想マシンを動かしていたり、スナップショットをいっぱい取ったりしていませんか。そんなときによくネックになるのはハードディスクの容量ですね。仕方なく、スナップショットを削除したり、仮想ディスク(VHD)の最適化をしたりする必要があります。しかし、仮想ディスク(VHD)ファイルがいっぱいあって、1つずつ手で最適化するのが面倒です。Windows Server 2012になってPowershell 3.0で一括で簡単にVHDファイルを最適化することが可能です。

Powershell 3.0ではOptimize-VHDというコマンドがあります。以下の例では、C:\VMs下のすべての.vhd(.vhdx)ファイルを最適化することを実現します。

$vmsRoot = "C:\VMs"

Get-ChildItem –File –Path $vmsRoot –Filter *.vhd* –Recurse | Optimize-VHD  -Mode quick

ここで最適化モード(Mode)について、ちょっと説明します。

モード 詳細
Retrim ブロックの整理のみを行う。
0バイトブロックのスキャン、未使用のブロックの回収はしない。
ディスクが読み取り専用でマウントされている場合のみ。
Full 0バイトブロックのスキャン、未使用のブロックの回収を行う。
ディスクが読み取り専用でマウントされている場合のみ。
VHDファイルの既定モード
Quick 未使用のブロックの回収はするが、0バイトブロックのスキャンはしない。
ディスクが読み取り専用でマウントされている場合のみ。
VHDXファイルの既定モード
Pretrimmed Quickモードのように動作する。読み取り専用でマウントされる必要がない。
未使用のブロックの探索はQuickモードより遅い。
Windows 8または以降のOSに使われているVHDXファイル、あるいはVHDXがすでにコマンドのRetrimモードで最適化された場合に使う。
Prezeroed Quickモードのように動作する。読み取り専用でマウントされる必要がない。
未使用のブロックの探索はQuickモードより遅い。
特定のツールでディスク上のFree spaceを0にした場合に使う。

Powershellでドメイン内のクライアントに対してグループポリシーを更新する

  • このエントリーをはてなブックマークに追加


グループポリシーを更新するには、gpupdateユティリティを使います。既定ではgpupdateはコンピューターの構成、ユーザーの構成両方を更新します。コンピューターの構成のみを更新する、またはユーザーの構成のみを更新する時に、/targetオプションをつけます。

コンピューターの構成の更新
PS C:\Users\Administrator> gpupdate /target:computer
Updating Policy...

Computer Policy update has completed successfully.


ユーザーの構成の更新
gpupdate /target:user

既定ではgpupdateは変更された設定しか更新しません。すべての設定を強制的に更新するには、/forceオプションを使用します。

PS C:\Users\Administrator> gpupdate /force
Updating Policy...

User Policy update has completed successfully.
Computer Policy update has completed successfully.

 

これからPowershell3.0でドメイン内のクライアントに対してグループポリシー更新をご紹介します。

Step 1:ドメイン内のクライアントオブジェクトを取得する。

ここでGet-ADComputerコマンドを使います。Get-ADcomputerコマンドはActive Directoryモジュールに含まれています。RSATツールからActive Directoryモジュールをインストールできます。

$clientPC = Get-ADComputer –Filter *

 

Step 2:クライアントごとに、Powershell リモートセッションを作成する。

New-PSSessionコマンドでセッションを作成します。

$credential = Get-Credential test\administrator

$session = New-PSSession –ComputerName $clientPC.name –Credential $credential

クライアントがオフラインになっている時に、以下のようなエラーメッセージが表示されます。

New-PSSession : <pc name> Connecting to remote server <pc name> failed with the following error message : The WinRM client cannot process the request because the server name cannot be resolved.

オンラインしているクライアントのセッションが成功しているので、エラーを無視していいです。

 

Step 3:リモートクライアントでgpupdateコマンドを実行する

Invoke-Commandを使います。確率されたセッションごとにScriptBlock内のコマンドを実行します。

Invoke-Command -Session $session -ScriptBlock {gpupdate /force}

 

Step 4:コマンドの実行結果を確認する。

グループポリシーが正しく更新された場合、システムイベントログにEvent 1502が出力されます。Get-EventLogコマンドで確認できます。

Invoke-Command -Session $session -ScriptBlock {Get-EventLog -LogName system -InstanceId 1502 -Newest 1

Windows PowerShell ポケットリファレンス (POCKET REFERENCE)
牟田口 大介
技術評論社
売り上げランキング: 241,533

2012年12月22日土曜日

Windows Server 2012 Powershell 3.0で仮想マシンのパフォーマンス情報を収集

  • このエントリーをはてなブックマークに追加


Windows Serve 2012ではPowershellコマンドで仮想マシンのパフォーマンス情報を取得することができます。

まず、仮想マシンへの監視機能(モニタリング)を有効にする

Enable-VMResourceMetering –VMName vm01

有効にしたら、仮想マシンの動作状況をモニタリングできます。Measure-VMコマンドを使ってパフォーマンス情報を収集します。

Measure-VM –VMName vm01

収集した情報をExport-CsvコマンドでCSVファイルにも出力できます。

Measure-VM -VMName vm01 | Export-Csv -Path c:\temp\vm01perf.csv -Append

Powershellで電子メールを送信する

  • このエントリーをはてなブックマークに追加


Powershell2.0ではSend-MailMessageという電子メール送信用のコマンドが導入されました。このコマンドを使ってPowershellで簡単に電子メールメッセージを送信できます。

構文は下記の通りです。

Send-MailMessage [-To] <string[]> [-Subject] <string> -From <string> [[-Body] <string>] [[-SmtpServer] <string>] [-Attachments <string[]>] [-Bcc <string[]>] [-BodyAsHtml] [-Cc <string[]>] [-Credential <PSCredential>] [-DeliveryNotificationOption {None | OnSuccess | OnFailure | Delay | Never}] [-Encoding <Encoding>] [-Priority {Normal | Low | High}] [-UseSsl] [<CommonParameters>]

メール送信時に必要な項目を指定します。

差出人: -From
宛先: -To
件名: -Subject
本文: -Body
SMTPサーバー: -SmtpServer
CC/BCC: -Cc/-Bcc
添付ファイル: -Attachments

例:User2からUser1にGet-Processの結果を送信する
Send-MailMessage –To "user1@contoso.com" –From  "user2@contoso.com" –Subject "Test mail sent by powershell" –body ((Get-process) | out-string) –SmtpServer ex1.contoso.com

PowerShellによるWindowsサー<br /><br />バ管理術
永尾 幸夫 小鮒 通成 国井 傑 竹島 友理 牟田口 大介
ソフトバンククリエイティブ
売り上げランキング: 174,591

2012年12月20日木曜日

Windows Serve 2012 PowershellでADドメインサービスの追加、構成、削除

  • このエントリーをはてなブックマークに追加


Windows Server 2012でPowershellコマンドを使ってActive Directoryドメインサービスのインストール、構成、DC降格などを試してみました。

・Active Directoryドメインサービスの役割の追加

Add-WindowsFeature -Name AD-Domain-Services

 

・Active Directoryドメインサービスの構成

$password = ConvertTo-SecureString -String "P@ssw0rd" -AsPlainText -Force

Import-Module ADDSDeployment
Install-ADDSForest `
-CreateDnsDelegation:$false `
-DatabasePath "C:\Windows\NTDS" `
-DomainMode "Win2012" `
-DomainName "test.local" `
-DomainNetbiosName "TEST" `
-ForestMode "Win2012" `
-InstallDns:$true `
-LogPath "C:\Windows\NTDS" `
-NoRebootOnCompletion:$false `
-SysvolPath "C:\Windows\SYSVOL" `
-Force:$true `
-SafeModeAdministratorPassword $password

 

・既存ドメインに新しいDC(ドメイン参加済みのサーバー)を追加し、構成する(リモートで実行する)

Install-WindowsFeature -Name AD-Domain-Services -ComputerName WS201202

$password = ConvertTo-SecureString -String "P@ssw0rd" -AsPlainText -Force
Invoke-Command -ComputerName WS201202 -ScriptBlock `
{Import-Module ADDSDeployment;Install-ADDSDomainController `
-DomainName "contoso.local" `
-NoGlobalCatalog:$False `
-CreateDNSDelegation:$False `
-Credential (Get-Credential) `
-CriticalReplicationOnly:$False `
-DatabasePath "C:\Windows\NTDS" `
-InstallDNS:$True `
-LogPath "C:\Windows\NTDS" `
-NoRebootOnCompletion:$False `
-SafeModeAdministratorPassword $password `
-SiteName "Default-First-Site-Name" `
-SysVolPath "C:\Windows\SysVol" }

 

・コマンドでインストールする際にAD管理ツール(Active Directory ユーザーとコンピューター、ADSIエディターなど)がインストールされていないため、別途インストールする必要がある

Add-WindowsFeature RSAT-ADDS

 

・DCを降格する

Import-Module ADDSDeployment
Uninstall-ADDSDomainController `
-DemoteOperationMasterRole:$true `
-IgnoreLastDnsServerForZone:$true `
-LastDomainControllerInDomain:$true `
-RemoveApplicationPartitions:$true `
-Force:$true

Import-Module ActiveDirectory
Uninstall-ADDSDomainController -IgnoreLastDCInDomainMismatch `
-RemoveApplicationPartitions

 

・DNS、Active Directoryドメインサービスの役割を削除する

Unintall-WindowsFeature DNS

Uninstall-WindowsFeature AD-Domain-services


Windows Server 2012テクノロジ入門 (TechNet ITプロシリーズ)

新品価格
¥4,935から
(2012/12/20 20:49時点)

2012年12月18日火曜日

Powershellで同じ構造のフォルダを比較

  • このエントリーをはてなブックマークに追加


同じ構造のフォルダを比較するPowershellスクリプトを書いてみました。

フォルダ内のサブフォルダ、ファイルのパス、更新日時、サイズを基準にして比較しています。

ソースコードは以下の通りです。

#==============================================
#処理:同じ構造のフォルダを比較する
#実行条件:2つのフォルダ名が同じであること
#==============================================
$dir1 = "u:\test"
$dir2 = "c:\temp\test"

if(!(Test-Path $dir1) -or !(Test-Path $dir2)){
    Write-Output "フォルダが存在しません。"
    Exit 1
}

$dir1name = (Get-Item $dir1).Name
$parent1 = (Get-Item $dir1).Parent.Name
$dir2name = (Get-Item $dir2).Name
$parent2 = (Get-Item $dir2).Parent.Name
if($dir1name -ne $dir2name){
    Write-Output "フォルダ名が異なるため、比較できません。"
    Exit 1
}

#連想配列
$content = @{}
$dir1only = @()
$dir2only = @()

$dir1con = Get-ChildItem $dir1 -Recurse | % {$nametime = $_.fullname + " " + $_.lastwritetime.ToString() + " " + $_.Length; Write-Output $nametime}
$dir2con = Get-ChildItem $dir2 -Recurse | % {$nametime = $_.fullname + " " + $_.lastwritetime.ToString() + " " + $_.Length; Write-Output $nametime}

foreach($con in $dir1con){
    $item = $con.Substring($parent1.Length)
    $content[$item] = -1
}

foreach($con in $dir2con){
    $item = $con.Substring($parent2.Length)
    if(++$content[$item] -eq 1){
        $dir2only += $con
    }
}

foreach($con in $dir1con){
    $item = $con.Substring($parent1.Length)
    if($content[$item] -eq -1){
        $dir1only += $con
    }
}

Write-Output "差分を出力します。"
Write-Output "-----------$dir1-----------"
Write-Output $dir1only
Write-Output "-----------$dir2-----------"
Write-Output $dir2only

 

ソースコードをコピーし、$dir1、$dir2に該当の値を変更して.ps1に保存して実行する。

機能が十分ではないため、複雑な比較はできません。

Windows Server 2012 Hyper-V Cookbook

新品価格
¥4,330から
(2012/12/20 20:55時点)

2012年12月17日月曜日

Windows Server 2012 Hyper-V管理用のPowershellコマンドがない

  • このエントリーをはてなブックマークに追加


Windows Server 2012では、Hyper-V管理用のPowershellモジュールが提供され、Powershellコマンドで仮想マシン作成、削除、エクスポートなどを管理できるようになりました。しかし、Windows Serve 2012 Coreで構成したHyper-V環境でPowershellコマンド(Export-VM)で仮想マシンをエクスポートしようと思いますが、PowershellコマンドプロンプトでExport-VMなどのコマンドが認識されません。
「Import-Module HyperV」でHyper-V管理用モジュールをインポートしても、「モジュールが見つかりません」のようなエラーが出ます。
Import-Module : モジュール ディレクトリに有効なモジュール ファイルが見つからなかったため、指定されたモジュール 'Hyper-V'
は読み込まれませんでした。
+ CategoryInfo : ResourceUnavailable: (Hyper-V:String) [Import-Module], FileNotFoundException
+ FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

「Get-Module -ListAvailable」でインポート可能なモジュール一覧を出力してみたら、そもそもHyper-V管理モジュールがない事がわかりました。
Hyper-V管理モジュールがないということは、Hyper-Vモジュールがインストールされていないということです。モジュール自体はWindows Serve 2012のRemote Server Administration Tools (RSAT)に含まれています。下記のコマンドでインストールできます。
Add-WindowsFeature Hyper-V-PowerShell
インストール完了したら、Get-VM、Export-VMなどのコマンドが使えるようになります。


Windows Server 2012 Hyper-V Cookbook

新品価格
¥4,330から
(2012/12/20 20:55時点)

2012年12月13日木曜日

Windows Server 2012 Powershellで仮想化されたDCを複製して展開する

  • このエントリーをはてなブックマークに追加


Windows Server 2012では仮想化されたドメインコントローラー(DC)を複製して展開する事ができます。前提条件として、以下のとおりです。

・複製元となるDCはPDCエミュレータ(FSMO役割の一つ)役割を持ってはいけない

・複製元DCはClonable Domain Controllers グループのメンバーであること

・Hyper-VホストはWindows Server 2012であること

・DCはWindows Server 2012であること

複製、展開処理はPowershell 3.0で実現できます。

仮に、同一ホスト上で仮想DCがすでに2台(DC1、DC2)ある、DC1はPDCエミュレータの役割を持っている、DC2を複製してDC3を作成するとします

Powershellは下記のような感じです。

$srcDC = "dc2"
$distDC = "dc3"
$hypervHost = "hv01"

#複製元のDCを"Cloneable Domain Controllers"のメンバーに追加する
Get-ADComputer -Identity $srcDC | Foreach { Add-ADGroupMember -Identity "Cloneable Domain Controllers" -Members $_.samAccountName }

#c:\tempフォルダにCustomDCCloneAllowList.xmlが作成される。解説①
Invoke-Command -ComputerName $srcDC -ScriptBlock { Get-ADDCCloningExcludedApplicationList -GenerateXml -Path C:\temp -Force }

#新しいDCの構成ファイルを作成する
$dcConfig = "New-ADDCCloneConfigFile -Static -IPv4Address ""192.168.1.1"" '
                      -IPv4DNSResolver ""192.168.1.10"" -IPv4SubnetMask ""255.255.255.0"" '
                      -IPv4DefaultGateway ""192.168.1.253"" -ColneComputerName " + $distDC + '
                      " -SiteName ""Default-First-Site-Name"""
Invoke-Command -ComputerName $srcDC -ScriptBlock { $dcConfig }

#複製元のDCをシャットダウンする
Stop-VM -Name $srcDC

#複製元のDCをエクスポートする
Get-VM -Name $srcDC | Foreach { Export-VM $_ -Path C:\VirtualMachines }

#複製元のDCを起動する
Start-VM -Name $srcDC

#エクスポートした仮想マシンをインポートする
#構成ファイルをGetする
$config = (Get-Item "C:\VirtualMachines\$srcDC\Virtual Machines\*.xml").fullname
#C:\VirtualMachinesフォルダに複製先DCを保存するフォルダを作成
New-Item -Path "C:\VirtualMachines" -Name $distDC -ItemType directory
#インポートする
Import-VM -Path $config -ComputerName $hypervHost -GenerateNewId -Copy -VhdDestinationPath "C:\VirtualMachines\$distDC"

#仮想マシンの名前が複製元DCと同じなってしまうので、名前を変更する
Get-VM -Name $srcDC | Where-Object {$_.State -eq "Off"} | Rename-VM -NewName $distDC

#新しいDCを起動する
Start-VM -Name $distDC

解説①:#複製元のDCにインストールされたクローンできない可能性があるプログラムやサービスの一覧を取得します。クローンできるかどうか、ベンダーに確認する必要があります。できない場合は、事前にプログラムをアンインストールする必要があります。

Windows Server 2012 Hyper-V Cookbook

新品価格
¥4,330から
(2012/12/20 20:55時点)

Windows Server 2012 NICチーミングを構成

  • このエントリーをはてなブックマークに追加


Windows Server 2012の新機能NICチーミングの構成方法をご紹介します。Powershell3.0がすごいPowerfullになっているので、Powershell3.0のコマンドで構成したいと思います。

まずは、Get-NetAdapterでネットアダプターの情報を確認します。こちらの環境ではNICが二枚があって、それぞれ"イーサネット"、"イーサネット2"という名前になっています。この名前を記録しておいて、後ほど使います。
次に、New-NetLbfoTeamコマンドでTeamを作成します。コマンドは下記です。
New-NetLbfoTeam -Name NetTeam1 -TeamMembers 'イーサネット 2', 'イーサネット' -TeamNicName TeamNic1
image
コマンドを実行したら、NetTeam1というネットワークチームが作成されます。既定ではチーミングモードが「スイッチに依存しない」で、負荷分散モードが「アドレスのハッシュ」となっています。「ネットワーク接続」で見たら、TeamNic1というチーム用のNICが作成されている事がわかります。
image
チームのプロパティを確認します。一番下に「一部の設定は、ゲスト仮想マシンで実行されているサーバーでは使用できません」というメッセージがあります。「チーミングモード」、「負荷分散モード」を変えられないようです。別のモードに変更したい場合は、おそらくチームを再作成する必要があります。
image

最後に、TeamNic1に対してIPアドレス、デフォルトゲートウェイ、DNSなどの設定を行います。もちろん、Powershellコマンドで設定できます。
Get-NetAdapter でInterfaceIndexを確認します。
Get-NetAdapter -Name TeamNic1
New-NetIPAddressでIPを設定
New-NetIPAddress -InterfaceIndex 22 -IPAddress 10.10.3.55 -PrefixLength 21 -DefaultGateway 10.10.0.1 -AddressFamily IPv4
Set-DnsClientServerAddressでDNSを指定
Set-DnsClientServerAddress -InterfaceIndex 22 -ServerAddresses 10.10.1.60
image
これで、TeamNic1でネットワークに接続できるようになります。

ひと目でわかるWindows Server 2012 (TechNet ITプロシリーズ)

新品価格
¥2,730から
(2012/12/20 20:52時点)

PowershellでWindows各種設定を行う

  • このエントリーをはてなブックマークに追加


Windows Server 2012でOS各種設定(コンピューター名変更、ファイアーウォール無効、リモートデスクトップ有効、ドメイン参加など)をPowershellで自動化したいと思います。使うコマンドをメモします。
コンピューター名変更
Powershel 3.0の標準コマンドで変更
Rename-Computer -ComputerName <oldName> -NewName <newName> [-Restart]
コマンド実行後、再起動を行うには、コマンドに-Restartをつけます
WMIを使ってコンピューター名を変更
(Get-WmiObject -Class Win32_ComputerSystem).Rename("newName")
サーバー再起動する
Restart-Computer

Windows ファイアーウォールを無効/有効1)プライベートネットワーク、パブリックネットワーク、ドメインネットワークで全て無効
Get-NetFirewallProfile | Set-NetFirewallProfile -Enabled false
2)パブリックネットワークだけで無効
Get-NetFirewallProfile -Name Public | Set-NetFirewallProfile -Enabled false
3)ファイアーウォールを有効にするには、"false"を"true"に書き換えればいい。
 
リモートデスクトップ接続を有効/無効
Powershell3.0で対応するコマンドが無さそうなので、WMIを使う
1)有効にする
(Get-WmiObject win32_TerminalServiceSetting -Namespace root\cimv2\TerminalServices).SetAllowTSConnections(1)
2)無効にする
(Get-WmiObject win32_TerminalServiceSetting -Namespace root\cimv2\TerminalServices).SetAllowTSConnections(0)
 
ドメイン参加
$admin = "test\administrator"
$password = "P@ssw0rd"
$pass = ConvertTo-SecureString $pwd -AsPlainText -Force
$domainCredential = New-Object System.Management.Automation.PSCredential $admin, $pass
Add-Computer -DomainName "test.local" -ComputerName "testpc" -Credential $domainCredential -OUPath "OU=HR" -Restart -Force


2012年12月11日火曜日

Powershell 3.0でIPアドレスを設定

  • このエントリーをはてなブックマークに追加



従来netsh interfaceコマンドでIPアドレスを設定できるが、Powershell 3.0からIP設定用コマンドが提供されています。


・NetAdapterのInterfaceIndexを確認します。

Get-NetAdapter

image


・IPアドレス、サブネットマスク、デフォルトゲートウェイを設定する

New-NetIPAddress -InterfaceIndex 12 -IPAddress “10.10.3.52” -AddressFamily IPv4 -PrefixLength 21 -DefaultGateway “10.10.0.1”

image

 

・DNSサーバーを設定する

Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses 10.10.1.60, 10.10.1.61

 

・DHCPを有効にする

Set-NetIPInterface -InterfaceIndex 12 -Dhcp Enabled

 

・DNS設定を削除する

Set-DnsClientServerAddress -InterfaceIndex 12 -ResetServerAddresses

 

・IPアドレスを削除する

Remove-NetIPAddress -interfaceIndex 12

 

・デフォルトゲートウェイを削除する

Get-NetRouteでルーティングテーブルを確認

image

Remove-NetRoute –DestinationPrefix 0.0.0.0/0 –InterfaceIndex 12 –NextHop 10.10.0.1でDefaultGatewayを削除

ひと目でわかるWindows Server 2012 (TechNet ITプロシリーズ)

新品価格
¥2,730から
(2012/12/19 22:53時点)

2012年12月8日土曜日

Powershellでディスクの情報(容量)を取得する

  • このエントリーをはてなブックマークに追加


Windows 8(Powershell 3.0)ではGet-Volumeコマンドが追加されています。このコマンドを使って、簡単にディスクの容量などの情報を出力することができます。
例えば、Fドライブの情報を表示します。ドライブの合計サイズ、空き領域など確認できます。
Get-Volume -DriveLetter F
image

Powershell 2.0ではGet-Volumeコマンドがないため、ディスクの情報を取得するには、WMIObjectを使う必要があります。
以下のコマンドはFドライブのdriveletter,label,size,Freeなどの情報をテーブルの形式で出力する。
Get-WmiObject win32_volume -Filter "driveletter = 'f:'" | ft driveletter, label, @{LABEL='Size GB';EXPRESSION = {$_.capacity/1GB}}, @{LABEL='FREE GB';EXPRESSION = {$_.FreeSpace/1GB}} –AutoSize
image

Windows PowerShellクックブック

新品価格
¥4,200から
(2012/12/20 21:06時点)