Я пытаюсь экспортировать список разрешений 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? У меня так много ограничений в этой области, что поиск в Google ведет меня слишком далеко.
ОБНОВЛЕНИЕ: я еще не решил мою заявленную проблему, но я значительно улучшил свой скрипт и полученный файл данных. Выяснилось, что мой вывод csv не работает, потому что я использовал «ft» вместо «select» для сетки данных. Я также удалил ненужную строку из вывода CSV с помощью «-notypeinformation» (или для краткости «-nti»)
(get-acl "E:\share\Legal").access | Select IdentityReference,FileSystemRights,AccessControlType,IsInherited,InheritanceFlags | Export-csv e:\report\legal.csv -nti
ОБНОВЛЕНИЕ 2: Ответ 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
Используйте модульный подход с переменными, массивами и циклом 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"
}