用於自動化 Web Deploy 設定的 PowerShell 腳本

克莉絲蒂娜·奧爾森

Web Deploy v2.1 版會安裝數個 PowerShell 腳本,讓您輕鬆地設定 IIS 伺服器,讓使用者可以使用 Web Deploy 發佈至它。 此頁面說明如何使用這些腳本來建立預設發佈網站、為新的或現有的網站和使用者啟用發佈、建立發行 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,您可以從這裡取得 PowerShell2 做為更新: https://www.catalog.update.microsoft.com/ScopedViewInline.aspx?updateid=0be83604-db27-4b99-976a-136a92bd579b。 可能需要重新啟動。
    • 必須在 伺服器管理員 中啟用網頁伺服器 (IIS) 角色。
    • IIS 的 Web 管理服務角色服務 (“Management Service”) 必須在 伺服器管理員 中啟用
    • 若要使用 PowerShell 資料庫腳本,伺服器必須能夠存取 SQL 或 MySQL 資料庫。 SQL Server 管理物件也必須針對 SQL 安裝。
    • Web Deploy 必須與 Management Service Integration 元件一起安裝。 (若要讓此選項出現在 Web Deploy 安裝程式中,必須先啟用 Web 管理服務。

一般PowerShell指示

  1. 啟動 PowerShell 命令視窗。

    按兩下任務列中的PowerShell圖示,或按兩下 [開始]、輸入PowerShell,然後選取[Windows PowerShell]。
    顯示 [開始] 按鈕的 Windows 任務欄螢幕快照。
    (藍色圖示)

  2. 請確定您的執行原則允許執行文稿。

    1. 輸入 「Get-ExecutionPolicy」。 如果是 [限制] (預設值),您必須輸入 “Set-ExecutionPolicy AllSigned” 來重設為更寬鬆的設定。 AllSigned 設定將允許執行已簽署的腳本,但如果它們不受信任,請提示您

    2. 如需執行原則設定的詳細資訊,請參閱 使用 Set-ExecutionPolicy Cmdlet

  3. 變更為 Web Deploy 腳本目錄。

    1. 輸入 cd '%programfiles%\IIS\Microsoft Web Deploy v2\Scripts' (但以實際路徑取代 %programfiles% ,例如 C:\Program Files)。

使用 SetupSiteForPublish 腳本來建立預設發佈網站(無資料庫)

執行不含自變數的 SetupSiteForPublish.ps1 腳本:

Powershell 控制台的螢幕快照,其中包含輸出。

這會執行下列工作:

此腳本會建立非系統管理員發佈的用戶和網站,並將發佈配置檔資訊儲存在桌面上的檔案中。 更具體來說,它會在 建立名為 WDeploySite 的網站,其實體網站根目錄位於 %systemdrive%\inetpub\WDeploySite。 月臺會有相符的應用程式集區 WDeployAppPool,且預設會指派給埠 8080(如果另一個網站使用 8080,則為下一個可用的埠)。 此腳本也會建立名為 WDeploySiteuser 的非系統管理員本機 Windows 使用者,並在 WDeploySite 資料夾和 IIS 管理員許可權上授與該使用者完全控制 ACL 給網站。 設定資訊會儲存到名為 WDeploy.Publish 的檔案中 設定 - WebMatrix 可能會取用此檔案(或可能為 Visual Studio)發佈至網站。 此配置檔目前不包含任何資料庫發佈資訊。

使用 SetupSiteForPublish 腳本為任何網站和用戶啟用 Web Deploy Publishing:

腳本:SetupSiteForPublish.ps1

描述:針對指定的網站和用戶帳戶,可讓指定的用戶發佈至指定的網站。 腳本會建立用戶帳戶、網站和應用程式集區;設定網站的目錄 ACL 和 IIS 管理員許可權;和會將設定資訊儲存在檔案中。

參數:

名稱 描述: 預設值 備註
siteName 網站的名稱。 如果網站不存在,則會建立它。 WDeploySite
sitePhysicalPath 網站內容的實體檔案位置。 如果目錄不存在,則會建立它。 %systemdrive%\inetpub\WDeploySite
siteAppPoolName 將與網站相關聯的應用程式集區名稱。 如果應用程式集區不存在,將會建立它。 WDeployAppPool 建議將每個月臺一個應用程式集區奉獻一個。
sitePort 月臺系結的埠。 其他網站未使用的第一個埠 8080-8200。 可能需要防火牆規則才能開啟遠端流量的埠。
deploymentUserName 要授與網站存取權的用戶名稱。 如果使用者不存在,將會建立非系統管理員使用者。 WDeploySiteuser
deploymentUserPassword 部署用戶的密碼。 如果未指定密碼,系統會自動產生密碼並儲存在配置檔中。 [自動產生]
managedRunTimeVersion 如果指定,將會嘗試為應用程式集區設定指定的運行時間版本。 如果找不到相符的運行時間版本,則會使用應用程式集區預設值。 應用程式集區預設值 範例格式 “v2.0” 或 “v4.0”
publishSettingSavePath 將儲存設定檔的現有目錄。 目前使用者的桌面 必須是現有的目錄。 如果指定的目錄不存在,將會產生錯誤。
publishSettingFileName 配置檔的名稱,包括擴展名。 WDeploy.Publish 設定 請記得包含延伸模組。 如果檔案已經存在,則會覆寫其中的網站資訊。

範例:

在現有網站上啟用現有使用者的發佈功能(密碼將不會儲存在設定檔中):

.\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 控制台的螢幕快照,其中包含發佈設定的腳本和輸出。

Publish 設定 檔案也包含新的用戶密碼。 請注意,連接字串 欄位是空的-這些欄位可以手動填入,或者您可以使用資料庫產生腳本將此欄位新增至設定檔:

<?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
databaseUserName 資料庫使用者和登入的名稱。 wdeploySqlUser 每次指定新的使用者,或您最終可能會重設使用者的登入密碼,並使用戶先前的連線認證失效。
databaseUserPassword 資料庫使用者和登入的密碼。 如果未指定任何密碼,系統會自動產生一個密碼。 [自動產生] 在某些情況下,自動產生的密碼可能包含會導致某些發佈用戶端發生問題的字元。 如果您使用腳本來建立自動化資料庫,請考慮修改腳本。
database 管理員 User SQL Server 系統管理員用戶名稱(通常是 “sa” )。 REQUIRED
database 管理員 Password SQL Server 系統管理員帳戶的密碼。 REQUIRED
sqlServerInstanceName SQL 伺服器的位置。 .\SQLExpress

一般

publishSettingSavePath 將儲存設定檔的現有目錄。 目前使用者的桌面 必須是現有的目錄。 如果指定的目錄不存在,將會產生錯誤。
publishSettingFileName 配置檔的名稱,包括擴展名。 WDeploy.Publish 設定 請記得包含延伸模組。 如果檔案已經存在,則會覆寫其中的網站資訊。

範例:

使用預設值建立具有使用者資料庫(本機 SQLExpress 資料庫):

.\CreateSqlDatabase.ps1

Powershell 控制台的螢幕快照,其中包含用於建立 S Q L 資料庫的腳本和輸出。

建立新的資料庫,並將 連接字串 資訊新增至現有的發佈配置檔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
databaseUserName 資料庫用戶的名稱。 WDeployUser
databaseUserPassword 資料庫使用者和登入的密碼。 如果未指定任何密碼,系統會自動產生一個密碼。 [自動產生] 在某些情況下,自動產生的密碼可能包含會導致某些發佈用戶端發生問題的字元。 如果您使用腳本來建立自動化資料庫,請考慮修改腳本。
database 管理員 User 資料庫管理員的名稱,通常是“root”。 REQUIRED 如果未提供此參數,系統會提示您輸入此參數
database 管理員 Password 伺服器管理員帳戶的密碼。 REQUIRED 如果您沒有提供此值,系統會提示您輸入此參數的值。
serverHostName MySQL 伺服器的位置 localhost *請參閱下表的附註

一般:

publishSettingSavePath 將儲存設定檔的現有目錄。 目前使用者的桌面 必須是現有的目錄。 如果指定的目錄不存在,將會產生錯誤。
publishSettingFileName 配置檔的名稱,包括擴展名。 WDeploy.Publish 設定 請記得包含延伸模組。 如果檔案已經存在,則會覆寫其中的網站資訊。

*如果您為 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 腳本。

參數:

名稱 描述: 預設值 備註
elevatedUsername 將授與伺服器應用程式Host.config 檔案寫入許可權的用戶帳戶名稱。 此使用者將作為 appPoolPipeline、appPoolNetFx 和 createApp 規則上的執行身分使用者。 WDeployUser 只建立本機 Windows 使用者,如果啟用共用設定,將無法運作。 如果腳本第二次執行,將會重設此用戶帳戶的密碼。
elevatedPassword 如果未指定,則自動產生。 [自動產生]
adminUsername 管理員 istrator 使用者帳戶的名稱,該用戶帳戶將作為回收應用程式規則上的執行身分使用者。 WDeploy 管理員 只建立本機 Windows 使用者,如果啟用共用設定,將無法運作。 如果腳本第二次執行,此用戶帳戶的密碼將會重設。
adminPassword 如果未指定,則自動產生 [自動產生]
ignorePasswordResetErrors 交換器。 如果提高許可權/adminUsername 參考現有的帳戶,此參數可讓腳本重設帳戶的密碼。 [省略 - 不允許重設使用者密碼] 重設用戶密碼可能會導致使用者失去數據的存取權。 這個參數應該謹慎使用。 如需詳細資訊,請參閱https://windows.microsoft.com/windows-vista/What-are-the-risks-of-resetting-a-password。 另請注意,新的用戶密碼不會儲存,且稍後無法擷取。