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

PowerShell GUI中Foreach多次返回值问题求助

解决PowerShell GUI中AD用户Int64属性转换后重复输出的问题

我来帮你捋捋这个问题,你遇到的重复显示且只有一个有效日期的情况,核心原因是原代码里的循环逻辑绕了弯路,咱们一步步拆解和修正:

原代码的问题分析

你原本的逻辑是先获取所有Int64类型的AD用户属性,然后遍历每个属性,每次都去获取目标用户的该属性,再select你选中的那个属性(比如PwdLastSet)。这就导致:

  • 循环会执行N次(N是Int64属性的数量,比如LastLogon、PwdLastSet、LastLogonTimestamp等)
  • 只有当遍历到你选中的那个属性时,才能得到正确的日期值,其他循环里select $list要么输出空,要么重复表头,最终文本框里就堆了一堆重复内容。

而且你用的Select -Unique其实起不到作用,因为重复的内容是不同循环输出的空行/表头,不是重复的日期值。

修正后的代码方案

既然用户已经通过Listbox3选中了特定属性,咱们直接针对这个属性处理就好,没必要遍历所有Int64属性:

elseif ($ListBox1.SelectedItem -eq 'Specified User Info') {
    # 提取用户选择的目标属性和要查询的用户名
    $targetProperty = $Listbox3.SelectedItem
    $targetUser = $Textbox.Text

    # 先确认选中的属性是否为Int64类型(避免非日期属性走转换逻辑)
    $propertyDetails = Get-ADUser $targetUser -Properties $targetProperty | 
        Get-Member -MemberType Properties | 
        Where-Object { $_.Name -eq $targetProperty }

    if ($propertyDetails.Definition -like "*int64*") {
        # 转换Int64时间戳为可读日期,过滤掉多余的表头和空行
        $convertedDate = Get-ADUser $targetUser -Property $targetProperty | 
            Select-Object @{
                Name = $targetProperty
                Expression = { [DateTime]::FromFileTime($_."$targetProperty") }
            } | 
            Out-String -Stream | 
            Where-Object { $_ -match '\d{4}-\d{2}-\d{2}' } # 只保留包含日期格式的行

        # 把处理后的日期写入文本框,去掉多余空格
        $TextBox1.Text = $convertedDate.Trim()
    }
    else {
        # 如果选中的是普通属性,直接获取并格式化输出
        $userInfo = Get-ADUser $targetUser -Property $targetProperty | 
            Select-Object $targetProperty | 
            Out-String -Stream | 
            Where-Object { $_ -notmatch '^----|^$' } # 去掉分割线和空行

        $TextBox1.Text = $userInfo.Trim()
    }
}

关键修正点说明

  1. 去掉冗余循环:直接针对用户选中的属性处理,避免遍历所有Int64属性导致的重复输出。
  2. 添加类型验证:先确认选中的属性确实是Int64类型,再执行日期转换,兼容非日期属性的查询需求。
  3. 清理输出内容:用Out-String -Stream配合过滤条件,去掉PowerShell默认输出的表头、分割线和空行,只保留有效数据。
  4. 简化逻辑分支:去掉原代码中冗余的switch语句,直接通过属性类型判断走对应的处理流程。

这样修改后,文本框里就只会显示一次正确的转换后日期,不会再出现重复内容啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:26:16