Реструктуризация выходного CSV-файла скрипта Powershell

#powershell

#powershell

Вопрос:

У меня есть сценарии powershell, которые запускаются и получают разрешения безопасности на сервере и выводят их в формате csv. На данный момент он выводит информацию, но с каждым прочитанным файлом она снова включает учетную запись заголовка, строку Ace и путь к объекту: как мне удалить, чтобы она отображалась только в начале документа?

Учетная запись, строка Ace, путь к объекту NT AUTHORITY SYSTEM, разрешить полный контроль (наследуется),C:UsersmunjangaDocumentsOperations Оркестровка ВСТРОЕННЫЙ причал Администраторы, Разрешить полный контроль, (унаследованный),C:UsersmunjangaDocumentsOperations Оркестровка jetty EMEAmunjanga, Разрешить полный контроль, (наследуется),C:UsersmunjangaDocumentsOperations Оркестровка Учетная запись jetty, Строка Ace, Путь к объектуNT AUTHORITY SYSTEM, разрешить полный контроль, (унаследованный),C:UsersmunjangaDocumentsOperations Оркестровкаjre1.6

     $OutFile = "C:UsersmunjangaDocumentsAoN ProjectExecute$([Environment]::MachineName).txt"  
$Header = "Folder Path,IdentityReference,AccessControlType,IsInherited,InheritanceFlags,PropagationFlags"
Del $OutFile
Add-Content -Value $Header -Path $OutFile 

$RootPath = "C:UsersmunjangaDocumentsOperations Orchestration"

$Folders = dir $RootPath -recurse | where {$_.psiscontainer -eq $true}

$isInherited = @{
 $true  = 'Inherited'
 $false = 'Not Inherited'
}

$inheritance = @{
 0 = 'files only'
 1 = 'this folder and subfolders'
 2 = 'this folder and files'
  3 = 'subfolders and files'
}

$fldr = $Folder.FullName

$Folders | % {
$fldr = $_.FullName
Get-Acl $fldr | select -Expand Access |
 select @{n='Account';e={$_.IdentityReference}},
     @{n='Ace String';e={"{0} {1}, {2} ({3})" -f $_.AccessControlType,
       $_.FileSystemRights, $inheritance[$_.InheritanceFlags],
       $isInherited[$_.IsInherited]}},
    @{n='Object Path';e={$fldr}} | ConvertTo-Csv -NoTypeInformation | % {$_ -replace '"', ""} | Out-File $OutFile -Force -Encoding ascii -Append}
 

Комментарии:

1. В данный момент вы получаете разные заголовки из двух разных мест. Add-Content Строка добавляет $Header значения в начало файла, а затем ConvertTo-Csv добавляет дополнительные заголовки из Get-Acl и после. Вам нужно и то, и другое? Или только заголовки вверху?

2. Я просто хочу, чтобы заголовок в верхней части файла оставался, как это сделать? это просто удаление convertTocsv?

Ответ №1:

Давайте посмотрим, работает ли это:

 @{n='Object Path';e={$fldr}} | ConvertTo-Csv -NoTypeInformation | Select -Skip 1 | % {$_ -replace '"', ""} | Out-File $OutFile -Force -Encoding ascii -Append
 

Ключевой бит находится Select -Skip 1 после ConvertTo-Csv фрагмента.

Редактировать:

После более тщательного обдумывания этого вопроса здесь есть лучший ответ. Последняя строка должна выглядеть примерно так:

 @{n='Object Path';e={$fldr}}} | ConvertTo-Csv -NoTypeInformation | % {$_ -replace '"', ""} | Out-File $OutFile -Force -Encoding ascii -Append
 

Этот цикл должен быть закрыт перед преобразованием в CSV.

Комментарии:

1. итак, он избавляется от них, но теперь для заголовков, которые он показывает: путь к папке, IdentityReference,AccessControlType,IsInherited,InheritanceFlags, PropagationFlags вместо (папка, путь к ace и путь к объекту)

2. Правильно, это делается строками 2 и 4 в вашем коде. Если вы хотите изменить заголовки, вы можете отредактировать $Headers строку в строке 2.

3. это сработало, но теперь все метки » » вернулись в файл 🙁

4. все в порядке, не знаю, что «» вернулось, я повторно запустил его, и теперь все в порядке