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

クリスティナ・オルソン

Web 配置の v2.1 リリースでは、ユーザーが Web 配置を使用して IIS サーバーに発行できるように、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. PowerShell コマンド ウィンドウを起動します。

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

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

    1. 「Get-ExecutionPolicy」と入力します。 Restricted (既定値) の場合は、「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 フォルダーと IIS マネージャーのアクセス許可をサイトに対するフル コントロール ACL に付与します。 設定情報は WDeploy.PublishSettings という名前のファイルにデスクトップに保存されます。このファイルは、WebMatrix (または Visual Studio) によってサイトに発行するために使用される可能性があります。 このプロファイルには、現時点ではデータベース発行情報は含まれません。

SetupSiteForPublish スクリプトを使用して、特定のサイトおよびユーザーに対して Web デプロイ発行を有効にします。

スクリプト: SetupSiteForPublish.ps1

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

パラメーター:

名前 説明 デフォルト値 メモ
サイト名 サイトの名前。 サイトが存在しない場合は作成されます。 WDeploySite
サイトフィジカルパス (sitePhysicalPath) サイト コンテンツの物理的なファイルの場所。 ディレクトリが存在しない場合は作成されます。 %systemdrive%\inetpub\WDeploySite
siteAppPoolName サイトに関連付けられるアプリケーション プールの名前。 アプリケーション プールが存在しない場合は、作成されます。 WDeployAppPool サイトごとに 1 つのアプリケーション プール専用にすることをお勧めします。
サイトポート サイトバインディングのポート。 別のサイトで使用されていない 8080 から 8200 の最初のポート。 リモート トラフィックのポートを開くには、ファイアウォール規則が必要な場合があります。
デプロイメントユーザー名 サイトへのアクセス権を付与するユーザーの名前。 ユーザーが存在しない場合は、管理者以外のユーザーが作成されます。 WDeploySiteuser
デプロイメントユーザーパスワード デプロイ ユーザーのパスワード。 パスワードが指定されていない場合、パスワードが自動的に生成され、設定ファイルに保存されます。 [自動生成]
managedRunTimeVersion 指定した場合は、アプリケーション プールの指定したランタイム バージョンの設定を試みます。 一致するランタイム バージョンが見つからない場合は、アプリケーション プールの既定値が使用されます。 アプリケーション プールの既定値 形式 "v2.0" または "v4.0" の例
公開設定保存パス 設定ファイルが保存される既存のディレクトリ。 現在のユーザーのデスクトップ 既存のディレクトリである必要があります。 指定されたディレクトリが存在しない場合は、エラーが発生します。
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アクセス許可を持つデータベース ユーザーを作成し、対応する接続文字列情報を設定ファイルに保存します。

パラメーター:

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

全般

公開設定保存パス 設定ファイルが保存される既存のディレクトリ。 現在のユーザーのデスクトップ 既存のディレクトリである必要があります。 指定されたディレクトリが存在しない場合は、エラーが発生します。
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) を作成し、接続文字列情報を設定ファイルに保存します。

パラメーター:

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

全般:

公開設定保存パス 設定ファイルが保存される既存のディレクトリ。 現在のユーザーのデスクトップ 既存のディレクトリである必要があります。 指定されたディレクトリが存在しない場合は、エラーが発生します。
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 スクリプトを再実行できます。

パラメーター:

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