【发布时间】:2017-03-15 08:56:47
【问题描述】:
这是我在 Stackoverflow 中的第一篇文章,多年来我一直在阅读许多精彩的问题、答案和其他各种帖子。我从这个奇妙的社区学到了很多东西。我希望现在我已经勇敢地迈出了真正的步伐,真正投入到 powershell 中并加入这个社区,我可能能够以某种方式做出贡献!
所以我开始着手一个项目,该项目处于基本核心级别 - 列出所有超过 7 年的文件,以便他们可以在可能的情况下查看和删除。
然而,我将整个脚本分成了几个阶段。我目前卡在第 2 阶段。
我已经被困了大约 2 天,对于你们中的许多 powershell 天才来说可能只需要 10 分钟就能弄清楚!
我必须为我的愚蠢和缺乏知识而道歉,我对 powershell 脚本的经验仅限于 5 个工作日,我目前正在潜心研究书籍并学习,但我也有工作要做所以不明白学习简单的方法!
我的脚本基本上有 3 个步骤;
运行顶级 DATA 文件夹的 Get-ACL 以创建对特定文件夹具有权限的所有组的列表。然后我想要么导出这些数据,要么只保留它以供下一步使用。
根据包含标记为角色的列的 CSV 过滤收集到的信息(角色将包含文件夹管理器专有的组),并检查此排他性组的固有成员(也许最后一点需要还要再迈出一步?)
存储或导出此排他成员列表及其相关文件夹,然后用作变量以发送包含需要删除的文件列表的电子邮件。
使用下面的脚本,我基本上停留在第 2 步以及如何从 CSV(或存储的变量?)创建过滤器并将其应用于 GET-ACL foreach 循环。我可能会使用正则表达式完全错误地解决这个问题,老实说,其中大部分是复制和粘贴以及在人们完成类似任务的互联网上阅读。如果这只是从一开始就采取的愚蠢方式,我再次道歉!
我要提前感谢大家提供的所有帮助、意见和建议,我会认真听取所有意见,我会尽我所能 - 我保证!
#$RoleList = import-csv "C:\DATA\scripts\GB_CMS\CSV\datafolders_rolelist.csv"
#foreach ($Manager in $RoleList) {
#$FolderManager = $RoleList.Role
$FolderManagers = Import-Csv C:\DATA\scripts\GB_CMS\CSV\datafolders_rolelist.csv | foreach {
New-Object PSObject -prop @{
Folder = $_.Folder;
Manager = $_.'Folder Manager';
Role = $_.Role
}
}
$Role = $FolderManagers.Role
$Role
gci "c:\DATA" | Where {$_.PSIsContainer} | get-acl |
ForEach $_.Name {
[regex]$regex="\w:\\\S+"
$path=$regex.match($_.Path).Value
$_ | select -expand access |
$
where {$_.identityreference -like "$Role"} |
Select @{Name="Path";Expression={$Path}},IdentityReference
}
谢谢, 丹尼尔。
【问题讨论】:
标签: powershell csv automation