如何将Get-NTFSAccess输出的Applies to列值读取到变量中?
解决Get-NTFSAccess读取"Applies to"列失败的问题
问题原因
Get-NTFSAccess返回的对象中,显示的列名"Applies to"是友好显示名称,并非对象的实际属性名,直接用该名称读取自然无法获取值。
解决步骤
- 确认实际属性名
运行以下命令,查看返回对象的所有属性:
$acl | Get-Member -MemberType Property
在输出中,你会发现对应"Applies to"列的实际属性名为AccessScope(这是NTFSSecurity模块中FileSystemAccessRule2对象的标准属性)。
也可以直接查看单个对象的所有属性值,进一步验证:
$acl[0] | Select-Object *
- 修改代码中的属性引用
将原代码里的$record."Applies to"替换为实际属性名$record.AccessScope,修改后的完整代码如下:
$Object = "C:\temp\testfolder" $acl = Get-NTFSAccess -Path $Object $results = @() # 初始化结果数组,避免未定义报错 foreach ($record in $acl) { $result = [PSCustomObject]@{ FilePath = $Object Principal = $record.Account Type = $record.AccessControlType Access = $record.AccessRights Inherited = $record.IsInherited InheritedFrom = $record.InheritedFrom Scope = $record.AccessScope } $results += $result }
额外提示
如果后续遇到类似属性读取失败的情况,都可以通过Get-Member或Select-Object *来确认对象的真实属性名,避免被友好显示名称误导。
内容的提问来源于stack exchange,提问作者Reddy
相关产品推荐
相关产品推荐

