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

能否通过PowerShell 5.1提取net user /dom命令返回的指定用户信息?

可行性说明

完全可以实现,无需安装任何额外模块,PowerShell 5.1 约束语言模式下仅用原生语法即可完成字段提取。net user <username> /dom返回的是结构固定的纯文本,所有字段均以「固定宽度字段名+多空格分隔+字段值」的格式排列,通过基础字符串处理就能提取目标内容,赋值后可直接供后续命令调用。

实现代码

以下是封装好的自定义函数,默认适配英文版本net命令输出,中文环境仅需调整字段匹配关键词即可:

function Get-DomainUserBasicInfo {
    param(
        [Parameter(Mandatory = $true)]
        [string]$Username
    )

    # 执行域用户查询,捕获标准输出和错误输出
    $queryOutput = net user $Username /dom 2>&1
    # 命令执行失败直接返回错误
    if ($LASTEXITCODE -ne 0) {
        Write-Error "用户[$Username]查询失败,请检查用户名正确性、域连接状态"
        return $null
    }

    # 初始化要提取的字段集合
    $result = [ordered]@{
        Username        = $Username
        FullName        = $null
        AccountEnabled  = $null
        AccountLocked   = $null
        LastLogon       = $null
        PwdLastSet      = $null
        PwdExpireDate   = $null
        DomainGroups    = $null
    }

    # 逐行解析输出内容
    foreach ($line in $queryOutput) {
        # 跳过空行、纯分隔线行
        if ([string]::IsNullOrWhiteSpace($line) -or $line -match '^-+$') {
            continue
        }
        # 按连续2个及以上空格拆分每行,自动跳过无意义的空白片段
        $lineSegments = $line -split '\s{2,}' | Where-Object { -not [string]::IsNullOrWhiteSpace($_.Trim()) }
        if ($lineSegments.Count -lt 2) {
            continue
        }

        # 匹配对应字段赋值
        switch ($lineSegments[0].Trim()) {
            'Full Name' { $result.FullName = $lineSegments[1].Trim() }
            'Account active' { $result.AccountEnabled = ($lineSegments[1].Trim() -eq 'Yes') }
            'Account locked' { $result.AccountLocked = ($lineSegments[1].Trim() -eq 'Yes') }
            'Last logon' { $result.LastLogon = $lineSegments[1].Trim() }
            'Password last set' { $result.PwdLastSet = $lineSegments[1].Trim() }
            'Password expires' { $result.PwdExpireDate = $lineSegments[1].Trim() }
            'Global Group memberships' {
                $result.DomainGroups = $lineSegments[1].Trim() -split '\s+' | Where-Object { $_ -ne '' }
            }
        }
    }

    # 返回结构化对象,方便后续属性调用
    return [PSCustomObject]$result
}
调用方式

将上述函数加载到当前PowerShell会话后,可直接按如下方式调用,提取的字段会存入变量供后续操作使用:

# 查询指定用户信息,存入$user变量
$user = Get-DomainUserBasicInfo -Username "zhangsan"

# 直接调用提取到的字段
if ($null -ne $user) {
    Write-Host "用户全名:$($user.FullName)"
    Write-Host "账户是否启用:$($user.AccountEnabled)"
    Write-Host "账户是否锁定:$($user.AccountLocked)"
    Write-Host "上次登录时间:$($user.LastLogon)"
    # 后续其他命令可直接传$user下的属性作为参数,不需要重复执行net命令
}
适配注意事项

若本地环境是中文系统/中文域控,执行net user <测试用户名> /dom查看输出的实际字段名(例如中文环境下「Full Name」对应「全名」、「Account active」对应「账户活动」),替换函数switch块中对应的匹配字符串即可,解析逻辑无需修改。
所有代码均使用PowerShell 5.1基础语法,无第三方模块依赖、无受限API调用,可在约束语言模式下正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:06:19