Web 配置のセットアップを自動化するための PowerShell スクリプト

作成者: Kristina Olson

Web 配置の v2.1 リリースでは、ユーザーが Web 配置を使用して公開できるように IIS サーバーを簡単に構成できる PowerShell スクリプトがいくつかインストールされています。 このページでは、これらのスクリプトを使用して、既定の公開サイトの作成、新規または既存のサイトとユーザーの公開の有効化、SQL または MySQL データベースの公開の作成、委任規則の設定 (すべて PowerShell を使用) する方法について説明します。

使用するスクリプトは次のとおりです。

  • SetupSiteForPublish.ps1
  • CreateSqlDatabase.ps1
  • CreateMySqlDatabase.ps1
  • AddDelegationRules.ps1

要件

  • サーバーには、IIS7 が付属するオペレーティング システムが必要です。これは、Windows Server 2008 または Windows Server 2008 R2 を意味します。 そのマシンの管理者である必要があります。

  • 次の条件が満たされていることを確認します。

    • PowerShell2 をインストールする必要があります (これは Windows Server 2008 R2 に組み込まれています。Windows Server 2008 の場合は、https://www.catalog.update.microsoft.com/ScopedViewInline.aspx?updateid=0be83604-db27-4b99-976a-136a92bd579b から更新プログラムとして PowerShell2 を取得できます。 再起動が必要です。
    • サーバー マネージャーで Web サーバー (IIS) ロールを有効にする必要があります。
    • サーバー マネージャーで IIS の Web 管理サービスの役割サービス ("管理サービス") を有効にする必要があります
    • PowerShell データベース スクリプトを使用するには、サーバーが SQL または MySQL データベースにアクセスできる必要があります。 SQL Server 管理オブジェクトも SQL 用にインストールする必要があります。
    • Web 配置は、管理サービス統合コンポーネントと共にインストールする必要があります。 (このオプションを Web 配置インストーラーに表示するにはまず、Web 管理サービスを有効にする必要があります。)

PowerShell の一般的な手順

  1. Azure PowerShell コマンド ウィンドウを起動します。

    タスク バーの PowerShell アイコンをクリックするか、[スタート] をクリックし、「PowerShell」と入力して、[Windows PowerShell] を選択します。
    [スタート] ボタンが表示されている Windows タスク バーのスクリーンショット。
    (青いアイコン)

  2. 実行ポリシーでスクリプトの実行が許可されていることを確認します。

    1. 「Get-ExecutionPolicy」と入力します。 制限済み (既定値) の場合は、「Set-ExecutionPolicy AllSigned」と入力するなど、より制限の緩い設定にリセットする必要があります。 AllSigned 設定では、署名付きスクリプトの実行が許可されますが、信頼されていない場合はプロンプトが表示されます

    2. 実行ポリシー設定の詳細については、Set-ExecutionPolicy コマンドレットの使用を参照してください。

  3. Web 配置スクリプトのディレクトリに変更します。

    1. cd '%programfiles%\IIS\Microsoft Web Deploy v2\Scripts' (ただし、%programfiles%C:\Program Files などの実際のパスに置き換えます)。

SetupSiteForPublish スクリプトを使用して既定の公開 Web サイトを作成する (データベースなし)

引数なしで SetupSiteForPublish.ps1 スクリプトを実行します。

出力を含む PowerShell コンソールのスクリーンショット。

これにより、次の処理が実行されます。

このスクリプトは、管理者以外の公開用のユーザーとサイトを作成し、公開プロファイル情報をデスクトップ上のファイルに保存します。 具体的には、%systemdrive%\inetpub\WDeploySite に物理サイト ルートを持つ WDeploySite というサイトを作成します。 サイトには WDeployAppPool という一致するアプリケーション プールがあり、既定でポート 8080 (または別のサイトが 8080 を使用している場合は次に使用可能なポート) に割り当てられます。 また、このスクリプトでは、WDeploySiteuser という管理者以外のローカル Windows ユーザーを作成し、そのユーザーに WDeploySite フォルダーにフル コントロール ACL を、サイトに IIS マネージャーのアクセス許可を付与します。 設定情報は、デスクトップの WDeploy.PublishSettings という名前のファイルに保存されます。このファイルは、サイトに公開するために WebMatrix (または Visual Studio) によって使用される場合があります。 このプロファイルには、現時点ではデータベース公開情報は含まれていません。

SetupSiteForPublish スクリプトを使用して、任意のサイトとユーザーの Web 配置による公開を有効にします。

スクリプト: SetupSiteForPublish.ps1

説明: 指定したサイトとユーザー アカウントに対して、指定したユーザーが指定したサイトに公開できるようにします。 このスクリプトは、ユーザー アカウント、サイト、アプリケーション プールを作成し、サイトのディレクトリ ACL と IIS マネージャーのアクセス許可を設定し、設定情報をファイルに保存します。

パラメーター:

名前 Description Default Value メモ
siteName サイトの名前。 サイトが存在しない場合は、サイトが作成されます。 WDeploySite
sitePhysicalPath サイト コンテンツの物理的なファイルの場所。 ディレクトリが存在しない場合は、ディレクトリが作成されます。 %systemdrive%\inetpub\WDeploySite
siteAppPoolName サイトに関連付けられるアプリケーション プールの名前。 アプリケーション プールが存在しない場合は、アプリケーション プールが作成されます。 WDeployAppPool サイトごとに 1 つの専用のアプリケーション プールを作成することをお勧めします。
sitePort サイト バインドのポート。 別のサイトで使用されていない 8080 から 8200 の最初のポート。 リモート トラフィックのポートを開くためにファイアウォール規則が必要になる場合があります。
deploymentUserName サイトへのアクセス権を付与するユーザーの名前。 ユーザーが存在しない場合は、管理者以外のユーザーが作成されます。 WDeploySiteuser
deploymentUserPassword デプロイ ユーザーのパスワード。 パスワードが指定されていない場合、パスワードが自動的に生成され、設定ファイルに保存されます。 [自動生成]
managedRunTimeVersion 指定した場合は、アプリケーション プールの指定したランタイム バージョンの設定を試みます。 一致するランタイム バージョンが見つからない場合は、アプリケーション プールの既定値が使用されます。 アプリケーション プールの既定値 形式 "v2.0" または "v4.0" の例
publishSettingSavePath 設定ファイルが保存される既存のディレクトリ。 現在のユーザーのデスクトップ 既存のディレクトリである必要があります。 指定されたディレクトリが存在しない場合は、エラーになります。
publishSettingFileName 拡張子を含む設定ファイルの名前。 WDeploy.PublishSettings 拡張機能を必ず含めます。 ファイルが既に存在する場合は、そのファイル内のサイト情報が上書きされます。

例:

既存のサイトで既存のユーザーの公開を有効にします (パスワードは設定ファイルに保存されません)。

.\SetupSiteForPublish.ps1 -siteName ExistingSite -deploymentUserName UserA -publishSettingSavePath C:\profiles -publishSettingFileName UserA.PublishSettings

スクリプトの結果を含む PowerShell コンソールのスクリーンショット。

公開設定ファイルのカスタム名と場所を使用して、新しいサイトで新しいユーザーの公開を有効にします。

.\SetupSiteForPublish.ps1 -siteName NewSite -sitePhysicalPath C:\inetpub\NewSiteRoot -siteAppPoolName NewSitePool -sitePort 81 -deploymentUserName NewSiteUser -deploymentUserPassword Passw0rd -publishSettingSavePath C:\profiles -publishSettingFileName NewSite.PublishSettings

発行設定のスクリプトと出力を含む PowerShell コンソールのスクリーンショット。

PublishSettings ファイルには、新しいユーザー パスワードも含まれています。 接続文字列フィールドが空であることに注意してください。このフィールドには手動で入力することも、データベース生成スクリプトを使用してプロファイルに追加することもできます。

<?xml version="1.0" encoding="utf-8"?>
<publishData>
  <publishProfile publishUrl="RWS-2008R2" msdeploySite="NewSite" destinationAppUrl="http://RWS-2008R2:81" mySQLDBConnectionString="" SQLServerDBConnectionString="" profileName="Default Settings" publishMethod="MSDeploy" userName="NewSiteUser" userPWD="Passw0rd" savePWD="True" />
</publishData>

CreateSqlDatabase スクリプトを使用して公開アカウント用の SQL データベースを作成する

スクリプト: CreateSqlDatabase.ps1

説明: データベース、ログイン、データベースに対する db_owner 権限を持つデータベース ユーザーを作成し、対応する接続文字列情報を設定ファイルに保存します。

パラメーター:

名前 Description Default Value メモ
databaseName 作成するデータベースの名前。 wDeploySqldb
databaseUserName データベース ユーザーとログインの名前。 wdeploySqlUser 毎回新しいユーザーを指定するか、ユーザーのログイン パスワードをリセットし、ユーザーの以前の接続資格情報を無効にすることができます。
databaseUserPassword データベース ユーザーとログインのパスワード。 パスワードが指定されていない場合は、自動的に生成されます。 [自動生成] 場合によっては、自動生成されたパスワードに、特定の発行クライアントで問題を引き起こす文字が含まれている場合があります。 スクリプトを使用してデータベースの自動作成を行う場合は、スクリプトを変更することを検討してください。
databaseAdminUser SQL サーバー管理者のユーザー名 (通常は "sa")。 必須
databaseAdminPassword SQL サーバー管理者アカウントのパスワード。 必須
sqlServerInstanceName SQL サーバーの場所。 .\SQLExpress

全般

publishSettingSavePath 設定ファイルが保存される既存のディレクトリ。 現在のユーザーのデスクトップ 既存のディレクトリである必要があります。 指定されたディレクトリが存在しない場合は、エラーになります。
publishSettingFileName 拡張子を含む設定ファイルの名前。 WDeploy.PublishSettings 拡張機能を必ず含めます。 ファイルが既に存在する場合は、そのファイル内のサイト情報が上書きされます。

例:

既定値 (ローカル SQLExpress データベース) を使用して、ユーザーを含むデータベースを作成します。

.\CreateSqlDatabase.ps1

S Q L データベースを作成するためのスクリプトと出力を含む PowerShell コンソールのスクリーンショット。

新しいデータベースを作成し、既存の公開設定ファイル c:\profiles\UserA.PublishSettings に接続文字列情報を追加します。

PS C:\Program Files\IIS\Microsoft Web Deploy V2\Scripts> .\CreateSqlDatabase.ps1 -databaseName UserADb -databaseUserName UserADbUser -databaseUserPassword Passw0rdA -databaseAdminUser sa -databaseAdminPassword Passw0rd -sqlServerInstanceName .\SQLExpress -publishSettingSavePath C:\profiles -publishSettingFileName UserA.PublishSettings

既存の発行設定ファイルに接続されたスクリプトと出力を含む PowerShell コンソールのスクリーンショット。

CreateMySqlDatabase スクリプトを使用して公開アカウント用の MySQL データベースを作成する

スクリプト: CreateMySqlDatabase.ps1

説明: データベースを作成し、データベースに対するすべての権限を持つデータベース ユーザー (localhost) を作成し、接続文字列情報を設定ファイルに保存します。

パラメーター:

名前 Description Default Value メモ
databaseName 作成するデータベースの名前。 WDeployDb
databaseUserName データベース ユーザーの名前。 WDeployUser
databaseUserPassword データベース ユーザーとログインのパスワード。 パスワードが指定されていない場合は、自動的に生成されます。 [自動生成] 場合によっては、自動生成されたパスワードに、特定の発行クライアントで問題を引き起こす文字が含まれている場合があります。 スクリプトを使用してデータベースの自動作成を行う場合は、スクリプトを変更することを検討してください。
databaseAdminUser データベース管理者の名前 (通常は "root")。 必須 指定されていない場合は、このパラメーターの入力を求められます
databaseAdminPassword サーバー管理者アカウントのパスワード。 必須 指定しない場合は、このパラメーターの値の入力を求められます。
serverHostName MySQL サーバーの場所 localhost *表の下の注記を参照してください

全般:

publishSettingSavePath 設定ファイルが保存される既存のディレクトリ。 現在のユーザーのデスクトップ 既存のディレクトリである必要があります。 指定されたディレクトリが存在しない場合は、エラーになります。
publishSettingFileName 拡張子を含む設定ファイルの名前。 WDeploy.PublishSettings 拡張機能を必ず含めます。 ファイルが既に存在する場合は、そのファイル内のサイト情報が上書きされます。

*serverHostName に localhost 値以外を指定し、ユーザーのアクセス許可を変更しない場合、ユーザーは自分のデータベースにアクセスできない可能性があります。 既定では、このスクリプトで付与されたアクセス許可によって、ローカル コンピューターからのデータベース ユーザー アクセスが提供されます。 データベース サーバーが同じコンピューターでホストされていない場合は、PowerShell スクリプトのアクセス許可付与セクションを変更して、次のスクリプト行を変更して任意のコンピューターからのアクセスを許可するなど、より一般的なアクセス許可を付与する必要があります。

既定のスクリプトのアクセス許可行:

$createUserScript = "Grant all privileges on {0}.* to '{1}'@'localhost' identified by '{2}';"

変更されたスクリプトのアクセス許可行:

$createUserScript = "Grant all privileges on {0}.* to '{1}'@'%' identified by '{2}';"

例:

既定値を使用して、ユーザーを含むデータベースを作成します。

.\CreateMySqlDatabase.ps1

データベースを作成するためのスクリプトを含む PowerShell コンソールのスクリーンショット。

新しいデータベースを作成し、既存の公開設定ファイル c:\profiles\UserA.PublishSettings に接続文字列情報を追加します。

.\CreateMySqlDatabase.ps1 -databaseName UserADb -databaseUsername UserADbUser -databaseUserPassword Passw0rd -databaseAdminUser root -databaseAdminPassword iis6!dfu -publishSettingSavePath C:\profiles -publishSettingFileName UserA.PublishSettings

既存の発行設定への接続のスクリプトと出力を含む PowerShell コンソールのスクリーンショット。

AddDelegationRules スクリプトを使用してサーバーの委任規則を設定する

スクリプト: AddDelegationRules.ps1

説明: このスクリプトは、フル インストール中にインストーラーによってセットアップ時に自動的に実行されますが、フル インストールを実行しなかった場合や、ルールをいつでも修復する場合は、この AddDelegationRules スクリプトを再実行できます。

パラメーター:

名前 Description Default Value メモ
elevatedUsername サーバーの applicationHost.config ファイルへの書き込みアクセス権が付与されるユーザー アカウントの名前。 このユーザーは、appPoolPipeline、appPoolNetFx、createApp ルールの実行ユーザーとして使用されます。 WDeployUser ローカル Windows ユーザーのみを作成し、共有構成が有効になっている場合は動作しません。 このユーザー アカウントのパスワードは、スクリプトが 2 回目に実行されるとリセットされます。
elevatedPassword 指定されていない場合は自動的に生成されます。 [自動生成]
adminUsername recycleApp ルールの実行ユーザーとして使用される管理登録ユーザー アカウントの名前。 WDeployAdmin ローカル Windows ユーザーのみを作成し、共有構成が有効になっている場合は動作しません。 このユーザー アカウントのパスワードは、スクリプトが 2 回目に実行されるとリセットされます。
adminPassword 指定されていない場合は自動的に生成されます [自動生成]
ignorePasswordResetErrors スイッチ。 管理者特権または adminUsername が既存のアカウントを参照している場合、このスイッチを使用すると、スクリプトはアカウントのパスワードをリセットできます。 [省略 - ユーザー パスワードのリセットが許可されていません] ユーザー パスワードをリセットすると、ユーザーがデータにアクセスできなくなる可能性があります。 このスイッチは注意して使用してください。 詳細については、https://windows.microsoft.com/windows-vista/What-are-the-risks-of-resetting-a-passwordを参照してください。 また、新しいユーザー パスワードは保存されず、後で取得できないことにも注意してください。