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

如何使用PowerShell列出logonHours配置为登录被拒绝的AD用户

问题原因

AD的LogonHours属性本身是**字节数组(Byte[])**类型,你直接将其强制转换为[string]时,得到的是字节对应的ASCII字符拼接结果,而非空格分隔的数字字符串,和你提前定义的"0 0 0 ..."字符串格式完全不匹配,所以会出现匹配失败的情况。

解决方案

直接将基准匹配值定义为全0的21字节数组,再将两个字节数组统一转为空格分隔的数字串对比即可,同时可以优化查询逻辑避免重复请求AD。

修正后代码
# 定义全0的21字节基准值,对应所有时间段禁止登录
$disabledLogonHours = [byte[]]::CreateInstance([byte], 21)

# 如需查询所有用户用下面这行
Get-ADUser -Filter * -Properties LogonHours | ForEach-Object {
# 如需仅查询特定用户hugo,替换上面一行为:Get-ADUser -Identity hugo -Properties LogonHours | ForEach-Object {
    # 跳过未配置LogonHours的用户(默认允许全时段登录),如果需要包含这类可以去掉这个判断
    if ($null -eq $_.LogonHours) {
        return
    }
    # 对比字节数组转成的空格分隔字符串
    if (($_.LogonHours -join ' ') -eq ($disabledLogonHours -join ' ')) {
        Write-Host $_.SamAccountName "- Login disabled"
    }
}
注意事项
  • 21字节的全0数组刚好对应一周7天、每天24小时共168位的登录时间控制,每一位为0代表对应小时禁止登录,全0即完全禁止登录。
  • 如果需要包含未配置过LogonHours的用户(属性为$null),将代码中的$null判断去掉,同时调整匹配逻辑为$null -eq $_.LogonHours -or (...)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 21:33:02