Ahorre 1 hora configurando una cuenta de inicio de sesión del servicio PowerShell
Con PowerShell, puede consultar fácilmente muchas computadoras a la vez y configurar la cuenta de inicio de sesión del servicio PowerShell en todas ellas. Si necesita un cmd de PowerShell para buscar y cambiar una cuenta de inicio de sesión de servicio, esta publicación es para usted.
Hace unos años estaba en una posición en la que debía implementar una nueva política de contraseñas de Active Directory. Todas las contraseñas de los usuarios de los empleados debían comenzar a caducar después de 6 meses. Tenía contabilizadas las 10.000 cuentas de Active Directory. Etiqueté todas las cuentas de usuario que pensé que deberían usarse para servicios y todas las que eran empleados.
Se envió la notificación adecuada a todo el departamento de TI preguntando si alguna cuenta de usuario de empleado estaba ejecutando servicios en alguno de los servidores. ¡No!
Se implementó la política de contraseñas y se iluminó la mesa de ayuda. ¿Por qué? ¡Había docenas de servicios en servidores ejecutándose como cuentas de usuarios de empleados que habían caducado! En retrospectiva, no debería haber creído en su palabra y haber consultado todos los servidores yo mismo, pero se vive, se aprende. Mi solución fue crear este script para configurar la cuenta de inicio de sesión del servicio PowerShell.
Este script de cuenta de inicio de sesión del servicio PowerShell recorre todos los servicios en el CSV, se conecta al servidor en cuestión, cambia la cuenta de servicio, detiene el servicio y luego lo reinicia para garantizar que se confirme el cambio. Esto se escribió hace unos años, por lo que no estoy usando Get-CimInstance en lugar de Get-WmiObject, entre algunas otras cosas.
Aunque debería funcionar muy bien para cualquiera que pueda estar en una posición similar a la mía.
El cambiador de cuenta de inicio de sesión del servicio PowerShell
El siguiente script es una función llamada ChangeServiceAccount que consulta una computadora remota con WMI y enumera el servicio que coincide con el parámetro $sServiceName.
Una vez que el script encuentra el servicio, llama al método Change() en el objeto WMI al que luego le pasamos el nombre de usuario y la contraseña de la cuenta que queremos cambiar.
Dado que el servicio debe reiniciarse, lo hace usando los métodos StopService() y StartService() aunque podrías usar Restart-Service tal como fácilmente.
Function ChangeServiceAccount($sServiceName,$sComputerName,$sUsername,$sPassword) {
$oService = Get-WmiObject -ComputerName $sComputerName -Query "SELECT * FROM Win32_Service WHERE Name = '$sServiceName'"
$oService.Change($null,$null,$null,$null,$null,$null,"$sUsername",$sPassword) | Out-Null
$oService.StopService() | Out-Null
while ($oService.Started) {
sleep 1
$oService = Get-WmiObject -ComputerName $sComputerName -Query "SELECT * FROM Win32_Service WHERE Name = '$sServiceName'"
}##endwhile
$oService.StartService() | Out-Null
}##endfunction
if (!$sCsvFile) {
Write-Error 'No CSV file specified' -RecommendedAction 'Please specify CSV file as first parameter'
} elseif (!(Test-Path $sCsvFile)) {
Write-Error "CSV file '$sCsvFile' not found";
} elseif ((gc $sCsvFile | select -First 1) -ne 'Service,Server,Username,Password') {
Write-Error "CSV headers are incorrect. They must be 'Service,Server,Username,Password'"
} else {
$aRows = Import-Csv $sCsvFile;
foreach ($oRow in $aRows) {
## Set service logon account PowerShell
changeServiceAccount $oRow.Service $oRow.Server $oRow.Username $oRow.Password
Write-Host "Changed service account $($oRow.Service) on $($oRow.Server) to $($oRow.Username) and restarted service"
}##endforeach
}##endifCopie el script de cuenta de inicio de sesión del servicio PowerShell anterior y úselo a su gusto.