Подтвердить что ты не робот

Назначить пользователя IIS AppPool через Powershell

Я пробовал этот код, и он работает нормально. Тем не менее, я заметил, что если вы назначаете имя пользователя и пароль для учетной записи, которая не существует, код продолжается без проблем. Кроме того, если вы назначаете недопустимую учетную запись и вызываете stop(), а затем запускаете(), пул 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;
}
4b9b3361

Ответ 1

Вы должны всегда проверять свои учетные данные перед установкой идентификатора пула. Это может быть выполнено с помощью класса 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 на "Контейнер типа".

Ответ 2

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

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

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

Нет проверки перед действительностью идентификатора пула при использовании API. Эти проверки проверяются только консолью управления IIS.