Назначение пользователя IIS AppPool через Powershell - PullRequest
13 голосов
/ 25 марта 2011

Я попробовал этот код, и он, кажется, работает нормально.Тем не менее, я заметил, что если вы назначите имя пользователя и пароль для несуществующей учетной записи, код продолжит работу без проблем.Кроме того, если вы назначаете неверную учетную запись и вызываете stop (), а затем start (), пул IIS действительно останавливается и запускается !!Кроме того, когда я захожу в InetMgr и запускаю, останавливаю или перезаписываю пул, он также останавливается и запускается без жалоб!

Я надеялся, что добавление неверной учетной записи приведет к ошибке, позволяющей мне проверить правильностьучетная запись.Почему так себя ведет?

$loginfile = "d:\temp\Logins.csv"
$csv = Import-Csv -path $loginfile
ForEach($line in $csv){

   $poolid = "MyDomain\" + $line.Login;
   Write-Host "Assigning User to Pool:" $poolid;

   $testpool = get-item iis:\apppools\test;
   $testpool.processModel.userName = $poolid;
   $testpool.processModel.password = $line.Pwd;
   $testpool.processModel.identityType = 3;
   $testpool | Set-Item
   $testpool.Stop();
   $testpool.Start();
   Write-Host "IIS Recycled";

   $testpool = get-item iis:\apppools\test;
   write-host "New Pool User: " $testpool.processModel.userName;
   write-host "New Pool PWd: " $testpool.processModel.password;
}

Ответы [ 2 ]

8 голосов
/ 27 апреля 2011

Вы всегда должны проверять свои учетные данные перед установкой удостоверения пула.Это может быть выполнено с помощью класса PrincipalContext .NET - специально посмотрите на PrincipalContext.ValidateCredentials (пользователь, пароль).

Пример:

#-- Make sure the proper Assembly is loaded
[System.Reflection.Assembly]::LoadWithPartialName("System.DirectoryServices.AccountManagement") | out-null

#-- Code to check user credentials -- put in function but here are the guts
#-- Recommend you use SecureStrings and convert where needed
$ct = [System.DirectoryServices.AccountManagement.ContextType]::Domain
$pc = New-Object System.DirectoryServices.AccountManagement.PrincipalContext -ArgumentList $ct,"domainname"
$isValid = $pc.ValidateCredentials("myuser","mypassword")

Если локальная учетная запись изменит $ ct на ContextType «Machine».

4 голосов
/ 25 марта 2011

Старт и Стоп являются чем-то неправильным. Они действительно должны называться Включить и Отключить .

Рабочий процесс для пула не будет "запускаться" до тех пор, пока ему не понадобится обработать запрос.

Именно в этот момент происходит аутентификация. Если имя пользователя и пароль неверны, вы получите ответ 503 Service Unavailable и три события (5021, 5057 и 5059), зарегистрированные WAS в журнале системных событий.

При использовании API не выполняется предварительная проверка действительности удостоверения пула. Только консоль управления IIS выполняет эти проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...