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
相关产品推荐
相关产品推荐

