用於自動化 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指示
啟動 PowerShell 命令視窗。
按兩下任務列中的PowerShell圖示,或按兩下 [開始]、輸入PowerShell,然後選取[Windows PowerShell]。
(藍色圖示)請確定您的執行原則允許執行文稿。
輸入 「Get-ExecutionPolicy」。 如果是 [限制] (預設值),您必須輸入 “Set-ExecutionPolicy AllSigned” 來重設為更寬鬆的設定。 AllSigned 設定將允許執行已簽署的腳本,但如果它們不受信任,請提示您
如需執行原則設定的詳細資訊,請參閱 使用 Set-ExecutionPolicy Cmdlet。
變更為 Web Deploy 腳本目錄。
- 輸入
cd '%programfiles%\IIS\Microsoft Web Deploy v2\Scripts'
(但以實際路徑取代%programfiles%
,例如C:\Program Files
)。
- 輸入
使用 SetupSiteForPublish 腳本來建立預設發佈網站(無資料庫)
執行不含自變數的 SetupSiteForPublish.ps1 腳本:
這會執行下列工作:
此腳本會建立非系統管理員發佈的用戶和網站,並將發佈配置檔資訊儲存在桌面上的檔案中。 更具體來說,它會在 建立名為 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
針對新網站上的新使用者啟用發佈,並具有發佈配置檔的自定義名稱和位置:
.\SetupSiteForPublish.ps1 -siteName NewSite -sitePhysicalPath C:\inetpub\NewSiteRoot -siteAppPoolName NewSitePool -sitePort 81 -deploymentUserName NewSiteUser -deploymentUserPassword Passw0rd -publishSettingSavePath C:\profiles -publishSettingFileName NewSite.PublishSettings
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
建立新的資料庫,並將 連接字串 資訊新增至現有的發佈配置檔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
使用 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
建立新的資料庫,並將 連接字串 資訊新增至現有的發佈配置檔c:\profiles\UserA.PublishSettings
:
.\CreateMySqlDatabase.ps1 -databaseName UserADb -databaseUsername UserADbUser -databaseUserPassword Passw0rd -databaseAdminUser root -databaseAdminPassword iis6!dfu -publishSettingSavePath C:\profiles -publishSettingFileName UserA.PublishSettings
使用 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。 另請注意,新的用戶密碼不會儲存,且稍後無法擷取。 |