Назад | Перейти на главную страницу

Powershell - передача связанных переменных из списка

Я пытаюсь экспортировать список разрешений 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"
}