2012-07-19 99 views
1

我是新來的PowerShell,所以我不知道從哪裏開始。我想要一個能夠搜索特定字符串組合(pdf,word,excell,powerpoint,...)文件內容的腳本。Powershell:搜索文件的內容並將結果寫入文本文件

我想這個劇本,但它不工作:

function WordSearch ($sample, $staining, $sampleID, $patientID, $folder) 
{ 
$objConnection = New-Object -com ADODB.Connection 
$objRecordSet = New-Object -com ADODB.Recordset 
$objConnection.Open(「Provider=Search.CollatorDSO;Extended Properties=’Application=Windows’;」) 
$objRecordSet.Open(「SELECT System.ItemPathDisplay FROM SYSTEMINDEX WHERE ((Contains(Contents,’$sample’)) or (Contains(Contents,’$sampleID’) and Contains(Contents,’$staining’)) or (Contains(Contents,’$staining’) and Contains(Contents,’$patientID’))) AND System.ItemPathDisplay LIKE ‘$folder\%’」, $objConnection) 
if ($objRecordSet.EOF -eq $false) {$objRecordSet.MoveFirst() } 

while ($objRecordset.EOF -ne $true) { 
$objRecordset.Fields.Item(「System.ItemPathDisplay」).Value 
$objRecordset.MoveNext() 
} 
} 

有人能幫助我嗎?

+0

爲什麼不使用'select-string'? – 2012-07-19 12:16:54

+0

@ C.B。因爲這適用於文本文件,但是當您想在.doc或特別是.docx中搜索時,它不起作用。 – 2013-08-23 14:22:39

回答

0

你應該試試這個,但首先確保你的文件夾要開始搜索下來:(如果你想搜索你的整個計算機,從C:\開始,但我想象腳本將花費相當可觀的金額時間的運行。

$Paths = @()  
$Paths = gci . *.* -rec | where { ! $_.PSIsContainer } |? {($_.Extension -eq ".doc") -or ($_.Extension -eq ".ppt") -or ($_.Extension -eq ".pdf") -or ($_.Extension -eq ".xls")} | resolve-path 

這將檢索的文件類型的所有文件路徑,如果您有Microsoft Office 2007或以上,你可能需要添加搜索「的.xlsx」或「.DOCX」或「 .pptx「

然後,您可以開始查看這些文件以查找」特定字符串組合

array = @() 
foreach($path in $Paths) 
{$array += Select-String -Path $Path -Pattern "Search String"} 

這將爲您提供該字符串在這些文件中存在的所有行和路徑。由於微軟加密文件,你得到的實際行輸出可能會有點失真。使用$array | get-member -MemberType Property可以找到您可以編入索引的項目,並使用Select-object命令行工具將這些項目取出。

+0

這對於文本文件,xls等工作正常......但在docx上使用它並且不起作用。 – 2013-08-23 14:23:52

+0

爲什麼不呢?你有沒有用文本編輯器查看過docx文件?所有的文本仍然在文件中,它不在一些神奇的地方。 Docx在格式化,圖片等方面有很多額外的元數據。但是所有文字仍然可以搜索。嘗試一下。 – Cole9350 2013-08-23 15:01:22

+0

你說我的系統上的.doc是真的,我能夠看到原始文本都與其他所有符號和垃圾混合在一起,但這不適用於我的.docx文件 – 2013-08-23 15:29:35