2016-04-14 8 views
1

dieses Skript funktioniert gutPoweshell verbinden Home Antrieb

Get-ADUser -filter * | % { Set-ADUser $_ -HomeDrive "H:" -HomeDirectory ('\\Server \home$\' + $_.SamAccountName) } 

Aber sobald ich hinzufügen, wenn nicht variabel sein nicht nicht sicher arbeiten, was los ist falsch mit ihm

ForEach($User in (Get-ADUser -filter * | Select -ExpandProperty SamAccountName)){ if(-not (HomeDrive "H:" HomeDirectory ('\\server\home$\' + $_.SamAccountName)) | Set-ADUser $_ -HomeDrive "H:" -HomeDirectory('\\HYDAD1\home$\' + $_.SamAccountName)) } 
+0

'-HomeDrive' und' -HomeDirectory' sind Parameter zu 'Set-ADUser' und Sie können sie in Ihrer zweiten Version nicht verwenden. Sie benötigen alle Eigenschaften des Benutzerkontos, damit Sie '$ user.HomeDirectory' überprüfen können, was bedeutet, dass Sie' -ExpandProperty' auch nicht verwenden können, weil dadurch alle anderen Benutzerkontoeigenschaften verloren gehen. Und du kannst 'if() | nicht wirklich verwenden 'Ich brauche' if() {} ' – TessellatingHeckler

Antwort

0

Ok ich jetzt funktioniert es

(Get-ADUser -Filter * | Where{$_.Home -ne "H:" -or $_.HomeDirectory -ne ('\\server\home$\' + $_.SamAccountName)}) | % { Set-ADUser $_ -HomeDrive "H:" -HomeDirectory ('\\Server \home$\' + $_.SamAccountName) } 
1

Ich glaube, Sie nur brauchen wenig Hilfe bei der Syntax und vielleicht etwas Struktur. Wie im obigen Kommentar erwähnt, sind Home und HomeDirectory Eigenschaften des Benutzerobjekts. Um darauf zugreifen zu können, können Sie vorher Select -Expand samaccountname nicht verwenden, da dies einfach den Alias ​​des Benutzers als Zeichenfolge in der zu verwendenden Pipe weitergibt und diese Eigenschaften nicht enthält. Also fangen wir an, dieses Bit zu entfernen. Als nächstes müssen Sie sie als Eigenschaften korrekt referenzieren, indem Sie auf Ihre Variable $user verweisen. Das würde wie $user.home -ne "H:" und $user.HomeDirectory -ne ('\\server\home$\' + $user.SamAccountName) aussehen. Sie werden feststellen, dass ich diesen beiden auch -eq hinzugefügt habe. Das ist der Vergleichsoperator für nicht-gleich. Das räumt deine Syntax etwas auf, jetzt schauen wir uns die Struktur an.

Anstatt zu einer If Anweisung zu leiten, verwenden wir eine Where Anweisung, um nur die Benutzer herauszufiltern, die Aufmerksamkeit benötigen. Da wir es so machen, benutzen Sie $_ anstelle von $user, da wir es noch nicht wirklich in die ForEach Schleife geschafft haben. Also das würde wie folgt aussehen:

(Get-ADUser -Filter * | Where{$_.Home -ne "H:" -or $_.HomeDirectory -ne ('\\server\home$\' + $_.SamAccountName)}) 

Nun, wenn Sie, dass in Ihrem Skript integrieren es wie folgt aussieht:

ForEach($User in (Get-ADUser -Filter * | Where{$_.Home -ne "H:" -or $_.HomeDirectory -ne ('\\server\home$\' + $_.SamAccountName)})){ 
    Set-ADUser $User -HomeDrive "H:" -HomeDirectory('\\HYDAD1\home$\' + $_.SamAccountName) 
} 
+0

Lassen Sie mich auf Test-Ad-Server testen, wo {$ _. Home -ne" H: "-oder $ _. HomeDirectory -ne das sieht gut aus es wird nicht verbinden Home-Verzeichnis wenn nicht existiert. – DisplayName

+0

Funktioniert dies auch @themadTechnician ForEach ($ Benutzer in (Get-ADUser -Filter * | Wobei {$ _. ScriptPath 'yyy.bat -ne | Set-ADUser -ScriptPath' yyy.bat ' – DisplayName

+0

Nein, Das funktioniert nicht. Sie haben die Reihenfolge falsch. Lesen Sie es laut vor ... "Wo die ScriptPath-Eigenschaft" yyy.bat "nicht gleich ist. Es sollte lauten" Wo die ScriptPath-Eigenschaft nicht gleich ist "yyy.bat '' so ändern Sie es in 'Get-ADUser -filter * | Wo {$ _. ScriptPath -ne 'yyy.bat'} | Set-ADUser -ScriptPath 'yyy.bat'' – TheMadTechnician