Web Deploy PowerShell Cmdlet
Web Deploy V3.0 隨附 PowerShell Cmdlet,以執行 Web Deploy API [Microsoft.Web.Deployment] 所支援的大部分工作。 您可以在這裡深入瞭解此 API。 這些 Cmdlet 位於名為 WDeploySnapin3.0 的嵌入式管理單元中,其會在一般或更新版本的 Web 部署安裝上安裝並註冊為嵌入式管理單元。 若要使用這些 Cmdlet,請在每次啟動 PowerShell 控制台時新增嵌入式管理單元,或將嵌入式管理單元新增至 PowerShell 配置檔,讓所有控制台自動載入式管理單元。
若要在載入 PowerShell 控制台時新增,請在主控台視窗中執行下列命令:
Add-PSSnapin WDeploySnapin3.0
若要將它新增至 PowerShell 設定檔:
- 如果您已經有PowerShell配置檔,請移至步驟4。
- 在 [我的檔>] 底下<建立 WindowsPowerShell 資料夾。
- 建立名為 Microsoft.PowerShell_profile.ps1 的檔案
- 將這一行新增至 PowerShell 配置檔檔:'Add-PSSnapin WDeploySnapin3.0'
要注意的幾點:
- PowerShell 控制台在 64 位系統上以 64 位執行,並在 .Net 2.0 中執行,直到 Windows8 為止。 如果您遇到其中一個或兩者的問題,請參閱解決方案的疑難解答一節。
- 所有建立 Web Deploy 套件的 Cmdlet 都會建立最常見工作的參數,以及取用它接受參數值的 Cmdlet。
- 只有一個移除 Cmdlet 可用來刪除其下方的網站或應用程式。
- Web Deploy 具有參數,但它們與 PowerShell Cmdlet 參數是正交的。 本文件中參考參數時,表示 Cmdlet 參數。 Web Deploy 參數已特別稱為 Web Deploy 參數。
I. 發佈 設定 檔案
以下提供的所有 Cmdlet 都能夠針對遠端成品執行,例如遠端伺服器或遠端資料庫。 這些要求不只是認證。 例如,您需要遠端伺服器名稱、遠端資料庫 連接字串、是否要允許發行至具有測試證書的伺服器等等。為了方便使用,將認證資訊從伺服器管理員傳送到取用者等。新的檔類型已產生哪些檔案會將這些設定分組在一起。 此檔案稱為以 .publishsettings 結尾的發行配置檔。 這是由 Visual Studio 用於發布,以及由 WebMatrix 使用。
若要能夠建立這類檔案以供其他 Cmdlet 取用,並編輯它 New-WDPublish 設定 Cmdlet。 如果未指定檔名,則會在文件目錄中 <建立名為 new guid.publishsettings> 的新檔案。 建立檔案時會顯示此路徑。 如果指定了檔名,而且檔案不存在,則會如上述路徑所指定的資料夾中所述建立,但檔案的路徑必須有效。 如果檔案只存在您在執行命令時所指定的屬性值,除了檔案中的屬性未知且將會移除
範例:此範例會取得認證物件,然後將它連同其他參數一起傳遞至新的發佈配置檔 Cmdlet
$cred = Get-Credential
New-WDPublishSettings -ComputerName owais-1 -Site Site1 -Credentials $cred -AllowUntrusted -SiteUrl "https://www.mywebsite.com" -FileName C:\pprofiles\mywebsite.publishsettings -AgentType wmsvc
Get-WDPublishSettings cmdlet allows to load values from a publish setting file into PublishSettings object.
$publishsettings=Get-WDPublishSettings C:\pprofiles\mywebsite.publishsettings
II. Backup
所有備份 Cmdlet 都有一個位置參數(除了backup-wdserver之外的第二個位置參數,也就是第一個位置參數)稱為輸出。 這會採用您要建立備份的資料夾路徑。 備份一律是 Web Deploy zip 套件。 您可以在套件提供者深入瞭解 Web Deploy 套件。 如果未指定路徑,則會在使用者文件資料夾下的名為 'Web Deploy Backups' 的資料夾中建立備份。 備份會命名為 machinename_nameofproviderused_[Siteorapporfoldername(Optional)]_timestamp.zip。
除非遠端伺服器資訊是傳入 SourcePublish 設定 參數的發行配置檔,否則所有這些 Cmdlet 預設都會在本機運作。
A. IIS
所有 IIS Cmdlet 都會針對已安裝的 IIS 版本 7 或更新版本運作
1.伺服器
Backup-WDServer
描述:這沒有任何自變數會備份執行此命令的目前伺服器。 它會針對這項作業使用已知的 Web 伺服器提供者。 因此,建立的套件包含 Webserver 套件中包含的所有成品。 您可以在這裡深入瞭解此提供者。
Cmdlet 參數:ConfigOnly 參數可讓您排除所有內容,而 SkipFileList 和 SkipFolderList 參數可讓您選擇性地從套件中排除一或多個檔案或資料夾。
範例:
這會備份網頁伺服器的所有內容,但內容除外:
Backup-WDServer -SourcePublishSettings c:\profiles\myserver.publishsettings -ConfigOnly
建立應該略過的檔案清單。 這是標準正則表達式。
$list = @('\\site2\\iisstart.htm','\\site2\\welcome.png')
Backup-WDServer –SkipFileList $list
您也可以將清單變更為 $list=@('\site2\') 以略過 site2 下的所有檔案
2. 網站
Backup-WDSite
描述:這會使用apphostconfig提供者備份 IIS 網站及其設定和內容。 您可以在這裡深入瞭解此提供者。
Cmdlet 參數:會備份月台參數或發佈配置檔所指定的網站名稱。 站台參數值會覆寫網站名稱的發佈設定規格。
ConfigOnly 可用來建立沒有內容的備份。 如果網站使用非預設應用程式集區,則此套件在可能沒有相同應用程式集區的其他伺服器上運作,請使用 switch 參數 includeAppPool。 這會將應用程式集區組合到套件中。
自動產生的 Web Deploy 參數:會建立兩種類型的參數:
- 參數,可讓用戶變更將套用月臺備份的月臺名稱。
- 另一個參數可讓使用者變更網站和該網站下每個 Web 應用程式的實體路徑。
因此,如果我有一個網站,其下方有三個應用程式,我會分開取得 4 個實體路徑參數,以及一個網站名稱參數。
範例:
Backup-WDSite "Default Web Site" -ConfigOnly
Backup-WDSite MySite –IncludeAppPool
Backup-WDSite MySite -SkipFileList $list
3. Web 應用程式
Backup-WDApp
描述:這會使用 iisApp 提供者來備份 Web 應用程式。 在這裡深入瞭解此提供者。 以下是一篇很好的 文章 ,說明 Web 應用程式是什麼,以及網站、應用程式和 IIS 中的虛擬目錄之間的差異。
Cmdlet 參數:備份應用程式參數或發佈配置檔所指定的應用程式名稱。 如果沒有指定它們,則會擲回錯誤。 應用程式參數值會覆寫網站名稱的發佈設定規格。 SkipFileList 和 SkipFolderList 參數可讓您選擇性地從套件中排除一或多個檔案或資料夾。
自動產生的 Web Deploy 參數:建立用來在還原或安裝期間變更應用程式或網站名稱的參數。
$list = @('\\iisstart\.htm')
Backup-WDApp "Default web site/app" -SkipFileList $list
B. Database
1. MSSql
Backup-WDSqlDatabase
描述:這會使用 dbfullsql 提供者來備份 Microsoft SQL Server 資料庫。 此提供者會使用 SMO 來編寫資料庫的腳本,並公開超過 100 個提供者設定,以控制資料庫編寫腳本的方式。 這裡將詳細說明這一點。
Cmdlet 參數:會備份發行配置檔中 Database 參數或 SQLServerDB 所指定的 連接字串 連線 ionString。 資料庫參數值會覆寫 SQLServerDB 的發行設定規格 連線 ionString。 這個 dbfullsql 提供者公開的提供者設定可以使用 Source 設定 參數傳遞。 其中一個非常常用的設定是 scriptdropsfirst,如果物件存在卸除物件腳本,則腳本會是腳本。 SMO 腳本選項的另一個提供者設定是將 scriptdata 設定為 false,以便只擷取架構。
自動產生的 Web Deploy 參數:會在還原或安裝期間建立參數來變更資料庫 連接字串
範例:
New-WDPublishSettings -ComputerName serverName -MSSqlConnectionString "Data Source=localhost;Initial Catalog=MyDb;User id=MyDbUser;Password=MyPassword" -FileName d:\SQLdb.PublishSettings -Credential serverName\Administrator
Backup-WDSQLDatabase -SourcePublishSettings D:\SQLdb.PublishSettings
Backup-WDSQLDatabase -Database "Data Source=localhost;Initial Catalog=MyDb;User id=MyDBUser;Password=MyPassword" -SourceSettings @{ copyAllUsers='false'; scriptDropsFirst='true'; }
2. MySql
Backup-WDMySQLDatabase
描述:這會使用 dbmysql 提供者來備份 MySql Server 資料庫。 此提供者會使用 mysqldump 來編寫資料庫的腳本。 這裡將詳細說明這一點。
Cmdlet 參數:會備份發行配置檔中 Database 參數或 mySQLDB 所指定的 連接字串 連線 ionString。 資料庫參數值會覆寫 mySQLDB 的發行設定規格 連線 ionString。 提供者設定可以使用Source 設定參數傳遞。 常用的設定包括Data和 includeSchema。 根據預設,這些設定為 true。
自動產生的 Web Deploy 參數:會在還原或安裝期間建立參數來變更資料庫 連接字串
New-WDPublishSettings -ComputerName serverName -MySqlConnectionString "Data Source=localhost;database=MyDb;Uid=MyDbUser;pwd=MyPassword" -FileName d:\MySQLdb.PublishSettings -Credential serverName\Administrator
Backup-WDMySQLDatabase -Database 'Server=localhost;Database=MyDb;Uid=MyDbUser;pwd=MyPassword’
Backup-WDMySqlDatabase –SourcePublishSettings d:\mysqldb.publishsettings
III. 還原
所有還原 Cmdlet 都會採用 Web Deploy 套件來還原為第一個位置參數。
WebDeploy 支援封裝的參數化概念,可讓您在還原期間變更幾個層面(而不修改套件)。 例如,在還原期間,您可以選擇指定資料庫 連接字串 的值,這與使用 WebDeploy 參數的封裝內部不同(您必須 連接字串 套件中的參數。
根據套件的建置方式,Web Deploy 套件可能會有一或多個 參數。 這些還原 Cmdlet 會檢查套件,並將動態 PowerShell 參數新增至集合。 因此,如果套件具有名為 「Parameter1」 的 Web Deploy 參數,您就會找到名稱為 “Parameter1” 的 PowerShell 參數。 不過,動態參數在PowerShell中有自己的問題,只有在套件的名稱或檔案路徑中沒有空格時,才能運作。
或者,所有這些還原 Cmdlet 也有「參數」參數,可讓您在還原期間手動指定新的參數值。 這個 「參數」參數會針對 Web Deploy 參數的名稱值組,採用 PowerShell Dictionary 物件。
若要瞭解任何 Web Deploy 套件中定義的 Web Deploy 參數,您可以直接在 Windows 檔案總管中開啟 zip 檔案,並檢查套件根目錄中存在的parameters.xml檔案。 沒有任何預設值或值的任何 Web Deploy 參數都需要指定值。 在 xml 檔案中新增所有這些參數,並將它當做 ParameterValuesFile 參數的值傳入。 您可以依照這裡或手動方式產生此檔案。 格式為
<parameters>
<setParameter name="name1" value="value1" />
<setParameter name="name2" value="value2" />
</parameters>
Get-WDParameters Cmdlet 可以讀取此檔案,並將其轉換成 WebDeploy 參數物件 (dictionary),所有還原 Cmdlet 都接受此物件。
如果還原任何封裝而不指定 內參數的值,則預設行為會覆寫原本建立封裝的資源。 例如,如果我使用backup-wdsite site1 從site1建立套件,則當我使用 restore Cmdlet 還原此套件時,而不需為此套件中的參數提供任何值,site1 將會以任何套件包含、內容及設定的方式覆寫。所有還原 Cmdlet 也是如此。
除了指定目的地發佈配置檔時,所有這些 Cmdlet 都會在本機還原,在此情況下,會透過 Web Management Service (WMSvc) 或 Web 部署代理程式服務對遠端伺服器執行相同的確切作業。
A. IIS
1.伺服器
Restore-WDServer
描述:還原網頁伺服器套件。 常見的用法是先備份伺服器再進行變更,如果發生失敗,可以藉由套用在進行變更之前建立的 Web Deploy 備份套件來還原伺服器。
$folderList = @(‘\\app_data’)
Restore-WDServer D:\OWAIS-1_WebServer_20120419121214.zip -DestinationPublishSettings c:\destinationServer.publishSettings –SkipFolderList $folderList
2. 網站
Restore-WDSite
描述:還原 IIS 網站套件。 如果套件有兩個名為 「Site Physical Path」 和 「Site Name」 的參數,則會公開為 SitePhysicalPath 和 SiteName 動態 powershell 參數。 此命令會建立具有實體路徑 c:\site1
的新月臺 site1。 如果未針對這些參數指定任何值,還原將會套用至相同的網站和內容,並覆寫您在網站中可能所做的任何變更。
參數:您可能想要使用 skipfolderlist 和 skipfilelist 來排除某些資料夾和/或檔案,使其無法複製到網站內容中。
Restore-WDSite C:\defaultsite.zip -SitePhysicalPath c:\site1 -SiteName site1
Restore-WDSite -Package 'D:\Users\Administrator\Documents\Web Deploy Backups\IIS-Server_AppHostConfig_Default Web Site_20120417100827.zip' -skipFolderList @('App_Data') -verbose
3. 應用程式
Restore-WDApp
描述:這會還原 Web 應用程式。 Backup-WDApp 會使用一個參數建立套件,以在安裝時變更應用程式的名稱。 這可用來在還原期間將應用程式還原至不同的應用程式。 部署至月臺下的應用程式時,月台必須存在。 應用程式將會由此套件建立,但不會建立網站。
範例:
Restore-WDApp C:\myappbackup.zip -ApplicationPathParam1 "Default web site\app1"
B. Database
Restore-WDDatabase
描述:如果資料庫不存在,這會建立名為 customers 的新資料庫(只要目前使用者具有此作業的許可權),並在該資料庫上執行腳本。 如果這是在沒有動態 Web Deploy 參數的任何值的情況下執行,則會覆寫建立此套件的原始資料庫。 請注意,如果在建立封裝時未使用 scriptDropsFirst 設定,則套用至與現有內容衝突的資料庫將會失敗。 此 Cmdlet 可用來還原 MSSql 或 MySQL 備份。 您只能使用 Backup-WDSQLDatabase 和 My SQL Database 建立的備份還原 MS SQL 資料庫,以及使用 Backup-WDMySqlDatabase 建立的備份。
範例:
Backup-WDSqlDatabase "server=.\sqlexpress;integrated security=SSPI;database=customers" "C:\dbbackup.zip"
Restore-WDDatabase c:\dbbackup.zip –DatabaseConnectionStringParam1 "server=.\sqlexpress;integrated security=SSPI;database=customers_copy"
Backup-WDMySqlDatabase "server=localhost;uid=someuser;pwd=somepwd;database=coolDb" "C:\dbbackup.zip"
Restore-WDDatabase c:\dbbackup.zip –DatabaseConnectionStringParam1 "server=localhost;uid=someuser;pwd=somepwd;database=coolDb_copy"
C. 泛型套件
Restore-WDPackage
描述:此 Cmdlet 可用來套用任何 Web Deploy 套件。 有數種方式可以建立或取得 Web Deploy 套件,例如下載 開放原始碼 應用連結庫套件、在 Visual Studio 中建立套件、使用msdeploy.exe命令行工具(詳細資訊),或使用檔稍早記的 Backup-WD* Cmdlet。 例如,若要在 IIS Server 預設網站上安裝 wordpress,做為名為 wordpress 的應用程式,請將 wordpress 套件從 應用連結庫 下載到名為 packages 的資料夾。 wordpress 套件參數的所有預設值都會如往般運作,但只需要指定兩個必要參數的值:admin 和非 admin mysql 密碼。
參數:
Restore-WDPackage c:\Packages\wordpress.zip -DBAdminPassword mysecretserverpassword –DBPassword mysqllocalpassword
IV. 移除
Remove-WDSite -Site NonWorkingSite
此命令將會刪除 applicationHost.config 中名為 nonworkingsite 定義的網站,以及網站的目錄內容
V. 取得及設定應用程式集區架構
這些 Cmdlet 可讓您讀取和變更 apppool .net Framework 版本。
Get-WDAppPoolFx "default web site"
managedRuntimeVersion
---------------------
v2.0
Set-WDAppPoolFx "default web site" -AppPoolFrameworkVersion v4.0
Get-WDAppPoolFx "default web site"
managedRuntimeVersion
---------------------
v4.0
VI. 設定 WDACL
此 Cmdlet 可用來在網站的內容上設定 acls。 例如,假設我有一個網站、site1,而且我嘗試提供使用者 u1 讀取許可權。
首先,我檢查目前的許可權。
$ret = Get-Acl C:\site1
$ret.Access
I don’t see u1 in the list. Let me give the user u1 access as follows
Set-WDAcl "site1" -SetAclUser u1
Check whether this worked
$ret = Get-Acl C:\site1
$ret.Access
I see that u1 has been given read access as below. [I have not pasted the other permissions on this folder. Just the u1 part]
FileSystemRights : Read, Synchronize
AccessControlType : Allow
IdentityReference : MOSHAIKH1\u1
IsInherited : False
InheritanceFlags : ContainerInherit, ObjectInherit
PropagationFlags : None
七。 Invoke
您可以使用 destinationpublishsettings 在遠端系統上叫用命令或腳本,並即時查看遠端執行的結果。 您必須是遠端系統上的系統管理員,才能從遠端執行 runcommand 提供者。 您可以在這裡深入瞭解此提供者。 MWD Api 等候指定文稿或命令完成的預設最大時間為 5 秒。 如果您想要增加這次執行時間,您可以為 waitInterval 和 waitAttempts 指定較高的值,如下列範例所示。
A. 指令碼
Invoke-WDScript C:\my.cmd –Verbose
這會執行文稿,如果您以詳細資訊執行命令,您將能夠看到命令的輸出。
B. Command
$settings = @ { waitInterval = 3000; waitAttempts = 25;}
Invoke-WDCommand "dir c:\mydirectory /s/b" -DestinationSettings $settings
這會執行 命令,而且不會顯示任何輸出,因為未指定詳細資訊。 不過,這會在每次逾時之間等候 3 秒,而且會執行 25 次等候的反覆專案。 畢竟,進程執行最多會持續 75 秒。
八。 Sync
這些 Cmdlet 會取得來源和目的地,並在兩者之間進行同步處理。 永遠不會修改來源。 我之所以使用來源而非用戶端一詞,是因為客戶端和伺服器在同步處理中非常令人困惑。 您可以將本地伺服器與遠端伺服器同步處理。 在此情況下,遠端伺服器是來源,而本地伺服器是目的地。 或者,您可以在機器 1 和同步處理電腦 2 和 3 上執行 PowerShell Cmdlet。 若要使用遠端來源和/或目的地,您必須提供發行配置檔,您可以使用本檔中提及的第一個 Cmdlet 來建立。所有同步 Cmdlet 也都支援 source 設定 和 destination 設定 參數,以便選擇性地設定來源或目的地的提供者設定。
A. IIS
1.伺服器
我想要同步處理兩部 IIS 7.5 伺服器:Owais-1 和 Owais-2。 我會先為每個建立一個 publishsettings 檔案,然後同步處理伺服器。 因為我沒有指定我的認證,如果我是這兩個系統上的系統管理員,這將會成功。
New-WDPublishSettings -ComputerName owais-1 -AgentType MSDepSvc -FileName c:\owais1.publishsettings
Publish settings file created at: 'c:\owais1.publishsettings'.
New-WDPublishSettings -ComputerName owais-2 -AgentType MSDepSvc -FileName c:\owais2.publishsettings
Publish settings file created at: 'c:\owais2.publishsettings'.
Sync-WDServer -SourcePublishSettings c:\owais1.publishSettings -DestinationPublishSettings c:\owais2.publishSettings
2. 網站
在下列命令中,如果site2不存在,則會建立site2,而且我也已變更實體路徑(因此內容會複製到新資料夾 c:\site2
),以及網站的系結。
Sync-WDSite site1 Site2 -SitePhysicalPath c:\site2 -SiteBinding "*:8078:" -IncludeAppPool
3. 應用程式
我有一個在默認網站下執行的應用程式。 我想在 Site1 下行動這個。 下列命令會執行此動作。
Sync-WDApp "Default Web Site/drupal" "site1/drupal"
現在,我已經測試了新的 Drupal 應用程式可運作,我會刪除預設網站下的原始 Drupal 應用程式。
Remove-WDSite "Default Web Site/drupal"
B. Database
先前的 Cmdlet 示範如何使用 Web Deploy 套件來備份和還原資料庫,不過您也可以使用 Sync-WDSQLDatabase 和 Sync-WDMySQLDatabase Cmdlet,將資料庫同步至.sql腳本或直接同步至另一個資料庫實例。
1. MSSql
Sync-WDSQLDatabase "server=.\sqlexpress;uid=sa;pwd=********;database=umbracodb" "server=.\sqlexpress;uid=sa;pwd=************;database=sometestdb"
這會建立名為 sometestdb 的新資料庫(如果尚未存在),並同步架構和數據。
Sync-"server=.\sqlexpress;uid=sa;pwd=********;database=umbracodb" c:\umbraco.sql
這會將 umbracodb 資料庫腳本化為上述路徑的 umbraco.sql。
2. MySql
Sync-WDMySQLDatabase "server=localhost;uid=root;pwd=********;database=wordpress265" "server=localhost;uid=root;pwd=************;database=wordpress265_new"
這會建立名為 wordpress265_new 的新資料庫(如果尚未存在),並同步架構和數據。
Sync-WDMySQLDatabase "server=localhost;uid=root;pwd=***************;database=wordpress265" c:\wordpress.sql
這會將 wordpress265 資料庫腳本化為上述路徑的 wordpress.sql。
C. 其他所有項目
針對上述其他 Cmdlet 未涵蓋的一般用途同步處理,您可以使用 Sync-WDManifest Cmdlet。 這是MWD API 支援的一般指令清單提供者同步處理。 您可以在 此處閱讀相關資訊。 指令清單是 xml 檔案中的提供者、提供者路徑和提供者設定的集合。 結構是 xml 檔案的根節點會被視為提供者的名稱,以供目前同步處理之用。因此,它不能是此處清單中所指定之任何已知提供者的名稱。 然後,它可以有子節點,其項目名稱符合您想要包含在同步處理中的提供者。path 屬性代表該提供者的路徑,而且這是必要的。 然後,針對您想要針對目前同步作業運用的每個提供者設定,新增屬性值組。
此 Cmdlet 需要兩個指令清單:一個用於來源,另一個用於目的地。 指令清單一律會以指定的順序執行。 如果提供者支援與 IIS 網站搭配運作的 apphostconfig 提供者等認可作業,除非同步處理完成,否則不會呼叫認可。 因此,如果您有一個提供者,預期網站存在於建立網站的提供者之後,則這會失敗,因為網站尚未認可。 在下列範例中,我將同步處理應用程式,並在指令清單中包含應用程式所使用的資料庫。
來源指令清單:
<demoManifest>
<iisApp path="Site1" />
<dbfullsql path="server=.\sqlexpress;integrated security=SSPI;database=customers" />
</demoManifest>
目的地指令清單:
<demoManifest> <iisApp path="Site2" /> <dbfullsql path="server=.\sqlexpress;integrated security=SSPI;database=customers_demo_cpy" /></demoManifest>Sync-WDManifest C:\sourceManifest.xml C:\destManifest.xmlWARNING: Cannot connect to the database 'customers_demo_cpy'.Retrying operation 'Add' on object dbFullSql (server=.\sqlexpress;uid=sa;database=customers_demo_cpy). Attempt 1 of 5.Manifest : C:\sourceManifest.xmlManifest-Dest : C:\destManifest.xmlTimeTaken : 0:10Errors : 0Warnings : 0BytesCopied : 0ObjectsDeleted : 0ObjectsUpdated : 0ObjectsAdded : 3TotalChanges : 3ParameterChanges : 0