Get-ADobject Variable nicht definiert?
Hallo zusammen,
ich habe ein nerviges Problem mit einem von mir geschriebenen PowerShell Script bzw. nur mit einem Teil davon. Ich hoffe, dass mir da jemand weiterhelfen kann.
In dem Teil von dem Script geht es darum, dass ich einen AD-User wiederherstelle, nachdem er gelöscht wurden.
AD-Server = Windows Server 2019
Exchange-Server = Windows Server 2019
Das Gesamte Script ist zu lange. Daher habe ich nur den Teil, um den es geht, eingefügt. Daher noch die zusätzliche Information, dass im Vorfeld für die Exchange und AD Cmdlet´s die passenden Module geladen werden. Die AD-Module für PowerShell habe ich vorher auf dem Exchange und AD-Server installiert.
Wenn ich das Script ausführe, bekomme ich folgende Fehlermeldung:
Das komische ist das ich die Fehlermeldung eben nicht immer bekomme. Gestern kurz vor Feierabend habe ich das Script ausgeführt und es lief auf dem Exchange als auch auf dem AD-Server ohne Probleme durch. Heute Morgen ohne überhaupt was an dem Script zu ändern, läuft das Script auf dem Exchange nicht, aber auf dem AD. Vor paar Tagen war es sogar so, dass das Problem egal auf welcher Maschine aufgetreten ist.
Ich hoffe, mir kann hier jemand weiterhelfen, ich suche nämlich schon wie blöd und finde meinen Fehler einfach nicht.
Ich danke euch und wünsche noch einen angenehmen Tag.
Gruß Alex.K
ich habe ein nerviges Problem mit einem von mir geschriebenen PowerShell Script bzw. nur mit einem Teil davon. Ich hoffe, dass mir da jemand weiterhelfen kann.
In dem Teil von dem Script geht es darum, dass ich einen AD-User wiederherstelle, nachdem er gelöscht wurden.
AD-Server = Windows Server 2019
Exchange-Server = Windows Server 2019
Das Gesamte Script ist zu lange. Daher habe ich nur den Teil, um den es geht, eingefügt. Daher noch die zusätzliche Information, dass im Vorfeld für die Exchange und AD Cmdlet´s die passenden Module geladen werden. Die AD-Module für PowerShell habe ich vorher auf dem Exchange und AD-Server installiert.
Write-Host -ForegroundColor Cyan "`n`nUser Wiederherstellen"
"`nDieser Vorgang kann je nach Anzahl der gelöschten User etwas dauern!"
$deleteed = Get-ADObject -Filter {(isdeleted -eq $true)} -IncludeDeletedObjects -Properties *
for($i = 1;$i -le $deleteed.count; $i++)
{
Write-Progress -Activity "Gelöschte User werden gesucht" -PercentComplete (($i*100)/$deleteed.count)
Write-host "User $($deleteed[$i-1].Samaccountname) ermittelt"
}
if($deleteed.count -ge 1)
{
$san = Read-Host "SamAccountName eingeben"
do
{
if($san -like "Cancel")
{
break mainja;
}
elseif($deleteed.Samaccountname -notcontains $san)
{
do
{
if($san -like "Cancel")
{
break mainja;
}
if(-not $san)
{
Write-Warning "Sie haben keine User eingegeben"
$san = Read-Host "SamAccountName eingeben"
break
}
elseif($deleteed.Samaccountname -notcontains $san)
{
Write-Warning "User kann nicht gefunden werden"
$san = Read-Host "SamAccountName eingeben"
break
}
}until($deleteed.Samaccountname -contains $san)
}
if($deleteed.Samaccountname -contains $san)
{
Get-ADObject -Filter {samaccountname -eq $san} -IncludeDeletedObjects | Restore-ADObject
Write-Host "`nUser $san wurde wiederhergestellt`n"
}
}until($deleteed.SamAccountName -contains $san)
}
else
{
Write-Host "`n`nEs wurden keine gelöschten User gefunden"
}
Wenn ich das Script ausführe, bekomme ich folgende Fehlermeldung:
Variable: "san" wurde im Ausdruck gefunden: $san ist nicht definiert.
+ CategoryInfo : InvalidArgument: (:) [Get-ADObject], ArgumentException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.ArgumentException,Microsoft.ActiveDirectory.Management.Commands.GetADObject
+ PSComputerName : DC01
Das komische ist das ich die Fehlermeldung eben nicht immer bekomme. Gestern kurz vor Feierabend habe ich das Script ausgeführt und es lief auf dem Exchange als auch auf dem AD-Server ohne Probleme durch. Heute Morgen ohne überhaupt was an dem Script zu ändern, läuft das Script auf dem Exchange nicht, aber auf dem AD. Vor paar Tagen war es sogar so, dass das Problem egal auf welcher Maschine aufgetreten ist.
Ich hoffe, mir kann hier jemand weiterhelfen, ich suche nämlich schon wie blöd und finde meinen Fehler einfach nicht.
Ich danke euch und wünsche noch einen angenehmen Tag.
Gruß Alex.K
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Dani am 13.09.2022 um 16:40:57 Uhr
Fehlermeldung in Code Blocks gepackt.
Content-ID: 3927184089
Url: https://administrator.de/forum/get-adobject-variable-nicht-definiert-3927184089.html
Ausgedruckt am: 19.03.2025 um 12:03 Uhr
11 Kommentare
Neuester Kommentar

Moin.
Kommt hier immer mal wieder. Stichwort Variable-Scope innerhalb von Filter-Blöcken von AD CMDLets, die Variablen mögen es nicht wenn der Filter mit geschweiften Klammern geschrieben wird, darin gibt es die Variable nicht.
Mach die Abfrage mit der Variablen bei Get-ADObject so dann klappt es mit der Variablen im Filter einwandfrei
Cheers
certguy
Kommt hier immer mal wieder. Stichwort Variable-Scope innerhalb von Filter-Blöcken von AD CMDLets, die Variablen mögen es nicht wenn der Filter mit geschweiften Klammern geschrieben wird, darin gibt es die Variable nicht.
Mach die Abfrage mit der Variablen bei Get-ADObject so dann klappt es mit der Variablen im Filter einwandfrei
Get-ADObject -Filter "samaccountname -eq '$san'" -IncludeDeletedObjects
Cheers
certguy

Kann ich hier nicht bestätigen.
Aber das zusätzliche Get-ADObject ist ja auch ehrlich gesagt vollkommen überflüssig (wie vieles andere im Skript auch) und Ressourcenverschwendung denn du hast das Objekt ja schon in der Variablen $deleteed (wat n Schreibfehler 🙃) vorliegen, also filtere es einfach aus statt es erneut abzufragen
p.s. du solltest dir angewöhnen auch bei Variablen Rechtschreibfehler zu korrigieren, sonst führt das schnell zu Flüchtigkeitsfehlern...
Cheers
c.
Aber das zusätzliche Get-ADObject ist ja auch ehrlich gesagt vollkommen überflüssig (wie vieles andere im Skript auch) und Ressourcenverschwendung denn du hast das Objekt ja schon in der Variablen $deleteed (wat n Schreibfehler 🙃) vorliegen, also filtere es einfach aus statt es erneut abzufragen
$deleteed | ?{$_SamAccountName -eq $san} | Restore-ADObject
p.s. du solltest dir angewöhnen auch bei Variablen Rechtschreibfehler zu korrigieren, sonst führt das schnell zu Flüchtigkeitsfehlern...
Cheers
c.

Ja du hast irgendwo das AD Objekt zu einem Custom Object konvertiert.

Scheint wohl bei manchen AD Probleme bei mehreren Restores zur gleichen Zeit zu geben, machs mal mit Foreach-Schleife
$deleteed | ?{$_.SamAccountName -eq $san} | %{Restore-ADObject $_.objectguid -NewName $_.samaccountname -TargetPath $_.LastKnownParent}

Upps sorry korrigiert.