在PowerShell中解析各种文件类型是否可行?

时间:2019-07-16 21:20:34

标签: powershell parsing character-encoding

我正在编写一个脚本,该脚本可以搜索各种文件位置,并将文件路径和副本存储到SharePoint网站(如果它与某些用户输入匹配)。

这些输入包括:文件名,文件类型和创建日期。

根据我的问题,我正在尝试添加一个参数,该参数通过解析文件内容来缩小文件范围,但似乎遇到了麻烦。

这是我到目前为止解析文件的内容:

$local_files存储Get-ChildItem的返回值(gci使用类型/名称/日期作为参数)。

$search_parameters[3]等同于:

$Content -like "*test*" -or $Content -like "*help*" # user input put into wildcard
foreach ($Location in $local_files) {
    $Content = Get-Content -Path $Location.FullName -Raw

    if (Invoke-Expression $search_parameters[3]) {
        Write-Host -Object ('File ({0}) matched file content search terms' -f $Location.FullName)
        #Leave location in array
    } else {
        #if content not in file
        #remove that location from the array
        $local_files = $local_files | ? {$_.FullName -ne "$Location"}
        Write-Host -Object ('File ({0}) did not match file content search terms - removed' -f $Location.FullName)
    }

这似乎适用于.txt文件,但是只要遇到.txt文件以外的任何其他内容,它就不会...

示例:

这是.txt文件的结果:

[DBG]: PS C:\Users\Sgouldin\Desktop\PPB\Scripts\General + Test>> $Content
SharePoint

这是.docx文件的结果:

[DBG]: PS C:\Users\Sgouldin\Desktop\PPB\Scripts\General + Test>> $Content
Oœ£œƒXø

我已经对导致此问题的原因进行了一些研究,据我了解,这是由于.docx与.txt编码不同。另一篇文章的答案是有人说.docx是隐藏的zip文件,解压缩后会提供XML文件列表(UTF8编码)。

我尝试将编码参数添加到我的Get-Content调用中,但没有成功

$Content = Get-Content -Path $Location.FullName -Encoding "UTF8" -Raw

但是,我确实找到了一种允许我解析.docx文件的方法:

#Instance of word
$Word = New-Object -ComObject Word.Application
$Word.Visible = $false

#take list of .docx
Get-ChildItem "c:\temp" -File -Filter "*.docx" | %{
    $Filename = $_.FullName

    #open file and take content of word file
    $Document = $Word.Documents.Open($Filename, $false, $true)
    $range = $document.Content

    #if content have your word, print path of word file
    if ($range.Text -like "*tot*") {
        $Filename
    }

    $word.Documents.Close($false)
}

回到我的问题:有没有一种可靠/合理的方式可以搜索不同类型文件的内容?

我可以使用上面的方法来处理.docx文件,但这是一个额外的步骤,并且存在数量未知的.docx文件,更不用说未知数量的扩展名为.docx和.docx以外的文件了.txt。

0 个答案:

没有答案