Вы можете перебрать все собственные (а также любые сторонние) режимы аутентификации для корневого веб-приложения для данного сайта, вызвав Get-WebConfiguration:
$siteName = "MySiteName"
$authentications = Get-WebConfiguration `
-filter "system.webServer/security/authentication/*" `
-PSPath "IIS:\Sites\$siteName"
Вы также можете использовать режимы аутентификации для любого веб-приложения на сайте (или даже для определенного файла). Далее извлекаются режимы аутентификации для надуманного веб-приложения с именем "\ foo":
$authentications = Get-WebConfiguration `
-filter "system.webServer/security/authentication/*" `
-PSPath "IIS:\Sites\$siteName\foo"
Свойство SectionPath можно использовать для проверки режима аутентификации, например ::
.
$authentications | foreach {$_.SectionPath}
Какие выходы:
/system.webServer/security/authentication/digestAuthentication
/system.webServer/security/authentication/anonymousAuthentication
/system.webServer/security/authentication/iisClientCertificateMappingAuthentication
/system.webServer/security/authentication/basicAuthentication
/system.webServer/security/authentication/clientCertificateMappingAuthentication
/system.webServer/security/authentication/windowsAuthentication
Вы можете подумать, что могли бы сделать что-то столь же простое в цикле foreach ...
$authentications | `
foreach { $_.Enabled = $_.SectionPath.EndsWith('\windowsAuthentication') }
... но есть проблема. Не работает Это на самом деле не приведет к ошибке, но ничего не изменит.
Это потому, что разделы аутентификации заблокированы. Чтобы изменить настройку в заблокированном разделе, необходимо вызвать Set-WebConfigurationProperty и включить параметр -Location, например,
Set-WebConfigurationProperty `
-filter "/system.webServer/security/authentication/windowsAuthentication" `
-name enabled -value true -PSPath "IIS:\" -location $siteName
Полагаю, вы все еще можете передавать объекты в командлет foreach-object, но, вероятно, будет намного легче читать (и поддерживать), если вы запишете это с помощью цикла foreach.
$siteName = "MySiteName"
$authentications = Get-WebConfiguration `
-filter "system.webServer/security/authentication/*" `
-PSPath "IIS:\Sites\$siteName"
foreach ($auth in $authentications)
{
$auth.SectionPath -match "/windowsAuthentication$"
$enable = ($matches.count -gt 0)
Set-WebConfigurationProperty `
-filter $auth.SectionPath `
-name enabled -value $enable -PSPath "IIS:\" -location $siteName
}