【问题标题】:Powershell script output csv file restructurePowershell脚本输出csv文件重组
【发布时间】:2014-06-23 23:35:49
【问题描述】:

我有一个 powershell 脚本,可以在服务器中运行并获取安全权限,并将这些脚本输出到 csv 中。目前它正在输出信息,但它读取的每个文件都再次包含标题 Account、Ace String 和 Object Path:我如何删除它只在文档开头显示它?

帐户、Ace 字符串、对象路径 NT AUTHORITY\SYSTEM,Allow FullControl, (Inherited),C:\Users\munjanga\Documents\Operations Orchestration\jetty BUILTIN\Administrators,Allow FullControl, (Inherited),C:\Users\munjanga\Documents\Operations Orchestration\jetty EMEA\munjanga,Allow FullControl, (Inherited),C:\Users\munjanga\Documents\Operations Orchestration\jetty 帐户、Ace 字符串、对象路径 NT AUTHORITY\SYSTEM,Allow FullControl, (Inherited),C:\Users\munjanga\Documents\Operations Orchestration\jre1.6

    $OutFile = "C:\Users\munjanga\Documents\AoN Project\Execute\$([Environment]::MachineName).txt"  
$Header = "Folder Path,IdentityReference,AccessControlType,IsInherited,InheritanceFlags,PropagationFlags"
Del $OutFile
Add-Content -Value $Header -Path $OutFile 

$RootPath = "C:\Users\munjanga\Documents\Operations 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}

【问题讨论】:

  • 你现在从两个不同的地方得到不同的标题。 Add-Content 行在文件顶部添加 $Header 值,然后 ConvertTo-Csv 正在添加来自 Get-Acl 的附加标头及后续。你两个都想要吗?还是只是顶部的标题?
  • 我只想保留文件顶部的标题,怎么做?它只是删除 convertTocsv 吗?

标签: powershell


【解决方案1】:

让我们看看这是否有效:

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

关键位是ConvertTo-Csv 之后的Select -Skip 1

编辑:

经过更多思考之后,这里有一个更好的答案。最后一行应该是这样的:

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

该循环应该在转换为 CSV 之前关闭。

【讨论】:

  • 好的,所以它摆脱了它们,但现在它显示的标题:文件夹路径,身份引用,AccessControlType,IsInherited,InheritanceFlags,PropagationFlags 而不是(文件夹,ace路径和对象路径)
  • 对,这是通过代码中的第 2 行和第 4 行完成的。如果要更改标题,可以编辑第 2 行中的 $Headers 字符串。
  • 这已经奏效了,但是现在文件中的“”标记都回来了:(
  • 它很好不知道“”已经回来了,我重新运行它,现在它很好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
  • 2019-10-07
相关资源
最近更新 更多