无法让 powershell 使用 ACL 返回 GCI 的结果

无法让 powershell 使用 ACL 返回 GCI 的结果

我正在尝试让 Powershell 列出目录中早于特定日期并与特定用户匹配的文件。到目前为止,我已经获得了以下脚本,该脚本为我提供了早于特定日期的所有文件,并列出了目录及其所有者:

$date=get-date

$age=$date.AddDays(-30)

ls '\\server\share\folder' -File -Recurse | `
where {$_.lastwritetime -lt "$age"} | `
select-object $_.fullname,{(Get-ACL $_.FullName).Owner} | `
ft -AutoSize

但是,当我尝试使用附加的 where 参数来仅选择某个用户拥有的文件时,我根本没有得到任何结果,尽管我知道我应该得到结果,基于我试图获得的匹配(如下所示):

$date=get-date

$age=$date.AddDays(-30)

ls '\\server\share\folder' -File -Recurse | `
where ({$_.lastwritetime -lt "$age"} -and {{(get-acl $_.FullName).owner} -eq "domain\user"}) | `
select-object $_.fullname,{(Get-ACL $_.FullName).Owner} | `
ft -AutoSize

我是不是漏掉了什么?我不能像我尝试的那样在 where 条件下使用 get-acl 命令吗?

任何帮助,将不胜感激。

谢谢

答案1

这似乎有效。

# Get the full list of files
ls '\\server\share\folder' -File -Recurse |
# Limit to files with the right age and owner
where {($_.lastwritetime -lt "$age") -and ((get-acl $_.FullName).owner -eq "domain\user")} |
# Add an Owner column to the object
ForEach-Object {$_ | Add-Member -type NoteProperty -name Owner -value (Get-ACL $_.FullName).Owner -PassThru} |
# Get just the filename and the owner
select-object fullname, owner |
# Format the output
ft -AutoSize

另外,还有一些建议。

  • 您已在每行末尾使用了转义符。管道符可让您继续执行下一行,因此无需转义。
  • 另外,Where-Object使用{}来定义脚本块。可以使用(和对脚本块内的条件进行分组)

相关内容