我目前正在使用PowerShell更新Active Directory用户属性。脚本将从CSV读取更新的属性。
我希望实现的是遍历用户,并将每个用户属性与CSV中存储的值进行比较。如果CSV属性值与用户的Active Directory属性不匹配,我希望更新Active Directory中的值
目前,我可以选择一个用户,并使用以下命令显示所有属性:
Get-ADUser -Filter "UserPrincipalName -eq '$($upn)'" -Properties * -SearchBase 'DC=core,DC=com'
我正在努力的是循环遍历每个用户的所有属性并将它们与该用户的CSV值进行比较的能力。
下面是我正在处理的代码片段:
# Import CSV into variable $users
$users = Import-Csv -Path 'C:\PowerShell\AD\UserUpdates.csv'
# Loop through each user
foreach ($user in $users) {
#Search in specified OU and Update existing attributes
$userproperties = Get-ADUser -Filter "UserPrincipalName -eq '$($user.UserPrincpalName)'" -Properties * -SearchBase 'DC=core,DC=com'
}
有人知道循环遍历用户的所有用户配置文件属性的方法吗?
如有任何帮助或指导,将不胜感激?
更新
好的,在这方面做得更进一步,我已经取得了进展,但我不认为这是完成这一点的最干净的方式。
$userproperties = Get-ADUser -Filter "UserPrincipalName -eq '$($upn)'" -Properties * -SearchBase 'DC=core,DC=com' | Select-Object Name,Created, LastLogon,GivenName,SurName,DisplayName,DistinguishedName,UserPrincipleName
这允许我选择如下项目:
$userproperties.DisplayName
但是使用这种方法,我需要列出我希望使用的每一个属性。我更希望能够在所有属性之间循环。也许我可以把我希望使用的所有属性放在一个数组中,然后在数组中循环。
3条答案
按热度按时间y3bcpkx11#
这是一种循环进入对象(本例中为AD用户)属性的方法:
在
foreach-object
(%
)中,您可以添加更新某些属性所需的逻辑at0kjp5o2#
循环遍历CSV文件中一个条目的所有属性并不困难。诀窍是将通过循环遍历导入的csv数据得到的哈希表转换为PS对象,如下所示:
g2ieeal73#
Set-ADUser
有一个-Replace
参数,该参数接受一个属性和值的哈希表,您可以使用该哈希表一次更新多个属性。您可以只构建哈希表,然后执行单个更新操作。您可以通过从CSV返回您正在检查的AD用户属性来使其更高效。只需从导入的CSV文件创建的集合中的第一个对象获取属性列表,即可获得该属性列表。