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

如何为PowerShell脚本添加筛选器,筛选SSO中停用超90天的账户

实现停用超90天账户的筛选逻辑

没问题,我来帮你调整脚本,实现只保留停用超过90天账户的需求。下面是具体的修改步骤和完整脚本片段:

关键修改思路

核心是先计算出90天前的时间阈值,再用这个阈值过滤掉停用时间不足90天的账户。需要注意字段的时区和格式匹配,避免筛选出错。

1. 生成90天前的时间阈值

先执行这行代码计算阈值,建议转成UTC时间(如果你的SSO返回的StatusChanged是UTC格式的话):

$ninetyDaysAgo = (Get-Date).AddDays(-90).ToUniversalTime()

如果StatusChanged是本地时间,直接去掉.ToUniversalTime()即可。

2. 筛选符合条件的用户

在获取到所有停用用户后,用Where-Object筛选出StatusChanged早于阈值的账户:

# 获取所有停用用户
$users = oktaListDeprovisionedUsers -oOrg PREV

# 计算时间阈值
$ninetyDaysAgo = (Get-Date).AddDays(-90).ToUniversalTime()

# 筛选停用超90天的用户
$filteredUsers = $users | Where-Object {
    # 确保StatusChanged能转换为DateTime类型(如果是字符串格式的话)
    $statusChangedDate = [DateTime]::Parse($_.StatusChanged)
    $statusChangedDate -lt $ninetyDaysAgo
}

3. 替换原有集合处理逻辑

把原来的$toexport初始化和后续操作,换成基于筛选后的$filteredUsers来处理:

$toexport = New-Object System.Collections.ArrayList
foreach ($user in $filteredUsers) {
    # 保留你原本的导出逻辑,比如提取需要的字段添加到集合
    $null = $toexport.Add($user)
}

完整修改后的脚本片段

# 获取企业SSO中的所有停用用户
$users = oktaListDeprovisionedUsers -oOrg PREV

# 计算90天前的UTC时间(根据实际时区调整)
$ninetyDaysAgo = (Get-Date).AddDays(-90).ToUniversalTime()

# 筛选停用超过90天的用户,添加异常处理避免解析失败
$filteredUsers = $users | Where-Object {
    try {
        $statusChangedDate = [DateTime]::Parse($_.StatusChanged)
        $statusChangedDate -lt $ninetyDaysAgo
    } catch {
        Write-Warning "无法解析用户 $($_.Id) 的停用日期:$($_.StatusChanged),已跳过该用户"
        $false
    }
}

# 初始化导出集合并处理筛选后的用户
$toexport = New-Object System.Collections.ArrayList
foreach ($user in $filteredUsers) {
    # 这里可以根据需求自定义导出字段
    $exportItem = [PSCustomObject]@{
        UserId = $user.Id
        Username = $user.Username
        StatusChanged = $user.StatusChanged
        # 其他需要导出的字段
    }
    $null = $toexport.Add($exportItem)
}

# 后续可将筛选结果传给删除脚本,建议先测试再执行删除
# foreach ($user in $filteredUsers) {
#     # 调用你的删除脚本逻辑
#     Remove-SSOUser -UserId $user.Id -Org PREV
# }

注意事项

  • 时区一致性:务必确认StatusChanged字段的时区,和$ninetyDaysAgo保持一致,否则会出现筛选偏差。
  • 字段格式兼容:如果StatusChanged是特殊格式的字符串,比如自定义日期格式,需要用[DateTime]::ParseExact()指定格式解析。
  • 安全验证:在执行删除操作前,一定要先打印$filteredUsers的数量和具体信息,确认筛选结果符合预期,避免误删有效账户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:16:37