如何从文本文件中读取共享列表中的NTFS权限
我试图让它更容易使用文件服务器上。 我想导入一个名为shares.txt
的文件。 在那个shares.txt
有例如行,例如文件夹名称→根文件夹和共享名称→子文件夹。
\\10.10.15.240\folder name\share name \\10.10.15.240\folder name\share2 name \\10.10.15.240\folder name\share3 name \\10.10.15.240\folder2 name\share name \\10.10.15.240\folder2 name\share2 name \\10.10.15.240\folder2 name\share3 name
等等。
我想创build输出到:将数据输出到\\10.10.15.240\output\
上的文本文件,使用文件夹名称和共享名称作为文件名的一部分
\\10.10.15.240\output\Company_name_$folder name_$share name.csv \\10.10.15.240\output\Company_name_$folder name_$share2 name.csv \\10.10.15.240\output\Company_name_$folder name_$share3 name.csv \\10.10.15.240\output\Company_name_$folder2 name_$share name.csv \\10.10.15.240\output\Company_name_$folder2 name_$share2 name.csv \\10.10.15.240\output\Company_name_$folder2 name_$share3 name.csv
并继续。
你知道如何在你的脚本中导入? 我尝试了几件事,但他们都出现了错误。
脚本:
我想将权限列表写入CSV文件,而不是直接写入Excel。
$ErrorActionPreference = "SilentlyContinue" $a = New-Object -ComObject Excel.Application $a.visible = $true $b = $a.Workbooks.Add() $intRow = 1 $c = $b.Worksheets.Item(1) $c.Cells.Item($intRow,1) = "Folder" $c.Cells.Item($intRow,2) = "Compte/groupe" $c.Cells.Item($intRow,3) = "Type d'Acces" $c.Cells.Item($intRow,4) = "Droits" $d = $c.UsedRange $d.EntireColumn.AutoFit()|Out-Null $d.Interior.ColorIndex = 19 $d.Font.ColorIndex = 11 $d.Font.Bold = $true Remove-Variable arrayOfPath $depth = 2 $RootFolder = "\\MySRV\Folder" for ($i=0; $i -le $depth; $i++) { $arrayOfPath += ,$RootFolder $RootFolder = $RootFolder + "\*" } $arrayOfPath | Get-ChildItem | %{ Get-Acl $_.FullName } | %{ $intRow = $intRow + 1 $c.Cells.Item($intRow, 1) = $_.Path.ToString().Replace("Microsoft.PowerShell.Core\FileSystem::", "") $droit = $_.Access $droit | %{ $c.Cells.Item($intRow, 2) = $_.IdentityReference.ToString(); $c.Cells.Item($intRow, 3) = $_.AccessControlType.ToString(); $c.Cells.Item($intRow, 4) = $_.FileSystemRights.ToString(); $intRow = $intRow+1 } } $d.EntireColumn.AutoFit() | Out-Null
最后更新:
$arrayOfPaths= Get-Content "\\UNC PATH\myfile.txt" Get-ChildItem $arrayOfPaths -Recurse | Where-Object {$_.mode -match "d"} | ForEach-Object { $csv = $_.FullName -replace '^\\\\[^\\]+\\([^\\]+)\\(.*)', '\\UNC PATH\Company_name_${1}_${2}.csv' # <- construct CSV path here $path = $_.FullName Get-Acl $path | Select-Object -Expand Access | Select-Object @{n='Path';e={$path}}, IdentityReference, AccessControlType, FileSystemRights | Export-Csv $csv -Append -NoType }
基本上你会做这样的事情:
- 循环path
- 获取每个文件夹的ACL
- 扩展ACE
- select您想要导出的ACE属性
- 添加一个计算属性的path
- 将选定的属性导出到CSV
在循环内附加输出CSV(s)允许您控制每个ACL导出到哪个文件。 例如,可以使文件名取决于源path的元素,或者已经写入的元素的数量(如果添加计数器variables)。
Get-ChildItem $arrayOfPaths | ForEach-Object { $csv = "..." # <- construct CSV path here $path = $_.FullName Get-Acl $path | Select-Object -Expand Access | Select-Object @{n='Path';e={$path}}, IdentityReference, AccessControlType, FileSystemRights | Export-Csv $csv -Append -NoType } }
请注意, -Append
已添加到PowerShell v3中的Export-Csv
。 在早期版本中,您可以使用ConvertTo-Csv
和Add-Content
来模拟它。