Importar módulo AD Powershell durante la secuencia de tareas MDT

13

He escrito este breve script de PowerShell para cambiar el nombre de una computadora como parte de una secuencia de tareas MDT:

Import-Module ActiveDirectory

$AdminUsername = 'domain.com\administrator'
$AdminPassword = 'password' | ConvertTo-SecureString -asPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential -ArgumentList $AdminUsername, $AdminPassword              

$Domain = Get-ADDomainController DomainName domain.com -Discover -NextClosestSite
$Site = $Domain.Site
$DomainComputer = Get-WmiObject Win32_BIOS 
$Serial = $DomainComputer.SerialNumber
$Computername = $Site + "-" + $Serial

Rename-Computer -NewName $Computername -DomainCredential $cred 

Cuando MDT ejecuta esta tarea, la ejecuta como administrador local. Recibo el siguiente error cuando intenta cargar el módulo AD.

Warning: Error initializing default drive:  'The server has rejected the client credentials.'.

Puedo importar el módulo muy bien después de que la secuencia de tareas termine desde la máquina cuando inicie sesión como administrador de dominio, pero no como administrador local de la máquina. ¿Hay alguna forma de ejecutar la secuencia de tareas MDT como administrador de dominio o elevar los privilegios del administrador local durante la secuencia de tareas?

Gracias de antemano por cualquier ayuda que pueda brindar,

Mx

ACTUALIZACIÓN: 13/10/2015

Decidí dejar de usar el módulo AD dentro de mi script MDT y, poco después de publicar esto, ideé otra forma de hacerlo. Mis resultados con el módulo AD fueron impredecibles en el mejor de los casos. Quería publicarlo aquí para la posteridad. Agrego esto a la carpeta Restaurar estado> Tareas personalizadas como "Ejecutar secuencia de comandos Powershell" en mi secuencia de tareas MDT y luego agrego una tarea Reiniciar equipo directamente debajo de ella. Ha funcionado a las mil maravillas en una implementación de más de 1600 clientes el año pasado.

$type = [System.DirectoryServices.ActiveDirectory.DirectoryContextType]"Domain"
$context = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext($type, "yourdomain.edu", "domainadmin", "yourpasswordhere")
$domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetDomain($context)
$DC = $domain.FindDomainController().Name
$Prefix = $DC.Substring(0,5)
$DomainComputer = Get-WmiObject Win32_BIOS 
$Serial = $DomainComputer.SerialNumber
$Computername = $Prefix + "-" + $Serial
$Password = "yourpasswordhere"
$Username = "yourdomain.edu\domainadmin"
$Computer = Get-WmiObject Win32_ComputerSystem
$Computer.Rename($Computername,$Password,$Username)
Mx Gorply
fuente
¿No te falta un poco $AdminPassworden la lista de argumentos de PSCredential?
Mathias R. Jessen
Disculpas, está en el script real, pero debe haber sido omitido en la copia y pega.
Mx Gorply
¿Tiene la secuencia de tareas ejecutándose CMDo PowerShell? Si está ejecutando PowerShell, intente el cmdcomando: powershell También verificaría y vería si la casilla PowerShell está marcada en la pantalla de configuración de compilación boot.wim
Elliot Labs LLC
@MxGorply ¿Puede confirmar: 1. que la secuencia de comandos se está ejecutando después de que Windows se inicia después de la instalación del sistema operativo, como en una fase de restauración de estado o en una fase anterior en WinPE o en un sistema operativo que se está actualizando. 2. Antes de ejecutar este paso, ¿ya ha ejecutado un paso de unión / reincorporación al dominio?
Bernie White el
44
@MxGorply Ah ok, ¿entonces no hay un problema con la ejecución de los comandos? La advertencia se debe a que cuando el módulo importe automáticamente intentará vincularse utilizando las credenciales actuales que no son válidas, esto sería de esperar. Si los comandos se están ejecutando, me preocuparía la advertencia antes de que proporcione las credenciales. Puede usar -WarningAction SilentlyContinuepara suprimir el mensaje en el comando import-module.
Bernie White

Respuestas:

1

Cuando no haya iniciado sesión como usuario de dominio, debe crear una instancia explícita de un PSDrive y luego ejecutar comandos * -AD * desde allí:

Import-Module ActiveDirectory -WarningAction SilentlyContinue
New-PSDrive -Name AD -PSProvider ActiveDirectory -Server <your DC> -Root //RootDSE/ -Credential $cred
Set-Location AD:
Nicolas Melay
fuente