我正在尝试导出文件服务器上一组有限文件夹的格式化文件夹 ACL 权限列表。我有一个要从中读取权限的文件夹列表和一个要将 ACL 权限输出到的文件名列表。
Folder Name to report file
1) E:\share\Legal > D:\reports\legal.txt
2) E:\share\Ops > D:\reports\ops.txt
3) E:\share\Exec > D:\reports\exec.txt
我必须执行其中 150 个。
我有 powershell 命令,可以准确输出我需要的内容:
(get-acl "E:\share\Legal").access | ft IdentityReference,FileSystemRights,AccessControlType,IsInherited,InheritanceFlags -auto > e:\report\legal.txt
我知道我需要定义变量(即 $path)和另一个变量(即 $output),但如何将一个列表与另一个列表关联起来,以便正确的 $path 变量与相关的 $output 变量对齐?我在这方面有太多限制,以至于谷歌搜索让我无法理解。
更新:尚未解决我所述问题,但我已经大大改进了脚本和生成的数据文件。我发现我的 csv 输出失败是因为我对数据网格使用了“ft”而不是“select”。我还使用“-notypeinformation”(简称为“-nti”)从 CSV 输出中删除了一行不需要的行
(get-acl "E:\share\Legal").access | Select IdentityReference,FileSystemRights,AccessControlType,IsInherited,InheritanceFlags | Export-csv e:\report\legal.csv -nti
UPDATE2:LotPing 的回答包括我对原始脚本的回答后修改:
## Q:\Test\2018\06\23\sf_917865.ps1
$BaseDir = 'E:\share\'
$BaseRep = 'D:\reports\'
$Folders = @('Legal','Ops','Exec')
$Rights = @('IdentityReference',
'FileSystemRights',
'AccessControlType',
'IsInherited',
'InheritanceFlags')
ForEach ($Folder in $Folders){
(Get-Acl "$BaseDir$Folder").Access |
Select $Rights | Export-CSV "$BaseRep$Folder.csv" -nti
}
对于任何面临相同任务的人来说,我的任务的最后一部分是将所有这些输出文件作为单独的工作表导入到 Excel 工作簿中,我在 Excel 中使用此处的 VBA 脚本完成了此操作,https://www.extendoffice.com/documents/excel/3230-excel-import-multiple-csv-files.html#a1
答案1
采用变量、数组和 ForEach 循环的模块化方法。
## Q:\Test\2018\06\23\sf_917865.ps1
$BaseDir = 'E:\share\'
$BaseRep = 'D:\reports\'
$Folders = @('Legal','Ops','Exec')
$Rights = @('IdentityReference',
'FileSystemRights',
'AccessControlType',
'IsInherited',
'InheritanceFlags')
ForEach ($Folder in $Folders){
(Get-Acl "$BaseDir$Folder").Access |
Format-Table $Rights -auto > "$BaseRep$Folder.txt"
}