Importer le module Powershell AD pendant la séquence de tâches MDT

13

J'ai écrit ce court script PowerShell pour renommer un ordinateur dans le cadre d'une séquence de tâches 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 

Lorsque MDT exécute cette tâche, il l'exécute en tant qu'administrateur local. J'obtiens l'erreur suivante lorsqu'il tente de charger le module AD.

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

Je peux importer le module très bien une fois la séquence de tâches terminée depuis la machine lorsque je suis connecté en tant qu'administrateur de domaine, mais pas en tant qu'administrateur local de la machine. Existe-t-il un moyen d'exécuter la séquence de tâches MDT en tant qu'administrateur de domaine ou d'élever les privilèges de l'administrateur local pendant la séquence de tâches?

Merci d'avance pour toute aide que vous pouvez fournir,

Mx

MISE À JOUR: 13/10/2015

J'ai décidé de m'éloigner de l'utilisation du module AD dans mon script MDT et peu de temps après la publication, j'ai imaginé une autre façon de faire cela. Mes résultats avec le module AD étaient au mieux imprévisibles. Je voulais le poster ici pour la postérité. J'ajoute cela au dossier State Restore> Custom Tasks en tant que "Run Powershell Script" dans ma séquence de tâches MDT, puis j'ajoute une tâche Redémarrer l'ordinateur directement en dessous. Cela a fonctionné comme un charme sur un déploiement de 1600+ clients l'année dernière.

$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
la source
Ne manquez-vous pas un peu $AdminPassworddans la liste d'arguments PSCredential?
Mathias R. Jessen
Toutes mes excuses, c'est dans le script réel, mais doit avoir été omis dans le copier-coller.
Mx Gorply
Avez-vous la séquence de tâches en cours d'exécution CMDou PowerShell? Si vous exécutez powershell, essayez la cmdcommande: powershell Je vérifierais également si la case powershell est cochée sur l'écran de configuration de la construction boot.wim
Elliot Labs LLC
@MxGorply Pouvez-vous confirmer: 1. que le script est exécuté après le démarrage de Windows après l'installation du système d'exploitation comme dans une phase de restauration d'état ou est-ce dans une phase antérieure dans WinPE ou dans un système d'exploitation en cours de rafraîchissement. 2. Avant d'exécuter cette étape, avez-vous déjà exécuté une étape de domaine de jointure / de rejointe.
Bernie White
4
@MxGorply Ah ok, donc il n'y a pas de problème avec l'exécution des commandes? L'avertissement est dû au fait que lorsque le module importera, il essaiera automatiquement de se lier à l'aide des informations d'identification actuelles qui ne sont pas valides, ce serait normal. Si les commandes sont en cours d'exécution, je m'inquiéterais de l'avertissement avant de fournir des informations d'identification. Vous pouvez utiliser -WarningAction SilentlyContinuepour supprimer le message sur la commande import-module.
Bernie White

Réponses:

1

Lorsque vous n'êtes pas connecté en tant qu'utilisateur de domaine, vous devez instancier explicitement un PSDrive, puis exécuter les commandes * -AD * à partir de là:

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