2016-09-13 51 views
1
替換文本從格式列表

我運行下面的命令來獲取文件權限一個非常基本的審計PS:如何輸出在PowerShell中

Get-ChildItem -Directory E:\*,E:\*\*,E:\*\*\* | 
Get-Acl | Format-list Path,AccessToString | 
Out-File -Filepath c:\myfile.txt 

Format-List輸出包含在我想要的路徑信息去除,即Microsoft.PowerShell.Core\FileSystem::

但如果我在輸出文件管道之前添加{$_ -replace "Microsoft.PowerShell.Core\FileSystem::",""}我得到錯誤。

有沒有辦法通過管道輸出解析出這些數據,還是我必須創建一個函數?

回答

2

替代格式列表中的內容可以使用Convert-Path

Get-ChildItem -Directory C:\*,C:\*\*,C:\*\*\* | 
Get-Acl | Format-list @{N="Path";E={Convert-Path $_.Path}},AccessToString | 
Out-File -Filepath c:\myfile.txt 
+0

這一個工作最好。你能給我一個故障嗎? – Tensigh

+0

該解決方案的要點與使用計算屬性的礦相同,但以更簡潔的方式並使用更合適的方法。您需要的所有分解都是查看計算屬性的工作原理,但實質上它只是評估表達式並將其輸出爲您提供的名稱/標籤。表達式可以像你喜歡的那樣複雜,名字/標籤可以是你想要的任何東西。 –

2

你可以內嵌使用這樣

@{Label="Path"; Expression={$_.path.Replace("Microsoft.PowerShell.Core\FileSystem::", "")}} 

你的命令計算特性就成爲

Get-ChildItem -Directory C:\* | 
Get-acl | 
Format-List @{Label="Path"; Expression={$_.path.Replace("Microsoft.PowerShell.Core\FileSystem::", "")}}, accesstostring | 
Out-File -filepath c:\myfile.txt 
+0

這工作很好,你能給我一個故障嗎?這在其他情況下會非常有用,但我認爲Avshalom的答案更簡潔。不過,這非常有幫助,謝謝! – Tensigh