20

我们的大多数 Web 应用程序都包含一个 Deploy.ps1 Powershell 脚本。Octopus Deploy 使用它在生产部署期间配置应用程序,但我们也使用它来设置开发人员的本地 IIS 设置。在 Windows 7、Windows 8.1 和我们所有的 Win2012 生产服务器上运行良好。

它不适用于 Windows 10,这似乎是因为Set-ItemPropertycmdlet 无效。没有错误消息或任何东西,它只是不做任何事情。

IIS 站点 api.example.com 已经存在,我们正在使用 Powershell 创建 /myapp 应用程序,然后将应用程序的物理路径更改为 D:\Projects\Demo

PS C:\> IIS:
PS IIS:\> cd Sites\api.example.com
PS IIS:\Sites\api.example.com> New-WebApplication myapp -site api.example.com -PhysicalPath C:\inetpub\wwwroot

Name             Application pool   Protocols    Physical Path
----             ----------------   ---------    -------------
myapp            DefaultAppPool     http         C:\inetpub\wwwroot

PS IIS:\Sites\api.example.com> set-itemproperty myapp -name PhysicalPath -value D:\Projects\Demo

PS IIS:\Sites\api.example.com> get-itemproperty myapp

Name             Application pool   Protocols    Physical Path
----             ----------------   ---------    -------------
demo             DefaultAppPool     http         C:\inetpub\wwwroot

                                                 ^ THIS IS WRONG!

在 Windows 7 上运行完全相同的命令集,您将获得相同的输出,但在最后一步,PhysicalPath 属性已按预期更改:

PS IIS:\Sites\api.example.com> get-itemproperty myapp

Name             Application pool   Protocols    Physical Path
----             ----------------   ---------    -------------
demo             DefaultAppPool     http         D:\Projects\Demo

知道发生了什么吗?IIS10 是否有一些新的管理员限制?我需要某种额外提升的权限来修改现有 Web 应用程序的设置或其他什么?

更新:如果项目是 IIS 站点,它似乎工作正常,但如果项目是 Web 应用程序则失败,这让我想知道这是否只是提供程序中的错误。有任何想法吗?

4

3 回答 3

25

我不知道为什么,但是您要设置的属性的第一个字母必须是小写的,例如 physicalPath

这将起作用:

set-itemproperty myapp -name physicalPath -value D:\Projects\Demo

对我来说似乎是一个错误,但这种表示法(第一个字母小写)也适用于您的其他 Windows 环境,因此应该是一个有效的解决方法。

于 2016-04-26T08:17:28.030 回答
4

我能够复制您的问题。Set-ItemProperty如果我在网站上工作,则为我工作。

这些 cmdlet 来自WebAdministration模块,我已经检查了完整的文档。他们似乎只使用相关示例中的网站。如果还没有,您也可以在此处检查相同的内容:Windows PowerShell 的 Web 管理 (IIS) 提供程序

正如您所指出的,这可能是一个错误。我建议在这里报告:Microsoft Connect - PowerShell

于 2016-04-25T18:36:54.110 回答
-1

这对我有用(没有设置位置):

Set-ItemProperty IIS:\sites\$sitename\$appName -Name applicationPool -Value $appPoolName
于 2016-04-11T05:43:41.710 回答