powershell - 如何在 Powershell 中添加到此集合?
问题描述
我正在从我们的 ITSM 解决方案中提取 REST API 中的一些数据,它从 json 中解析并放入一个名为 $listOfCurrentUsers 的对象中。然后,我根据从 Active Directory 中提取的数据创建一个对象。然后,它检查 $listOfCurrentUsers 中是否存在 AD 用户,如果存在,它将记录 ID 添加到 $CAServiceDesk 对象。如果用户不存在,它仍然添加记录 ID,但给它一个 null 值。
$listOfCurrentUsers = Invoke-RestMethod -Method Get -Uri $getList -Header $requestHeader
Import-Module ActiveDirectory
$CAServiceDesk = Get-ADGroupMember "ServiceDesk" -Recursive |
ForEach-Object(
{
Get-ADUser($_.samaccountname) -Properties * |
Select-Object -Property Name,
@{Name = 'SAM Account Name'; Expression = {$_.samaccountname}},
Department,
@{Name = 'Telephone Number'; Expression = {$_.telephonenumber}},
@{Name = 'Manager'; Expression = {($_.manager -split ',*..=')[1]}},
@{Name = 'User Account Control'; Expression = {$_.useraccountcontrol}},
Mail,
@{Name = 'Employee ID'; Expression = {$_.employeeID}}
if($listOfCurrentUsers.users | where { $_.PublicID -eq $CAServiceDesk.Name }) {
Add-Member -InputObject -MemberType NoteProperty -Name RecID -Value $_.RecordID}
else {
Add-Member -InputObject -MemberType NoteProperty -Name RecID -Value {"null"}}
}
)
我被困在“如果是真的那么这个”部分。我似乎无法弄清楚如何将 RecordID 值分配给 Add-Member?
解决方案
您的代码似乎无效。您要么缺少第一个 ForEach-Object 的右大括号,要么$CAServiceDesk
在为它赋值的表达式中使用$CAServiceDesk
(即,当您调用它时它将是一个空变量)。
但是,如果我对您在做什么以及对象的外观做出最好的猜测,我会这样写:
# This should give you a hash table that maps PublicID to RecordID.
# This will not work as I expect if PublicID can be duplicated.
$TableOfCurrentUsers = Invoke-RestMethod -Method Get -Uri $getList -Header $requestHeader |
Select-Object -ExpandProperty users |
Select-Object -Property PublicID, RecordID |
Group-Object -Property PublicID -AsHashTable
# This will get the users and build your custom object
$CAServiceDesk = Get-ADGroupMember "ServiceDesk" -Recursive |
Get-ADUser -Properties Name, SamAccountName, Department, TelephoneNumber, Manager, UserAccountControl, Mail, EmployeeID |
Select-Object -Property Name,
@{n = 'SAM Account Name'; e = {$_.samaccountname}},
Department,
@{n = 'Telephone Number'; e = {$_.telephonenumber}},
@{n = 'Manager'; e = {($_.manager -split ',*..=')[1]}},
@{n = 'User Account Control'; e = {$_.useraccountcontrol}},
Mail,
@{n = 'Employee ID'; e = {$_.employeeID}},
@{n = 'RecID'; e = { $TableOfCurrentUsers[$_.Name] }}
请注意,Get-ADUser -Properties *
除非您真的非常需要,否则您永远不应该指定。有些属性很长,它会使您的 LDAP 查询花费很长时间。