为什么Set-ItemProperty对Windows10下的IIS应用没有影响?

Why does Set-ItemProperty have no effect for IIS applications under Windows 10?

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

它在 Windows 10 上不起作用,这似乎是因为 Set-ItemProperty cmdlet 无效。没有错误消息或任何东西,它只是什么都不做。

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 应用程序或其他内容的设置?

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

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

Set-ItemProperty IIS:\sites$sitename$appName -Name applicationPool -Value $appPoolName

我能够重现你的问题。如果我在网站上工作,Set-ItemProperty 对我有用。

这些 cmdlet 来自 WebAdministration 模块,我已经检查了完整的文档。他们似乎只使用相关示例中的网站。你也可以检查相同的,如果你还没有,在这里:Web Administration (IIS) Provider for Windows PowerShell

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

不知道为什么你要设置的属性首字母必须是小写e。 G。 physicalPath

这会起作用:

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

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