Importa il modulo AD Powershell durante la sequenza di attività MDT


13

Ho scritto questo breve script PowerShell per rinominare un computer come parte di una sequenza di attività 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 

Quando MDT esegue questa attività, la esegue come amministratore locale. Ottengo il seguente errore quando tenta di caricare il modulo AD.

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

Posso importare il modulo subito dopo che la sequenza di attività è terminata dalla macchina quando ho effettuato l'accesso come amministratore di dominio, ma non come amministratore locale della macchina. Esiste un modo per eseguire la sequenza di attività MDT come amministratore di dominio o elevare i privilegi dell'amministratore locale durante la sequenza di attività?

Grazie in anticipo per qualsiasi aiuto tu possa fornire,

Mx

AGGIORNAMENTO: 13/10/2015

Ho deciso di abbandonare l'utilizzo del modulo AD all'interno del mio script MDT e poco dopo la pubblicazione ho escogitato un altro modo per farlo. I miei risultati con il modulo AD erano al massimo imprevedibili. Volevo pubblicarlo qui per i posteri. Aggiungo questo alla cartella Ripristino stato> Attività personalizzate come "Esegui script Powershell" nella sequenza delle attività MDT e quindi aggiungo un'attività Riavvia computer direttamente al di sotto di essa. Ha funzionato come un incantesimo su un'implementazione di oltre 1600 client l'anno scorso.

$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)

Non ti manca un po ' $AdminPasswordnella lista degli argomenti di PSCredential?
Mathias R. Jessen,

Ci scusiamo, è nello script reale, ma deve essere stato omesso nella copia e incolla.
Mx Gorply,

Hai l'esecuzione della sequenza di attività CMDo PowerShell? Se stai eseguendo PowerShell allora prova il cmdcomando: powershell Inoltre vorrei controllare e vedere se la casella PowerShell è selezionata nella schermata di configurazione build boot.wim
Elliot Labs LLC

@MxGorply Puoi confermare: 1. che lo script è in esecuzione dopo l'avvio di Windows dopo l'installazione del sistema operativo come in una fase di ripristino dello stato o è in una fase precedente in WinPE o in un sistema operativo da aggiornare. 2. Prima di eseguire questo passaggio, è già stato eseguito un passaggio di dominio join / rejoin.
Bernie White,

4
@MxGorply Ah ok, quindi non c'è nessun problema con l'esecuzione dei comandi? L'avvertimento è perché quando il modulo viene importato tenterà automaticamente di eseguire il binding utilizzando le credenziali correnti che non sono valide, questo dovrebbe essere previsto. Se i comandi sono in esecuzione, mi preoccuperei dell'avviso prima di fornire le credenziali. È possibile utilizzare -WarningAction SilentlyContinueper sopprimere il messaggio sul comando import-module.
Bernie White,

Risposte:


1

Quando non si è effettuato l'accesso come utente di dominio, è necessario creare un'istanza esplicita di un PSDrive e quindi eseguire i comandi * -AD * da lì:

Import-Module ActiveDirectory -WarningAction SilentlyContinue
New-PSDrive -Name AD -PSProvider ActiveDirectory -Server <your DC> -Root //RootDSE/ -Credential $cred
Set-Location AD:
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.