64 Blog

おぼえがき

Tag: PowerShell (page 3 of 9)

Windows Azure で Backup/Restore-WebConfiguration

Windows Azure でも、Backup-WebConfiguration や Restore-WebConfiguration がちゃんと動作できるのか・・・?。出来るといいなぁ~…。という思いがあったので実験してみました。

とりあえず、[Azure (Full IIS)で PHP を実行] の内容に従って最初っからパッケージファイルを作っていきます。
ただし、上記の時は CGIWebロール を利用しましたが、今回は特に意味は無いのですがWebロールを利用しています。
また、バックアップやリストアの作業を行うため、リモートデスクトップも繋がるようにしています。
※リモートデスクトップはローカルドライブもマップするようにしておいてください。

[Backup-WebConfiguration 編]

1:デプロイしたらリモートデスクトップでロールに接続してIISマネージャーを起動します。
201106142055-1

2:試しに下図のような感じで、適当に新しいサイトを作ってみます。
201106142055-2

3:アプリケーションプールやWEBサイトとして新しく [Backup-Restore-TestSite] が作成されているのを確認します。
201106142055-3201106142055-4

4:Backup-Restore-TestSiteサイトの物理パスで設定したC:\tempフォルダ内に、下記のphpinfoの記述を書いたファイルを置いて念のためサイトの動作を確認します。

<?php phpinfo(); ?>

201106142055-5

5:サイトがちゃんと確認出来たら、ココまでの環境をバックアップします。
具体的には、powershell を起動して、下記のコマンドを実行します。

powershell -executionpolicy remotesigned
Import-Module WebAdministration
backup-webconfiguration (get-date).Tostring("yyyyMMddHHmmss")

最初の行で、poweshell のセキュリティに関する実行ポリシ-を設定します。
次の行で、backup-webconfigurationを利用するため、WebAdministrationモジュールの読み込みを行います。
最後の行で、実際に backup-webconfiguration を実行しています。引数には今日の日付と日時を渡しています。

201106142055-6

6:正常に実行されると、%systemroot%\system32\inetsrv\backup フォルダ内に、スクリプトを実行した日時の名前が付いたフォルダが作成され、このフォルダ内に各種configファイルなどが含まれています。

201106142055-7

7:で、このフォルダを Azure Storage のblobに保存したり、リモートデスクトップでマップしているローカルドライブにコピーなどして保存しておきます。
※このあと Reimage を実行しますので、ココにバックアップデータが無くならないようにしておきます。

8:バックアップデータの保存が完了したら、リモートデスクトップをログオフします。
そして、Management Portalサイトから該当するインスタンスのReimageを実行します。

 

[Restore-WebConfiguration 編]

9:Reimageから戻ってきたら、再度 リモートデスクトップを接続します。

10:IISマネージャーを起動して、先ほど作成した [Backup-Restore-TestSite] サイトやアプリケーションプールが無くなっていることを確認します。
また、%systemroot%\system32\inetsrv フォルダに、先ほどのバックアップフォルダの1つ上の階層のbackupフォルダが無くなっていることを確認します。

11:%systemroot%\system32\inetsrv フォルダに backup フォルダを作成して、先ほどの backup-webconfiguration で取得した日時の名前が付いたフォルダをコピーします。

12:コピーが完了したら、下記のリストアコマンドを実行します。

cd %systemroot%\system32\inetsrv\config\schema
powershell -executionpolicy remotesigned
Import-Module WebAdministration
attrib -r rewrite_schema.xml
restore-webconfiguration -Name "日時の名前の付いたフォルダ名"
attrib +r rewrite_schema.xml

内容的には、backup-webconfigurationと大きな違いはありませんが、
rewrite_schema.xmlファイルが読み取り専用になっているため、attribコマンドで読み取り専用を解除してから、restore-webconfigurationコマンドを実行しています。

201106142055-11

13:エラーが表示されなかったら、IISマネージャーより[Backup-Restore-TestSite]サイトやアプリケーションプールが表示されることを確認します。
また、再度 phpinfoファイルを作成したりしてサイトの動作を確認します。

ということで、Windows Azure 上でも backup/restore-webconfiguration コマンドは十分に利用できます。
スタートアップタスクなどを使って構成すれば、OSSをインストールしすぎて、ついつい300本超えてしまった環境で、GuestOSのバージョンアップが発生したとしても自動で復旧かかっていますので、バックアップや復旧の際の選択肢の1つとして考慮に入れてもいいかもしれません。

powershell スクリプトを実行する時の設定ファイル

今回(も)とりあえずメモ的な内容です。
powershell スクリプトを実行するときの各設定値を保存した設定ファイルを使う方法と、スクリプト自体のファイル名やパスの取得についてです。

■設定ファイルについて
下記のように xml で、スクリプトの設定値を外部ファイルに保存しておくと扱いやすいです。
例えば下記のような xml ファイルを c:\temp フォルダに config.xml として保存します。

<?xml version="1.0"?>
<Configuration Enviroment="てすと" >
	<user>
		<name>bakecat</name>
		<age>4</age>
		<species>cat</species>
	</user>
</Configuration>

あとは、powershell で xml型を指定した変数に取り込みます。

[xml]$config = Get-Content "c:\temp\config.xml"

<name>の値を呼び出すには下記のような感じです。

$config.Configuration.name

属性値も同様の方法で参照できます。

$config.Configuration.Enviroment

 
■スクリプト自体のファイル名とパス
.ps1 のスクリプトファイルを実行する際、スクリプトファイルの名前やパスを取得したいときがあります。
そんな時 $myInvocation 変数を使うと簡単に取得できます。

特にAzure上で上記のような設定ファイルを読み込むときなどは、ドライブレターが変化してパスの指定が誤ることがあるので、最初にカレントフォルダが分かってるとだいぶやりやすいです。

下記は、実行している自分自身のスクリプトファイルのディレクトリパスを取得する例です。

[System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition)

PowerShell から Microsoft iSCSI Software Target を設定する

Microsoft iSCSI Software Target 3.3をインストールすることにより、PowerShellからiSCSI ターゲットの管理ができるようになっています。
利用できるコマンドレットは以下の通りです。
(※helpコマンドで確認したものです。)(※technetはこちら

Add-VirtualDiskTargetMapping 仮想ディスクを iSCSI ターゲットに割り当てます。
Get-IscsiServerTarget iSCSI ターゲットとその関連付けられたプロパティを取得します。
Get-IscsiVirtualDisk iSCSI 仮想ディスクとその関連付けられたプロパティを取得します。
New-IscsiServerTarget 指定した名前で新しい iSCSI ターゲット オブジェクトを作成します。
New-IscsiVirtualDisk 指定したファイル パスとサイズで iSCSI 仮想ディスクを作成します。
Remove-IscsiServerTarget 指定した iSCSI ターゲットを削除します。
Remove-IscsiVirtualDisk iSCSI 仮想ディスクオブジェクトを削除します。VHD ファイルは削除されません。
Remove-VirtualDiskTargetMapping 指定した iSCSI 仮想ディスクと iSCSI ターゲット間の割り当てを削除します。
Set-IscsiServerTarget 指定した iSCSI ターゲットの設定を変更します。
Set-IscsiVirtualDisk 指定された iSCSI 仮想ディスクの設定を変更します。

 

iSCSIターゲットとして使うための方法例としては、下記のような流れになります。
1:ターゲットの作成(New-IscsiServerTarget)
2:iSCSI用VHDオブジェクト作成(New-IscsiVirtualDisk)
3:VHDをターゲットにマップ(Add-VirtualDiskTargetMapping)

また、ターゲットまでの削除例として以下のような流れになります。
1:ターゲットとVHDのマップ解除(Remove-VirtualDiskTargetMapping)
2:iSCSI用VHDオブジェクト削除(Remove-IscsiVirtualDisk)
3:ターゲット削除(Remove-IscsiServerTarget)

GUIでやってた流れをコマンドに当てはめていくだけなので、簡単に設定できてしまいます。
 

■ターゲットの作成例

#モジュールの追加
Import-Module MicrosoftiSCSITarget

#myTargetという名前でターゲットの作成(イニシエーターIDとして、ここではIQNを用いています)
New-IscsiServerTarget `
 -TargetName myTarget `
 -InitiatorId iqn:iqn.1991-05.com.microsoft:xxxxxxxxxxxxxxx `
 | out-null

#iSCSI用VHD作成
New-IscsiVirtualDisk `
 -DevicePath c:\temp\vhd4iSCSI01.vhd `
 -Size 10MB `
 | out-null

#ターゲットとVHDのマップ
Add-VirtualDiskTargetMapping `
 -TargetName myTarget `
 -DevicePath c:\temp\vhd4iSCSI01.vhd

 

■ターゲットの削除例

#モジュールの追加
Import-Module MicrosoftiSCSITarget

#ターゲットとVHDのマップを解除
Remove-VirtualDiskTargetMapping `
 -TargetName myTarget `
 -DevicePath c:\temp\vhd4iscsi01.vhd `
 -Force

#iSCSI用VHDオブジェクト削除
Remove-IscsiVirtualDisk c:\temp\vhd4iscsi01.vhd -Force

#ターゲット削除
Remove-IscsiServerTarget myTarget -Force

Azure の IIS ログをダウンロードする

AzureのIISログを管理をするような機会があった際にたぶん忘れてるので…頭の中の整理もかねて少しまとめておきます。
※Azureでのログの内容は下記のMSDNの内容をご覧ください。
http://msdn.microsoft.com/ja-jp/library/ff966484.aspx

ログをダウンロードするにあたって、今回の実験環境下でのIISログが転送された際のwad-iis-logfilesコンテナ内をCloudXplorerを使って確認しておきます。

201104132121001

以下は実際に実験したPowerShellの内容です。
実行すると一番古いログファイルをC:\Tempフォルダにダウンロードします。

#DLL追加
Add-Type -Path "C:\Program Files\Windows Azure SDK\v1.4\ref\Microsoft.WindowsAzure.StorageClient.dll"

#名前空間を入れた文字列
$mw = "Microsoft.WindowsAzure."
$mws = "Microsoft.WindowsAzure.StorageClient."

#ストレージのアカウントとアクセスキーで認証情報を取得
$credential = New-Object ($mw + "StorageCredentialsAccountAndKey")("ストレージアカウント","ストレージアクセスキー")

#BlobClientの作成
$client = New-Object ($mws + "CloudBlobClient")("http://xxxxx.blob.core.windows.net/", $credential);

#BlobClientのGetblobReferenceを使用してCloudBlobを取得
$blob = $client.GetblobReference("wad-iis-logfiles")

#メタデータを利用してBlobを取得
$opt = New-Object Microsoft.WindowsAzure.StorageClient.BlobRequestOptions
$opt.UseFlatBlobListing = $true;
$opt.BlobListingDetails = [Microsoft.WindowsAzure.StorageClient.BlobListingDetails]::Metadata
$collection = $blob.Container.ListBlobs($opt)

#一番古いログファイルを取得して、ローカルのC:\Tempフォルダにダウンロード。
$log = $collection | sort $_.Properties.LastModifiedUtc | select -Last 1
$log.DownloadToFile("C:\Temp\" + $log.Uri.Segments[$log.Uri.Segments.Length-1])

 

※$collection の中身は下図のとおりです。
BlobRequestOptionsを使って、ListBlobs()を実行すると簡単にログファイルを取得できます。

201104132121002

今回は実験環境ということもあり、そのまんまwad-iis-logfilesコンテナに手を突っ込んでダウンロードしています。が、実際にはデータ転送やログのファイルサイズでの課金問題もありますので、環境などに応じて考えることが必要になります。

Azure で FTPServer の設定を PowerShell で行う – 2

前回のAzureでのFTPの環境は、匿名認証を使うように設定していましたので、今回は基本認証を使うように設定したいと思います。
でも、それだけじゃ 前回の内容と比べ applicationHost.config を少し変更すれば可能なので、今回はWindows Azure Drive 上に フォルダを作成して、そこを FTP のコンテンツフォルダに指定したいと思います。

なお、環境は前回からの続きになります。内容に関しては、リモートデスクトップで接続後に PowerShell で Windows Azure Drive をマウントして基本認証を使った FTP を立てることを目的としていますので 前回の環境から設定を変更される場合は ご注意ください。 Continue reading

Azure で FTPServer の設定を PowerShell で行う – 1

たんたかさんが Azure で WebDAV の設定(1)をしていたので…。WebRole で FTP サーバーを動かしてみようと思います。
といっても WebRole にリモートデスクトップで入って、普通に設定が出来てしまうので、PowerShell から FTP の設定をおこなうようにしてみたいと思います。

なお、ココで紹介しているのは 匿名ユーザーで読み書き可能なFTPサーバーでの設定ですので ご注意ください。また passiveモードでは動きません。

Continue reading

Exchange 2007/2010のメールボックス データベースのサイズを取得する

Exchange 2007 と 2010 での データベースサイズを確認してみます。

 
まずは、Exchange 2007 から。

この例では、Exchange管理シェルから物理ファイル(.edb)のファイルサイズを参照する方法をとっています。
Continue reading

Add-Type の CSharp と CSharpVersion3 について

PowerShell には 他の言語を取り込むための Add-Type コマンドレットが 2.0 から追加されています。
このコマンドレットに関しては 下記リンク先の CodeZine にて大変分かりやすく紹介されていますので、ココでは使い方に関しては省略させて頂きます。
PowerShell 2.0の新機能(6)――他言語の利用
このコマンドレット。非常に便利な機能なのですが、1点だけ個人的に不明瞭な部分がありました。それは…。
Continue reading

PowerShell から IIS 7.5 の ISAPI および CGI の制限の設定

IIS 7.5 の “ISAPI および CGI の制限” の “特定できない CGI/ISAPI モジュールを許可する” の設定変更を PowerShell から行う方法のメモです。

下図の設定の ON/OFF を PowerShell から設定変更してみたいと思います。
20101220_20532_1198

Continue reading

Microsoft DNS のゾーンやレコードを PowerShell で管理する

以前までは WMI の DNS WMI Classes を利用して、色々操作していましたが、MSDN で DnsShell が公開されてますので、今回は DnsShell を利用して ゾーンの作成から基本的なレコードの登録をしてみたいと思います。

なお、今回利用している環境は下記の通りです。

Continue reading

Older posts Newer posts

© 2014 64 Blog

Theme by Anders NorenUp ↑