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

作者:Kristina Olson

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 文件夹的完全控制 ACL,以及 IIS 管理器对该站点的权限。 设置信息保存在桌面上名为 WDeploy.PublishSettings 的文件中 - WebMatrix(也可能是 Visual Studio)可以使用此文件来发布到站点。 此配置文件目前不包含任何数据库发布信息。

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

脚本:SetupSiteForPublish.ps1

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

参数:

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

常规

publishSettingSavePath 用于保存设置文件的现有目录。 当前用户的桌面 必须是现有目录。 如果指定的目录不存在,则会导致错误。
publishSettingFileName 设置文件的名称,包括扩展名。 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

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

参数:

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

常规:

publishSettingSavePath 用于保存设置文件的现有目录。 当前用户的桌面 必须是现有目录。 如果指定的目录不存在,则会导致错误。
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 脚本。

参数:

名称 说明 默认值 说明
elevatedUsername 被授予对服务器的 applicationHost.config 文件的写入访问权限的用户帐户的名称。 此用户用作 appPoolPipeline、appPoolNetFx 和 createApp 规则的运行方式用户。 WDeployUser 仅创建本地 Windows 用户,如果启用了共享配置,则不起作用。 如果再次运行该脚本,此用户帐户的密码将被重置。
elevatedPassword 如果未指定,则会自动生成。 [autogenerated]
adminUsername 用作 recycleApp 规则的运行方式用户的管理员用户帐户的名称。 WDeployAdmin 仅创建本地 Windows 用户,如果启用了共享配置,则不起作用。 如果再次运行该脚本,此用户帐户的密码将被重置。
adminPassword 如果未指定,则会自动生成 [autogenerated]
ignorePasswordResetErrors 交换机。 如果 elevated/adminUsername 引用现有帐户,则此开关允许脚本重置该帐户的密码。 [省略 - 不允许重置用户密码] 重置用户密码可能会导致该用户失去对数据的访问权限。 应谨慎使用此开关。 有关详细信息,请参阅 https://windows.microsoft.com/windows-vista/What-are-the-risks-of-resetting-a-password。 另请注意,不会存储新用户密码,并且以后无法检索它。