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

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

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

$loginfile = "d:tempLogins.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:apppoolstest;
   $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:apppoolstest;
   write-host "New Pool User: " $testpool.processModel.userName;
   write-host "New Pool PWd: " $testpool.processModel.password;
}

2 ответов


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


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

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

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

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