2011-03-24 23 views
12

He intentado 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.Asignar usuario a IIS AppPool a través de Powershell

Esperaba 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; 
} 
+5

La pregunta en sí misma es una respuesta fantástica a "cómo asigno un nombre de usuario y contraseña a un grupo de aplicaciones usando PowerShell". – sfuqua

Respuesta

7

Siempre debe validar sus credenciales antes de establecer 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 cuenta local cambia el ct $ a 'Máquina' ContextType.

4

inicio y parada son algo de un nombre inapropiado. Deberían llamarse realmente Activar y Desactivar.

El proceso de trabajo para el grupo en realidad no se "iniciará" hasta que necesite atender una solicitud.

Es en ese momento donde se realiza 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 hay verificación inicial de la validez de la identidad de un grupo cuando se utilizan las API. Solo la consola de administración de IIS realiza estas comprobaciones.

Cuestiones relacionadas