Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search Powershell:搜索文件内容并将结果写入文本文件_Search_Powershell - Fatal编程技术网

Search Powershell:搜索文件内容并将结果写入文本文件

Search Powershell:搜索文件内容并将结果写入文本文件,search,powershell,Search,Powershell,我是powershell的新手,所以我不知道从哪里开始。我想要一个脚本,在所有(pdf、word、Excel、powerpoint等)文件内容中搜索特定的字符串组合 我尝试了这个脚本,但不起作用: function WordSearch ($sample, $staining, $sampleID, $patientID, $folder) { $objConnection = New-Object -com ADODB.Connection $objRecordSet = New-Object

我是powershell的新手,所以我不知道从哪里开始。我想要一个脚本,在所有(pdf、word、Excel、powerpoint等)文件内容中搜索特定的字符串组合

我尝试了这个脚本,但不起作用:

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()
}
}

有人能帮我吗?

你应该试试这个,但首先要确保你在你想要开始搜索的文件夹中:(如果你试图搜索整个计算机,请从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"}

这将为您提供该字符串在这些文件中存在的所有行和路径。由于microsoft对其文件进行加密,您获得的实际行输出可能有点失真。使用
$array | get member-MemberType属性
查找您可以索引到的项目,并使用
选择对象
命令提取这些项目项目输出。

为什么不使用
选择字符串
?@C.B.因为这对文本文件很有效,但是当你想在.doc或特别是.docx中搜索时,它就不起作用了。这对文本文件、xls等很有效……但是在docx上使用它,它就不起作用了。为什么不呢?你有没有用文本编辑器查看过docx文件?所有的文本仍然在文件中,它不在某个神奇的地方。Docx只是有很多额外的元数据用于格式化、图片等。但是所有文本仍然可以搜索。试试看。你所说的是真的。doc在我的系统上,我可以看到原始文本,它与所有其他符号和垃圾混合在一起,但我的.Docx文件不是这样的我明白你的意思了。我想你必须在winword中打开文件,然后以文档的形式重新保存才能让它工作