2016-11-07 1 views
1

Ich versuche, das city Attribut für Benutzer in einem bestimmten ou mit diesem Skript zu aktualisieren, aber es funktioniert nicht. Das Skript wird ohne Fehler abgeschlossen. Wenn ich die Benutzer überprüfe, ist das city immer noch leer.Warum kann ich dieses Attribut nicht mithilfe des Cmdlets Set-ADUser PowerShell aktualisieren?

$users = Get-ADUser -Filter * -SearchBase 'OU=...' -Properties SamAccountName 
foreach ($user in $users){ 
    Set-ADUser -identity $user.SamAccountName -City 'Alice' 
} 
+2

Warum funktioniert es nicht? – TessellatingHeckler

+1

Hallo N.Ma, willkommen zu stackoverflow! Versuchen Sie, Ihr Problem genauer zu beschreiben, was Sie gerade versuchen zu erreichen und wir werden versuchen, Ihnen zu helfen! –

+0

Ich versuche, das Stadtattribut für alle Benutzer in einer bestimmten Organisationseinheit zu aktualisieren. Wenn ich das obige Skript ausgeführt habe, wird die Stadt nicht auf Alice gesetzt. –

Antwort

1

Es klingt wie Ihr Get-ADUser kehrt nichts, so dass die foreach Schleife wird nie eingegeben.

Get-ADUser mit dem -Filter Parameter nicht scheitern wenn keine Übereinstimmungen gefunden werden, ist es ruhig eine leere Auflistung zurückgibt.

A foreach Schleife über eine leere Sammlung oder $null wird einfach nie eingegeben, so insgesamt Sie ruhig no-op bekommen.

Beachten Sie, dass Sie nie -Properties SamAccountName in einem Get-ADUser Anruf benötigen, weil -Properties nur zusätzliche Eigenschaften für jedes Ergebnisobjekt zurückzukehren benötigt wird, während SamAccountName Teil des Standard Satz von Eigenschaften ist.

Deshalb:

  • Sie benötigen Get-ADUser Anruf zu beheben,
  • und Sie sollten auch Code hinzufügen, die den Fall des Anrufs erkennt unerwartet keine Objekte zurück.

Der folgende Ausschnitt zeigt die letztere, und es optimiert auch Ihren Befehl durch die Ausgabe von Get-ADUser direkt an Set-ADUser vorbei:

# Get the users of interest and pass them to the Set-ADUser call to update 
# the City property. 
# Note the use of -OutputVariable users, which saves the output from 
# Get-ADUser in variable $users 
Get-ADUser -OutputVariable users -Filter * -SearchBase 'OU=...' | Set-ADUser -City 'Alice' 

# Report terminating error if no users were found. 
# Note: -not $users returns $true if $users is an empty collection 
#  (or a similarly "falsy" value such as $null, 0, or ''). 
if (-not $users) { Throw "Get-ADUser unexpectedly returned nothing." } 
Verwandte Themen