powershell - 如何从对象输出中删除@{}标签

标签 powershell

我在使用脚本列出 CSV 文件中每个用户所属的用户和组时遇到问题。我尝试了多种导出这些对象的方法,但不知道如何删除输出中的 @{} 标记。

我的输出是:

@{Name=简·多伊}

@{Group=区域 OU 管理员}

这是我的代码:

$OUPath = “OU=Computers, OU=HQ,OU=USA,DC=STACKOVERFLOW,DC=COM”
$users = (get-aduser -Filter * -SearchBase $OUpath  | select SamAccountName)


ForEach ($User in $Users)
    {   $Username = Get-ADUser $($user.SamAccountName) -Properties MemberOf
        $Groups = ForEach ($Group in ($Username.MemberOf))
        {   (Get-ADGroup $Group).Name
        }
        $Groups = $Groups | Sort
        ForEach ($Group in $Groups)
        {  New-Object PSObject -Property @{
                 Name = $Username.Name
                 Group = $Group
            } | Select name,group | Add-Content C:\Temp\test.csv

            
            
        }
    }

我在这里做错了什么?

最佳答案

您正在将对象写入 TXT 文件。在以这种方式编写输出之前,您必须先格式化输出,但是有一种更好的方法可以完成您想要做的事情(看起来):

ForEach ($User in $Users) {
    $Username = Get-ADUser $($user.SamAccountName) -Properties MemberOf
    $Groups = ForEach ($Group in ($Username.MemberOf)) {
      (Get-ADGroup $Group).Name
    }
    if ($null -eq $Groups) {
        continue;
    }
    $Groups | Sort | Select-Object @{ "Name" = "Group"; "Expression" = { $_ } }, @{ "Name" = "Name"; "Expression" = { $Username.Name } } | Export-Csv "D:\temp\$($Username.Name).csv" -Encoding utf8
}

请注意,此脚本将为每个用户输出 1 个 CSV 文件,但您可以轻松聚合结果并将其通过管道传输到单个 Export-Csv!

编辑

根据要求,这是将所有信息聚合到单个 CSV 文件中的变体。这与您最初的实现略有不同。这是我能想到的最好的方法:

$users = Get-ADUser -LDAPFilter "(sAMAccountName=vi*)" -Properties @("MemberOf");

$result = New-Object "Collections.Generic.List[Object]";
foreach ($user in $users) {
    if ($null -eq $user.MemberOf) { continue; }
    $memberOf = $user.MemberOf | Get-ADGroup | Select-Object -ExpandProperty Name;
    $memberOf | ForEach-Object { $result.Add((New-Object PSObject -Property @{
        Name = $user.Name
        Group = $_
    }))};
}
$result | Sort-Object Name | Export-Csv D:\temp\output.csv -Encoding utf8;

关于powershell - 如何从对象输出中删除@{}标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71742446/

相关文章:

用于传递日志信息的 Azure powershell 脚本

powershell - 将字符串的一部分转换为大写

PowerShell 获取从本周五开始的 12 个月的周五

powershell - 检测脚本是否在 Azure 自动化中运行的正确方法是什么?

unit-testing - Azure cmdlet 调用上出现 Pester 模拟错误 PSInvalidCastException

list - 使用 PowerShell 更新列表中的所有项目

Powershell脚本计算省略包含特定字符的行的行数

regex - 如何用正则表达式替换数字 - 如 $1<number>

regex - 正则表达式中 (?s) 的含义

regex - 如何从 Select-String 中获取捕获的组?