sunnyrainyday
Goto Top

Eigenschaft durch Variable ersetzten

Moin Zusammen,

ich möchte zwei AD User Konten synchronisieren. Dies möchte ich möglichst mit einer Forech-Schleife realisieren.
Leider tuts nicht so wie erwartet. Wenn ich versuche eine Eigenschaft -Company durch eine Variable zu ersetzten die auch -Company enthällt erhalte ich einen Fehler:

$UsersCSV = Import-Csv -path C:\Users\Administrator\Desktop\user.csv -Delimiter ";"   

foreach ( $User in $UsersCSV) {
$UserOrg = $user.orgid
$attribute = "company"     
        ForEach ($attr in $attribute) {
             $IT_Attr = get-Aduser $user.SamAccountName -Properties * | Select-Object -ExpandProperty $attr 
             set-aduser -Identity $UserOrg -server $IT_Server **-$attr** $IT_Attr

             }
}


Fehler:
Set-ADUser : Es wurde kein Positionsparameter gefunden, der das Argument "-company" akzeptiert.  
In C:\Users\Administrator\Desktop\syncAccounts.ps1:25 Zeichen:9

set-aduser -Identity $UserOrg -server $IT_Server -Company $IT_Attr funktioniert hingegen.
Die $Attribute Variable wird später mit weiteren Werten gefüllt.

Für Hilfe wäre ich euch dankbar.
Vielen Dank!

Content-ID: 372333

Url: https://administrator.de/contentid/372333

Ausgedruckt am: 23.11.2024 um 01:11 Uhr

emeriks
emeriks 26.04.2018 um 15:19:37 Uhr
Goto Top
Hi,
set-aduser -Identity $UserOrg -server $IT_Server -Company $IT_Attr funktioniert hingegen.
Hier ist "-Company" ein Switch.
set-aduser -Identity $UserOrg -server $IT_Server -$attr $IT_Attr
Und hier wird es zu einem Parameter.

PowerShell ist kein Batch, wo man zur Laufzeit die Befehle generieren kann.

Versuche es statt dessen mit

Set-ADUser -Identity $UserOrg -server $IT_Server -Replace @{$attr=$IT_Attr}

E.
SunnyRainyDay
SunnyRainyDay 26.04.2018 um 16:10:35 Uhr
Goto Top
Vielen dank. Funktioniert aber leider nur teilweise bzw. nicht zuverlässig.
Habe die $attribute mit @("company","StreetAddress","Department","Description","titel","City","MobilePhone","Office","PostalCode","OfficePhone","titel","DisplayName","Fax") erweitert.

Dabei stellte sich heraus das nicht alle Eigenschaften mit Werten gefüllt wurden. Z.b. Company,StreetAddress, Department wurden übernommen die anderen wie Fax, titel, City..etc. nicht. Fehler:
Set-ADUser : Das Argument für den Parameter "Replace" kann nicht überprüft werden. Das Argument ist NULL, oder ein Element der Argumentauflistung enthält einen NULL-Wert.  
In C:\Users\Administrator\Desktop\syncAccounts_kurzversion.ps1:25 Zeichen:68
+ ... r -Identity $UserOrg -server $ITS_Server -Replace @{$attr=$ITDZ_Attr}
136037
136037 26.04.2018 aktualisiert um 16:15:13 Uhr
Goto Top
Bei -Replace ist Bedingung das der Wert nicht NULL ist!!
Wenn eine Eigenschaft leer ist nutzt man -Clear.

Einfach mal die Doku lesen
https://docs.microsoft.com/en-us/powershell/module/addsadministration/se ...
136037
136037 26.04.2018 aktualisiert um 17:17:53 Uhr
Goto Top
Zitat von @emeriks:
PowerShell ist kein Batch, wo man zur Laufzeit die Befehle generieren kann.
Das geht damit auch wenn an das wollte und zwar lassen sich Befehlsketten mit Invoke-Expression ausführen, Beispiel.:
$param = "-class Win32_Computersystem"  
iex "Get-WMIObject $param"