Powershell按特定所有者列出文件

Powershell按特定所有者列出文件,powershell,powershell-2.0,powershell-3.0,Powershell,Powershell 2.0,Powershell 3.0,我是初学者。 如何修改此脚本以列出特定用户拥有的文件,而不是列出每个文件。例如,我只想看到用户johndoe拥有的文件 Set-StrictMode -Version Latest $files = Get-ChildItem foreach($file in $files) {$owner=(Get-Acl $file).Owner $file | Add-Member NoteProperty Owner $owner $file} 非常感谢您的帮助。尝试以下方法: $files = Ge

我是初学者。 如何修改此脚本以列出特定用户拥有的文件,而不是列出每个文件。例如,我只想看到用户johndoe拥有的文件

Set-StrictMode -Version Latest $files = Get-ChildItem foreach($file in $files) {$owner=(Get-Acl $file).Owner $file | Add-Member NoteProperty Owner $owner $file}

非常感谢您的帮助。

尝试以下方法:

$files = Get-ChildItem | Select *,@{n='Owner';e={(Get-Acl $_).Owner}} | 
             Where {!$_.PSIsContainer -and ($_.Owner -eq 'Domain\name')}
在V3上,您可以将其简化为:

$files = Get-ChildItem -File | Select *,@{n='Owner';e={(Get-Acl $_).Owner}} | 
             Where {$_.Owner -eq 'Domain\name'}
这可能更快:

$Owner = 'user1'
$SID = (Get-ADUser $Owner).sid

Get-ChildItem | 
where { (Get-Acl $_).sddl -like "O:$SID*" } |
select *,@{l='Owner';e={$Owner}} 

ACL存储为SDDL字符串。文件所有者的SID将始终位于SDDL字符串的开头,前缀为O:。NTFS必须将SID解析为所有者名称。与查找然后匹配名称相比,为SID执行字符串匹配所需的时间更少。这并不多,仅仅做一个文件或10个文件也不会有多大区别,但当你开始做成千上万个文件时,它就开始累积起来了

我发现最简单的方法是:

Get-ChildItem | Get-Acl | Where-Object { $_.Owner -match 'Domain\username' }

另一个变体,但使用.NET的
File.GetAccessControl
而不是
Get-Acl
cmdlet

归功于

getchilditem-File |选择对象全名、LastAccessTime、LastWriteTime、CreationTime、@{N='Owner';E={$\u0.GetAccessControl().Owner}
Get-ChildItem <path> -File | Select-Object fullname, LastAccessTime, LastWriteTime, CreationTime, @{N='Owner';E={$_.GetAccessControl().Owner}}