Как вы выполняете проверку подлинности для приложения IIS7 в PowerShell - PullRequest
5 голосов
/ 27 января 2011

Мне нужно пройти все режимы аутентификации для приложения IIS и отключить все, кроме одного.

что-то вроде:

foreach($itm in [collection of authentication modes for app]){
if([certain authentication]){enabled = true}else{enabled = false}}

Я знаком с Set-WebConfigurationProperty.

1 Ответ

13 голосов
/ 03 марта 2011

Вы можете перебрать все собственные (а также любые сторонние) режимы аутентификации для корневого веб-приложения для данного сайта, вызвав 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...