iis-7 - octopus - iis powershell
Asignar usuario a IIS AppPool a través de Powershell (2)
Intenté este código y parece funcionar bien. Sin embargo, noté que si asigna el nombre de usuario y la contraseña a una cuenta que no existe, el código continúa sin problemas. Además, si asigna una cuenta no válida y llama a stop () y luego a start () el grupo IIS se detiene y se inicia. Además, cuando voy a InetMgr y comienzo, detengo o vuelvo a conectar el grupo, también se detiene y comienza sin quejarse.
Tenía la esperanza de que agregar una cuenta no válida arrojaría un error que me permitiera probar la validez de una cuenta. ¿Por qué se comporta de esta manera?
$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;
}
Start and Stop son algo así como un nombre inapropiado. Deberían llamarse realmente Habilitar y Deshabilitar .
El proceso de trabajo para el grupo en realidad no "comenzará" hasta que necesite atender una solicitud.
Es en ese punto que se lleva a cabo la autenticación. Si el nombre de usuario y la contraseña no son válidos, recibirá una respuesta 503 de Servicio no disponible y tres eventos (5021, 5057 y 5059) registrados por el WAS en el registro de eventos del sistema.
No existe una verificación inicial de la validez de la identidad de un grupo al usar las API. Solo la consola de administración de IIS realiza estas comprobaciones.
Siempre debe validar sus credenciales antes de configurar la identidad del grupo. Esto se puede lograr a través de la clase PrincipalContext .NET, específicamente, consulte PrincipalContext.ValidateCredentials (usuario, contraseña).
Muestra:
#-- 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")
Si la cuenta local cambia el tipo de Contexto de $ ct a ''Máquina''.