2012-10-18 24 views
0

我試圖讓文件夾信息和安全信息對我們的服務器上的所有文件夾。 但我在這裏不熟悉Powershell。介意幫助新手嗎?多個命令CSV如何管道文件[Powershell的]

怎麼辦,我得到安全ACL管道輸送到文本文件? 只有文件夾名稱,大小,子文件夾數量的成員對象?

# Step 1 Get Folder Path 
function Select-Folder($message='Select a folder', $path = 0) { 
    $object = New-Object -comObject Shell.Application 

    $folder = $object.BrowseForFolder(0, $message, 0, $path) 
    if ($folder -ne $null) { 
     $folder.self.Path 
    } 
} 


#Step 2:Search For Directories 
$dirToAudit = Get-ChildItem -Path (Select-Folder 'Select some folder!') -recurse | Where {$_.psIsContainer -eq $true} 

foreach ($dir in $dirToAudit) 
{ 

#Step 3: Output: [Folder Path, Name, Security Owner, Size, Folder Count] 
#Pipe To CSV Text File 
    Get-Acl -Path $dir.FullName | Select-Object PSPath, Path,Owner | export-csv C:\temp\SecurityData.csv 
    #I also want the Folder path, Size and SubFolder Count 
} 


#Step 4: Open in Excel 
invoke-item -path C:\temp\SecurityData.csv 

這裏的一些網站,我發現有用的主題:http://blogs.msdn.com/b/powershell/archive/2007/03/07/why-can-t-i-pipe-format-table-to-export-csv-and-get-something-useful.aspx

http://www.maxtblog.com/2010/09/to-use-psobject-add-member-or-not/

回答

1

這個任務是特別不容易。首先,您需要創建一個包含所需屬性的自定義對象。這些屬性將通過不同的命令添加例如:

$objs = Get-ChildItem . -r | 
      Where {$_.PSIsContainer} | 
      Foreach {new-object psobject -prop @{Path=$_.FullName;Name=$_.Name;FolderCount=$_.GetDirectories().Length}} 
$objs = $objs | Foreach { Add-Member NoteProperty Owner ((Get-Acl $_.Path).Owner) -Inp $_ -PassThru} 

$objs | Export-Csv C:\temp\data.csv 

獲取文件夾大小需要一些額外的工作來計算。

+0

原來是PSobject一個哈希表的數據類型呢? –

+0

再次感謝您的幫助! –

+1

PSObject可用於創建自定義對象,即可將屬性和方法添加到對象的位置。您也可以將其視爲創建記錄或結構的一種方式。 –