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

如何使用PowerShell检查Windows文件或文件夹的审核设置

批量验证Windows文件/文件夹的Everyone组Failure审核设置

需求描述

需要批量验证Windows系统中多个文件和文件夹,是否针对Everyone组的特定访问类型开启了**Failure(失败)**审核标记,避免手动逐个登录端点查看属性的繁琐操作。

原始PowerShell脚本

# 包含文件夹列表的输入文件
$folderListFile = ".\folder_list.txt"

# 读取文件夹列表到数组
$folderList = Get-Content $folderListFile
    
# 遍历列表中的每个文件夹
foreach ($folderPath in $folderList) {
  # 获取文件夹的审核规则
  $auditFlags = (Get-Acl $folderPath).Audit

  # 在控制台输出审核标记
  Write-Output "文件夹路径: $folderPath"
  Write-Output "审核标记: $($auditFlags.AuditToString())"
  Write-Output ""
}

folder_list.txt内容

C:\
C:\Windows
C:\Windows\System32

执行错误输出

PS P:\Scripts> .\Get-FolderAuditSettings.ps1
文件夹路径: C:\
无法对空值表达式调用方法。
At P:\Scripts\Get-FolderAuditSettings.ps1:14 char:32
+   Write-Output "审核标记: $($auditFlags.AuditToString())"
+                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

审核标记:

文件夹路径: C:\Windows
无法对空值表达式调用方法。
At P:\Scripts\Get-FolderAuditSettings.ps1:14 char:32
+   Write-Output "审核标记: $($auditFlags.AuditToString())"
+                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

审核标记:

文件夹路径: C:\Windows\System32
无法对空值表达式调用方法。
At P:\Scripts\Get-FolderAuditSettings.ps1:14 char:32
+   Write-Output "审核标记: $($auditFlags.AuditToString())"
+                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

问题原因

当目标文件夹未配置任何审核规则时,(Get-Acl $folderPath).Audit会返回空值,此时调用AuditToString()方法就会触发空值调用错误。此外,原始脚本未筛选出Everyone组的Failure规则,无法直接满足需求。

修正后的脚本

以下脚本会先判断审核规则是否存在,再筛选出Everyone组的Failure审核项,清晰输出符合需求的结果:

# 包含文件夹列表的输入文件
$folderListFile = ".\folder_list.txt"

# 读取文件夹列表到数组
$folderList = Get-Content $folderListFile

# 遍历列表中的每个路径(支持文件和文件夹)
foreach ($itemPath in $folderList) {
    Write-Output "=== 目标路径: $itemPath ==="
    
    # 检查路径是否存在
    if (-not (Test-Path $itemPath)) {
        Write-Output "⚠️ 路径不存在"
        Write-Output ""
        continue
    }

    # 获取对象的ACL审核规则
    $auditRules = (Get-Acl $itemPath).Audit

    if (-not $auditRules) {
        Write-Output "❌ 未配置任何审核规则"
    }
    else {
        # 筛选出Everyone组的Failure审核规则
        $everyoneFailureRules = $auditRules | Where-Object {
            $_.IdentityReference.Value -eq 'Everyone' -and $_.Failure -eq $true
        }

        if (-not $everyoneFailureRules) {
            Write-Output "❌ 未找到Everyone组的Failure审核规则"
        }
        else {
            Write-Output "✅ 找到Everyone组的Failure审核规则:"
            $everyoneFailureRules | ForEach-Object {
                Write-Output "  访问类型: $($_.FileSystemRights)"
                Write-Output "  应用到: $($_.InheritanceFlags)"
                Write-Output "  继承设置: $($_.PropagationFlags)"
                Write-Output ""
            }
        }
    }
    Write-Output ""
}

脚本说明

  1. 路径存在检查:先判断目标路径是否有效,避免无效路径的错误。
  2. 空值判断:当无审核规则时直接提示,避免空值调用错误。
  3. 精准筛选:只提取Everyone组且Failure为true的规则,直接匹配需求。
  4. 详细输出:展示访问类型、继承范围等关键信息,便于取证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:35:52