【问题标题】:Powershell list files by particular ownerPowershell 按特定所有者列出文件
【发布时间】:2014-07-08 04:10:30
【问题描述】:

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

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

非常感谢您的帮助。

【问题讨论】:

    标签: powershell powershell-2.0 powershell-3.0


    【解决方案1】:

    试试这样的:

    $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'}
    

    【讨论】:

      【解决方案2】:

      这可能会更快:

      $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 个文件不会有太大的区别,但是当你开始做数千个文件时,它就会开始累加起来。

      【讨论】:

        【解决方案3】:

        我发现的最简单的是:

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

        【讨论】:

          【解决方案4】:

          另一个变体,但使用 .NET 的 File.GetAccessControl https://docs.microsoft.com/en-us/dotnet/api/system.io.file.getaccesscontrol?view=netframework-4.8 而不是 Get-Acl cmdlet。

          感谢Get File Owner/Author

          Get-ChildItem <path> -File | Select-Object fullname, LastAccessTime, LastWriteTime, CreationTime, @{N='Owner';E={$_.GetAccessControl().Owner}}
          

          【讨论】:

            猜你喜欢
            • 2016-08-23
            • 1970-01-01
            • 1970-01-01
            • 2014-09-08
            • 1970-01-01
            • 2022-01-27
            • 2013-10-15
            • 1970-01-01
            • 2022-08-11
            相关资源
            最近更新 更多