通过


用于自动执行 Web 部署设置的 PowerShell 脚本

作者 :克里斯蒂娜·奥尔森

Web 部署的 v2.1 版本安装了多个 PowerShell 脚本,使得用户能够轻松地配置 IIS 服务器,并通过 Web 部署发布到服务器。 本页介绍如何使用这些脚本创建默认发布网站、为新的或现有网站和用户启用发布、创建发布 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 可能需要重启。
    • 必须在服务器管理器中启用 Web 服务器(IIS)角色。
    • 必须在服务器管理器中启用 IIS(“管理服务”)的 Web 管理服务角色服务
    • 若要使用 PowerShell 数据库脚本,服务器必须有权访问 SQL 或 MySQL 数据库。 还必须为 SQL 安装 SQL Server 管理对象。
    • 必须使用管理服务集成组件安装 Web 部署。 (若要在 Web 部署安装程序中显示此选项,必须先启用 Web 管理服务。

常规 PowerShell 说明

  1. 启动 PowerShell 命令窗口。

    单击任务栏中的 PowerShell 图标,或单击“ 开始”,键入 PowerShell,然后选择 Windows PowerShell
    显示“开始”按钮的 Windows 任务栏的屏幕截图。
    (蓝色图标)

  2. 确保执行策略允许运行脚本。

    1. 键入“Get-ExecutionPolicy”。 如果是“受限”(默认值),则必须通过键入“Set-ExecutionPolicy AllSigned”重置为更宽松的设置。 AllSigned 设置将允许运行已签名的脚本,但如果脚本不受信任,将会提示您。

    2. 有关执行策略设置的详细信息,请参阅 使用 Set-ExecutionPolicy Cmdlet

  3. 请切换到 Web 部署脚本目录。

    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.PublishSettings 的文件中,此文件可能由 WebMatrix 或 Visual Studio 使用,以发布到网站。 此配置文件目前不包含任何数据库发布信息。

使用 SetupSiteForPublish 脚本为任何站点和用户启用 Web 部署发布:

脚本:SetupSiteForPublish.ps1

说明:对于指定的站点和用户帐户,使指定用户能够发布到指定站点。 该脚本创建用户帐户、站点和应用程序池;设置站点的目录 ACL 和 IIS 管理器权限;并将设置信息保存在文件中。

参数

名称 说明 默认值 备注
网站名称 站点的名称。 如果站点不存在,将创建它。 WDeploySite
sitePhysicalPath 网站内容的物理文件位置。 如果该目录不存在,则会创建它。 %systemdrive%\inetpub\WDeploySite
siteAppPoolName 将与站点关联的应用程序池的名称。 如果应用程序池不存在,则会创建它。 WDeployAppPool 建议为每个站点专用一个应用程序池。
sitePort 站点绑定的端口。 第一个在8080到8200范围内未被其他站点使用的端口。 可能需要防火墙规则才能打开远程流量的端口。
部署用户名称 要授予网站访问权限的用户的名称。 如果用户不存在,则将创建非管理员用户。 WDeploySiteuser
部署用户密码 部署用户的密码。 如果未指定密码,则会自动生成密码并将其保存在设置文件中。 [自动生成]
managedRunTimeVersion 如果指定,将尝试为应用程序池设置指定的运行时版本。 如果未找到匹配的运行时版本,将使用应用程序池默认值。 应用程序池默认值 示例格式“v2.0”或“v4.0”
发布设置保存路径 现有的目录,用于保存设置文件。 当前用户的桌面 必须是现有目录。 如果指定的目录不存在,则将导致错误。
发布设置文件名 设置文件的名称,包括扩展名。 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 每次指定一个新用户,或者你最终可能会重置用户的登录密码并使用户以前的连接凭据失效。
数据库用户密码 数据库用户和登录帐号的密码。 如果未指定密码,则自动生成一个密码。 [自动生成] 在某些情况下,自动生成的密码可能包含导致某些发布客户端出现问题的字符。 如果使用脚本自动创建数据库,请考虑修改脚本。
databaseAdminUser SQL Server 管理员用户名(通常为“sa”)。 必需
databaseAdminPassword SQL Server 管理员帐户的密码。 必需
SQL 服务器实例名称 SQL Server 的位置。 .\SQLExpress

概况

发布设置保存路径 现有的目录,用于保存设置文件。 当前用户的桌面 必须是现有目录。 如果指定的目录不存在,则将导致错误。
发布设置文件名 设置文件的名称,包括扩展名。 WDeploy.PublishSettings 请务必记得包括文件扩展名。 如果该文件已存在,则会覆盖其中的网站信息。

示例:

使用默认值创建具有用户的数据库(本地 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

说明:创建数据库、具有数据库(at localhost)的所有权限的数据库用户,并将连接字符串信息保存在设置文件中

参数

名称 说明 默认值 备注
databaseName 要创建的数据库的名称。 WDeployDb
数据库用户名 数据库用户的名称。 WDeployUser
数据库用户密码 数据库用户和登录账户的密码。 如果未指定密码,则自动生成一个密码。 [自动生成] 在某些情况下,自动生成的密码可能包含导致某些发布客户端出现问题的字符。 如果使用脚本自动创建数据库,请考虑修改脚本。
databaseAdminUser 数据库管理员的名称,通常为“root”。 必需 如果未提供此参数,系统会提示你输入此参数
数据库管理员密码 服务器管理员帐户的密码。 必需 如果未提供该值,系统会提示输入此参数的值。
服务器主机名 MySQL 服务器的位置 localhost *请参阅下表中的注释

常规

发布设置保存路径 现有的目录,用于保存设置文件。 当前用户的桌面 必须是现有目录。 如果指定的目录不存在,则将导致错误。
发布设置文件名 设置文件的名称,包括扩展名。 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 用户,如果启用共享配置,则不起作用。 如果第二次运行脚本,则此用户帐户的密码将重置。
elevatedPassword 如果未指定,则自动生成。 [自动生成]
adminUsername 用作回收应用规则中的运行用户身份的管理员用户帐户名称。 WDeployAdmin 仅创建本地 Windows 用户,如果启用共享配置,则不起作用。 如果再次运行脚本,则此用户帐户的密码将重置。
管理员密码 如果未指定,则自动生成 [自动生成]
ignorePasswordResetErrors(忽略密码重置错误) 开关。 如果 elevated/adminUsername 引用一个已经存在的帐户,那么这个开关将允许脚本重置该帐户的密码。 [省略 - 用户密码重置不被允许] 重置用户密码可能会导致用户失去对数据的访问权限。 应谨慎使用此开关。 有关详细信息,请参阅 https://windows.microsoft.com/windows-vista/What-are-the-risks-of-resetting-a-password。 另请注意,新用户密码未存储,以后无法检索。