You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell自定义PSObject输出不对齐问题求助

解决PowerShell AD用户组信息对齐显示问题

问题核心是你当前代码分别收集两个账户的组信息并追加到数组,导致输出分成上下两段。要实现每行同时显示两个账户的对应组信息,需将两个账户的组列表按索引对齐,逐行构建统一对象。

修改后的代码:

$userName = (Read-Host "New Username").Trim()
$elev = "elev_$userName"
$admin = "admin_$userName"

# 获取并处理elev账户的组列表
$elevGroups = ((Get-ADUser $elev -Properties memberof).memberof -replace ",OU=.*", '' -replace 'CN=', '' | Sort-Object)
# 获取并处理admin账户的组列表
$adminGroups = ((Get-ADUser $admin -Properties memberof).memberof -replace ",OU=.*", '' -replace 'CN=', '' | Sort-Object)

# 确定最长的组列表长度,确保覆盖所有条目
$maxLength = [Math]::Max($elevGroups.Count, $adminGroups.Count)

$members = for ($i = 0; $i -lt $maxLength; $i++) {
    # 按索引取对应组,超出长度则为空
    $elevGroup = if ($i -lt $elevGroups.Count) { $elevGroups[$i] } else { $null }
    $adminGroup = if ($i -lt $adminGroups.Count) { $adminGroups[$i] } else { $null }

    # 创建包含两个账户信息的统一对象
    [PSCustomObject]@{
        elev_User        = $elev
        elev_Membership  = $elevGroup
        admin_Membership = $adminGroup
        admin_User       = $admin
    }
}

$members | Select-Object elev_User, elev_Membership, admin_Membership, admin_User

关键修改说明:

  • 分别提取两个账户的组列表并保存为独立数组,避免混合追加导致的分段输出
  • 使用[Math]::Max()获取两个组列表的最大长度,确保循环能覆盖所有组条目
  • 循环时按索引匹配两个账户的组,某一方组列表较短时,对应字段留空
  • 直接在循环中创建[PSCustomObject](比New-Object更简洁高效),每个对象同时包含两个账户的完整信息

运行后即可得到你期望的对齐输出:

elev_User   elev_Membership admin_Membership admin_User
---------   --------------- ---------------- ----------
elev_bob    group1          group1           admin_bob
elev_bob    group2          group6           admin_bob
elev_bob    group3          group190         admin_bob

内容的提问来源于stack exchange,提问作者pyqaqeka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:32:22