2014-06-23 111 views
0

我有一个powershell脚本运行并获得服务器的安全权限,并在csv中输出这些脚本。目前它输出的信息,但每个文件它读取它包括头帐户,Ace字符串和对象路径再次:我如何删除所以它只显示在文档的开始?Powershell脚本输出csv文件重构

帐户,王牌字符串,对象路径 NT AUTHORITY \ SYSTEM,允许FullControl,(继承),C:\用户\ munjanga \文档\ Operations Orchestration的\码头 BUILTIN \管理员,允许FullControl,(继承) ,C:\用户\ munjanga \文档\ Operations Orchestration的\码头 EMEA \ munjanga,允许FullControl,(继承),C:\用户\ munjanga \文档\ Operations Orchestration的\码头 帐户,王牌字符串,对象路径 NT AUTHORITY \ SYSTEM,允许FullControl,(继承),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} 
+0

您目前在两个不同的地方获得不同的标题。 'Add-Content'这一行是在文件顶部添加'$ Header'值,然后'ConvertTo-Csv'从'Get-Acl'和其后添加额外的头文件。你想要两个吗?或者只是顶部的标题? –

+0

我只想让文件顶部的标题保留下来,怎么做?它只是简单地删除convertTocsv? – user3738022

回答

0

让我们来看看,如果这个工程:

@{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。

+0

好,所以它摆脱它们,但现在它显示的标题:文件夹路径,IdentityReference,AccessControlType,IsInherited,InheritanceFlags,PropagationFlags而不是(文件夹,ace路径和对象路径) – user3738022

+0

正确的,这是由行2和4在你的代码中。如果你想改变头文件,你可以编辑第2行中的'$ Headers'字符串。 –

+0

多数民众赞成在工作,但现在的“”标记全部回来的文件:( – user3738022