为什么在Windows 10下,对于IIS应用程序而言,Set-ItemProperty没有效果?

20
我们的大多数Web应用程序都包括Deploy.ps1 Powershell脚本。Octopus Deploy在生产部署期间使用此脚本来配置应用程序,但我们还将其用于设置开发人员的本地IIS设置。在Windows 7、Windows 8.1以及我们所有的Win2012生产服务器上都可以正常工作。
它在Windows 10上不起作用,这似乎是因为Set-ItemProperty命令没有效果。没有任何错误消息,它就是不起作用。
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应用程序,则失败,这让我想知道这是否可能只是提供程序中的错误。有任何想法吗?

这是一个bug,请投票支持。https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/15077202-make-propeties-name-case-insensitive-for-creating - zerocool18
3个回答

25

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

这样做是有效的:

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

对我来说,这似乎是一个错误,但这种符号(首字母小写)在您的其他Windows环境中也有效,因此应该是有效的解决方法。


相关问题已由同一人回答 :) : https://stackoverflow.com/questions/38186101/are-the-properties-in-power-shell-ftp-modulewebadministration-case-sensitive - zerocool18

4
我能够复制您的问题。如果我在工作站上工作,Set-ItemProperty对我有用。
这些cmdlet来自WebAdministration模块,我已经检查了完整的文档。它们似乎只在相关示例中使用网站。如果您还没有检查过,请在此处检查:Windows PowerShell的Web管理(IIS)提供程序 正如您指出的,这可能是一个错误。我建议在此处报告:Microsoft Connect - PowerShell

Connect被替换为https://windowsserver.uservoice.com/forums/301869-powershell - Frode F.

-1

对我来说,这个方法可行(不需要 Set-Location 命令):

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接