powershell - 通过 powershell 获取每个用户成员的规范名称
问题描述
我也想获得每个组的规范名称。我怎样才能做到这一点 ?
这是我的脚本:
Get-ADUser -Filter {Enabled -eq $true} -Properties * | Select displayname ,@{Name="MemberOf";Expression={($_.MemberOf | %{(Get-ADGroup $_).sAMAccountName}) -Join ";"}} | Export-Csv -Path "c:\temp\users.csv" -NoTypeInformation -Encoding UTF8
我的输出:
"displayname","MemberOf"
"User01","Group01;Group02;Group03"
我想要的输出:
"displayname","MemberOf"
"User01","Group01;Contoso.com/OU1/OU2;Group02;Contoso.com/OU21/OU52;Group03;Contoso.com/OU1/OU21/OU22"
解决方案
我同意Mathias的观点,但这是使用已有代码的方法。绝对建议您只调用您需要查询的属性。
Get-ADUser -Filter {Enabled -eq $true} -Properties Displayname,MemberOf |
Select-Object Displayname,
@{
Name="MemberOf"
Expression={
# ($_.MemberOf | ForEach-Object{
# (Get-ADGroup $_ -Properties CanonicalName).CanonicalName
# }) -Join ";"
# You can pipe $_.MemberOf to Get-ADGroup, since it's an array of
# distinguishedNames it should work fine
($_.MemberOf | Get-ADGroup -Properties CanonicalName).CanonicalName -Join ";"
}
} | Export-Csv -Path "c:\temp\users.csv" -NoTypeInformation -Encoding UTF8
该代码的替代方案,使用更经典的方法:
$users = Get-ADUser -Filter {Enabled -eq $true} -Properties DisplayName
$result = foreach($user in $users)
{
$params = @{
LDAPFilter = "(member=$($user.DistinguishedName))"
Properties = "CanonicalName"
}
$membership = (Get-ADGroup @params).CanonicalName -join ";"
[pscustomobject]@{
DisplayName = $user.DisplayName
MemberOf = $membership
}
}
$result | Export-Csv -Path "c:\temp\users.csv" -NoTypeInformation -Encoding UTF8
推荐阅读
- node.js - 为什么 Safari 不保存 Cookie 以响应存储?
- python - AI Platform Notebook Always Python 2
- python - 如何从多对多关系显示标签
- r - 如何从单独的列中引用时区(TZ)?
- big-o - 计算向量积的 O(n^2) 算法
- java - 如何编写 Java Lambda 函数来调用 Maven Gatling 插件最终调用的类并在 AWS LAMBDA 中运行
- css - 使用 attr() 更新 CSS 变量
- c++ - 如何将这两个 for 循环语句结合起来?
- java - 如何获取所有提交的 MultipartFiles,无论其名称如何
- netlogo - 如何找出特定海龟(Netlogo)在每个滴答声中调用的程序?