![无法让 powershell 使用 ACL 返回 GCI 的结果](https://linux22.com/image/1410993/%E6%97%A0%E6%B3%95%E8%AE%A9%20powershell%20%E4%BD%BF%E7%94%A8%20ACL%20%E8%BF%94%E5%9B%9E%20GCI%20%E7%9A%84%E7%BB%93%E6%9E%9C.png)
我正在尝试让 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
使用{
和}
来定义脚本块。可以使用(
和对脚本块内的条件进行分组)
。