如何在PowerShell GUI的Out-GridView中添加列?获取AD用户办公地点
解决方案
要在Out-GridView中添加办公地点列,你需要做两个关键修改:
- 调用
Get-ADUser时指定要获取办公地点属性(AD中对应physicalDeliveryOfficeName,也可以用别名Office)和邮箱属性——默认Get-ADUser不会返回这些扩展属性。 - 不要直接用
ExpandProperty展开SamAccountName,而是选择需要展示的多列(比如SamAccountName、办公地点),这样Out-GridView会显示完整的表格。
修改后的函数代码如下:
function getacctname { $fname = $FirstName.Text $lname = $LastName.Text Try { # 获取包含办公地点的用户对象,选择需要的列展示到GridView $selectedUser = Get-ADUser -Filter "GivenName -eq '$fname' -and SurName -eq '$lname'" -Properties mail, physicalDeliveryOfficeName | Select-Object SamAccountName, @{Name='办公地点'; Expression={$_.physicalDeliveryOfficeName}}, mail | Out-Gridview -Title '选择Windows登录账户' -PassThru # 给控件赋值 if ($selectedUser) { $User.Text = $selectedUser.SamAccountName $Email.Text = $selectedUser.mail } } Catch { # 可根据需求添加错误提示 Write-Warning "未找到匹配用户或发生错误: $_" } }
关键说明:
-Properties mail, physicalDeliveryOfficeName:明确告知Get-ADUser拉取这两个扩展属性,否则无法获取办公地点和邮箱信息。- 计算属性
@{Name='办公地点'; Expression={$_.physicalDeliveryOfficeName}}:把AD原生属性名转换成更易懂的列名,你也可以直接用physicalDeliveryOfficeName作为列名。 - 先将选中的用户对象存入
$selectedUser变量,再从中提取值,避免重复调用Get-ADUser,提升执行效率。 - 添加
if ($selectedUser)判断,防止用户取消选择时出现空值错误,同时补充Catch块处理异常场景。
内容的提问来源于stack exchange,提问作者PCMedicJAX
相关产品推荐
相关产品推荐

