【问题标题】:Find files on windows created by user在用户创建的窗口上查找文件
【发布时间】:2012-12-05 17:13:58
【问题描述】:

作为我公司文档清理工作的一部分,我被要求找到以下问题的解决方案。我们希望为我们的(非常非技术人员)用户群提供一种在共享驱动器上查找自己的文件的方法。它应该是按需的,这意味着用户可以在他们认为合适并看到实时结果时使用该解决方案。

我们有一个文件hard disk management tool ,所以我可以针对该工具的数据库编写一个存储过程并返回其中包含的数据,但是这种方法有几个缺点:

  • 对用户不友好(同样,技术挑战用户群)
  • 数据最长可达一周前
  • 难以实施“按需”策略

理想情况下,有一个 Windows 实用程序,例如 Windows 资源管理器中的搜索栏,用户可以在其中输入他们的凭据,它会返回他们拥有的文件列表。

下一个最好的工具是罐装工具 - 有什么工具能想到吗?

或者,这是一个自己动手的解决方案。如果是 RYO,什么工具最好?我们是 .Net 商店,但我更喜欢 python。我不知道任何 .net 并且是 python 的初学者。我的老板建议使用powershell,但我对此一无所知。

需要考虑的另一件事:用户拥有 XP Professional 桌面,但我们将在未来几个月的某个时间迁移到 Windows 7。

有什么建议吗? TIA。

【问题讨论】:

  • 我认为第一步是要非常清楚你所说的“他们自己的文件”是什么意思。您是指 ACL 将其作为所有者的文件吗?
  • 是的,该人 (ID) 是所有者(或已对其进行修改,如果该数据可用)。
  • 如果不启用审核,我认为您永远不会知道修改。我将发布基于 ACL 的 powershell 解决方案

标签: python .net windows powershell


【解决方案1】:

您提出不使用现有管理工具的原因之一是非技术用户的困难。需要明确的是,这是一个演示问题,而不是技术问题。这是一个示例,用于确定用户在他们自己的硬盘上拥有哪些文件的所有权。您需要根据您的具体情况接受并修改它。您还需要确定如何以符合用户需求的方式呈现它。

ls C:\* -rec | %{if($_.GetAccessControl().Owner -like '*USERNAME*'){'{0} - {1}' -f $_.Name, $_.Getaccesscontrol().owner}}

这里有更多的脚本化和更少的单一(我喜欢编造文字)以及快速而肮脏的显示。它将从您为其提供的任何搜索根递归搜索当前登录用户拥有的文件。

$result = @()
$user = '*{0}*' -f $env:USERNAME
$searchRoot = 'G:\'
$files = Get-ChildItem $searchRoot -recurse | Where-Object{$_.GetAccessControl().Owner -like $user}
foreach ($file in $files){
    $temp = New-Object PSCustomObject -Prop @{'Name' = $file.Name;
                                              'Path' = $file.Directory;
                                              'Owner' = $file.GetAccessControl().Owner
    }
    $result += $temp
}
$result | Out-GridView

【讨论】:

  • 谢谢。我同意,我们可以将数据创建与数据交付分开,但考虑到我的技能和前端机制知识,这是个问题。您对我可以与此 powershell 代码结合使用的 GUI 前端有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-26
  • 2017-06-07
  • 1970-01-01
相关资源
最近更新 更多