Почему Set-ItemProperty не влияет на приложения IIS под Windows 10?

Большинство наших веб-приложений включают Deploy.ps1 Powershell script. 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? Какие-то дополнительные повышенные разрешения Мне нужно изменить настройки в существующих веб-приложениях или что-то еще?

UPDATE: он работает нормально, если элемент является сайтом IIS, но не удается, если элемент является веб-приложением, что заставляет меня задаться вопросом, может ли это быть просто ошибкой в ​​провайдере. Любые идеи?

Ответы

Ответ 1

Я не знаю, почему, но первая буква свойства, которое вы хотите установить, должна быть строчной. г. physicalPath

Это будет работать:

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

Похоже на ошибку, но эта нотация (строчная буква с первой буквой) также работает для других ваших сред Windows, поэтому она должна быть допустимым обходным решением.

Ответ 2

Я смог реплицировать вашу проблему. Set-ItemProperty работал у меня, если я работал на сайте.

Эти командлеты из модуля WebAdministration, и я проверил полную документацию. Кажется, что они используют только сайты в соответствующих примерах. Вы также можете проверить то же самое, если вы еще этого не сделали: Поставщик веб-администрирования (IIS) для Windows PowerShell

Как вы указали, это может быть ошибка. Я бы рекомендовал сообщить об этом здесь: Microsoft Connect - PowerShell

Ответ 3

Это работает для меня (без Set-Location):

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