Az objektumok módosításánál már jobban kihasználható a PowerShell előnye, azaz a csövezés. Ugyanis általában a módosítás csővezetéke egy szűrési szakaszból és egy módosítási szakaszból áll össze. Nézzük meg a módosítás néhány specialitását:
[1] PS C:\> Get-ADUser -Filter {name -like "nagy i*"} | Set-ADUser -Description
"Módosítás"
[2] PS C:\> Get-ADUser -Filter {name -like "nagy i*"} -prop description| Format
-Table name, description
name description
---- -----------
Nagy Ildikó Módosítás
Nagy István Módosítás
Ez az egyik fajta módosítási lehetőség. A Get-ADUser résszel szűrök, majd ezt a csővezetéken átadom a Set-ADUser cmdletnek. Fontos, hogy a Set-ADUser önmagában képes a csővezetékből felszedni a paramétereit, nem kell Foreach-Object cmdletet használni. A fenti példában a –Description tulajdonságát módosítottam a felhasználóknak. Ez olyan gyakran használatos tulajdonság, hogy maga a Set-ADUser cmdletnek létrehoztak ilyen paramétert. De mi van akkor, ha olyan tulajdonságot akarunk módosítani, amelyik nincsen kivezetve paraméterként? Elsőként nézzük meg, hogy mi az, amit „gyárilag” tud a Set-ADUser:
[5] PS C:\> (get-help Set-ADUser).parameters.parameter | ft name
name
----
AccountExpirationDate
AccountNotDelegated
Add
AllowReversiblePasswordEncryption
AuthType
CannotChangePassword
Certificates
ChangePasswordAtLogon
City
Clear
Company
Country
Credential
Department
Description
DisplayName
Division
EmailAddress
EmployeeID
EmployeeNumber
Enabled
Fax
GivenName
HomeDirectory
HomeDrive
HomePage
HomePhone
Identity
Initials
Instance
LogonWorkstations
Manager
MobilePhone
Office
OfficePhone
Organization
OtherName
Partition
PassThru
PasswordNeverExpires
PasswordNotRequired
POBox
PostalCode
ProfilePath
Remove
Replace
SamAccountName
ScriptPath
Server
ServicePrincipalNames
SmartcardLogonRequired
State
StreetAddress
Surname
Title
TrustedForDelegation
UserPrincipalName
Confirm
WhatIf
Ezek közül néhány nem AD tulajdonság módosítására való paraméter (vastagon szedtem ezeket), közülük a következők alkalmasak általánosan tulajdonságok módosítására: Add, Clear, Remove, Replace.
[13] PS C:\> Get-ADUser -Filter {name -like "nagy i*"} | Set-ADUser -replace @{
othertelephone = 1234; description = "másik módszer"}
[14] PS C:\> Get-ADUser -Filter {name -like "nagy i*"} -prop description, other
telephone| Format-Table name, description, othertelephone
name description othertelephone
---- ----------- --------------
Nagy Ildikó másik módszer {1234}
Nagy István másik módszer {1234}
Látható, hogy értékadás célzattal a –Replace paraméternek egy hashtáblát adtam meg, melyben az AD attribútumnevek vannak kulcsként és az értékük értékként. Az –Add paraméter un. „multivalued” tulajdonságoknál használható újabb érték hozzáadásakor. A Description az nem „multivalued”, de az OtherTelephone az igen. A –Remove-val ilyen „multivalued” tulajdonságokból lehet értékeket elvenni:
[15] PS C:\> Get-ADUser -Filter {name -like "nagy i*"} | Set-ADUser -add @{othe
rtelephone = "újszám"}
[16] PS C:\> Get-ADUser -Filter {name -like "nagy i*"} -prop description, other
telephone| Format-Table name, description, othertelephone
name description othertelephone
---- ----------- --------------
Nagy Ildikó másik módszer {újszám, 1234}
Nagy István másik módszer {újszám, 1234}
[17] PS C:\> Get-ADUser -Filter {name -like "nagy i*"} | Set-ADUser -remove @{o
thertelephone = "1234"}
[18] PS C:\> Get-ADUser -Filter {name -like "nagy i*"} -prop description, other
telephone| Format-Table name, description, othertelephone
name description othertelephone
---- ----------- --------------
Nagy Ildikó másik módszer {újszám}
Nagy István másik módszer {újszám}
A [15]-ös sorban a kiszűrt felhasználóimnak adtam egy-egy újabb telefonszámot, a [17]-es sorban meg elvettem tőlük a régebbit.
A –Clear paraméterrel lehet AD tulajdonságokat törölni, $null érték adásával ne próbálkozzunk, hibát fog adni:
[19] PS C:\> Get-ADUser -Filter {name -like "nagy i*"} | Set-ADUser -clear othe
rtelephone
[20] PS C:\> Get-ADUser -Filter {name -like "nagy i*"} -prop description, other
telephone| Format-Table name, description, othertelephone
name description othertelephone
---- ----------- --------------
Nagy Ildikó másik módszer {}
Nagy István másik módszer {}
Itt természetesen nem hashtáblát kell megadni a –Clear értékeként, hanem csak az attribútumneveket.
Harmadik módja az AD objektumok tulajdonságértékeinek megváltoztatásának a közvetlen értékadás:
[26] PS C:\> $u = Get-ADUser acsbela -Properties department
[27] PS C:\> $u | Format-Table name, department
name department
---- ----------
Ács Béla Beszerzés
[28] PS C:\> $u.Department = "Sóhivatal"
[29] PS C:\> Set-ADUser -Instance $u
[30] PS C:\> Get-ADUser acsbela -Properties department | Format-Table name, dep
artment
name department
---- ----------
Ács Béla Sóhivatal
A [26]-os sorban kiolvasom a felhasználót a „department” tulajdonságával együtt és berakom a $u változóba. A [27]-es sorban látszik, hogy ő a „Beszerzés” nevű osztályon dolgozik. A [28]-as sorban a $u változó Department tulajdonságának új értéket adok. Ez a művelet a memóriában, a $u változóban jön csak létre, magában az AD adatbázisban nem. Ahhoz, hogy ez beíródjon a címtárba is, ehhez szükséges volt a [29]-es sorban a művelet „kommittálása”, amit a Set-ADUser-rel tettem meg.
Figyelem! Itt a paraméter az ‑Instance volt, nem az –Identity! Bár az ‑Identity-vel is lefut a parancs, de ekkor tényleges végrehajtás nem történik.
Ezzel a harmadik módszerrel a multivalued tulajdonságokat legkényelmesebben az Update‑List cmdlet segítségével tudjuk módosítani:
[39] PS C:\> $u = Get-ADUser acsbela -Properties othertelephone
[40] PS C:\> $u
DistinguishedName : CN=Ács Béla,OU=csaba,DC=r2,DC=dom
Enabled : True
GivenName : Ács
Name : Ács Béla
ObjectClass : user
ObjectGUID : 56419e7c-211c-41eb-80fb-c5be5d82b217
SamAccountName : acsBela
SID : S-1-5-21-3398938913-3940250523-927435294-1607
Surname : Béla
UserPrincipalName : acsBela@r2.dom
[41] PS C:\> $u.othertelephone = "egy"
Álljunk meg egy szóra! Látható a [40]-es sor kimenetében, hogy alaphelyzetben nincs is az $u változónak othertelephone tulajdonsága, mégis sikeres az értékadás a [41]-es sorban!
Folytassuk akkor az Update-List alkalmazásával:
[42] PS C:\> $u | Update-List -Add "másik" -Property othertelephone
DistinguishedName : CN=Ács Béla,OU=csaba,DC=r2,DC=dom
Enabled : True
GivenName : Ács
Name : Ács Béla
ObjectClass : user
ObjectGUID : 56419e7c-211c-41eb-80fb-c5be5d82b217
othertelephone : {egy, másik}
PSShowComputerName : {}
SamAccountName : acsBela
SID : S-1-5-21-3398938913-3940250523-927435294-1607
Surname : Béla
UserPrincipalName : acsBela@r2.dom
WriteErrorStream : {}
[43] PS C:\> Set-ADUser -Instance $u
[44] PS C:\> Get-ADUser $u -Properties othertelephone | ft name,othertelephone
name othertelephone
---- --------------
Ács Béla {másik, egy}
Természetesen az Update-List összes lehetőségét ki tudjuk itt használni, az Add-on kívül a Replace vagy Remove-ot is.