需要查找文档中是否包含任何 IP 地址。 我们是否有任何 PowerShell 脚本/命令可以为任何文件类型执行此操作。 我发现很少有脚本仅适用于 .txt 文件。
答案 0 :(得分:0)
要在任何文件类型中搜索 IP 地址,您需要解决两个基本问题。
一,PowerShell 需要对任何文件类型的内容执行搜索。
二、搜索需要定义一个IP地址。
对于第一个问题,可以使用 Windows Search 搜索常见文件类型的内容。但是,Windows Search 没有搜索 IP 地址的实用方法。它擅长搜索人类可读的文本,如“苹果派”。它没有适用于 IP 地址的有用的 wild card 或 declarative 语法。就 Windows 搜索而言,您最好搜索“IP 地址”。
对于第二个问题,有很多字符串可以作为 IP 地址:
通常,开发解决方案首先要定义适当的正则表达式。你可以在网上找到一些帮助。但是要涵盖所有符合“任何 IP 地址”的条件需要工作。
您所描述的场景通常称为eDiscovery。您可能会搜索可以满足您要求的产品。
为了让其他人可以从我的研究中受益,这里有一个在 PowerShell 中使用 Windows 搜索的工作示例。在这里,我在 PowerShell
目录中搜索 C:/Users/Michael/Stack Overflow
。注意搜索词比较简单,这是全文搜索的局限性。
确保向下滚动并复制整个脚本。
# Adapted from
# https://docs.microsoft.com/en-us/windows/win32/search/-search-sample-wsfromscript
# and
# https://github.com/microsoft/Windows-classic-samples/blob/master/Samples/Win7Samples/winui/WindowsSearch/WSFromScript/QueryEverything.vbs
# See
# https://docs.microsoft.com/en-us/windows/win32/search/-search-sql-folderdepth
# for information on searching specific directories.
# See
# https://docs.microsoft.com/en-us/windows/win32/search/-search-sql-contains
# for information on searching the body of a document.
# See
# https://docs.microsoft.com/en-us/windows/win32/properties/core-bumper
# for potential properties to return.
# Create the ADO objects.
$objConnection = New-Object -ComObject ADODB.Connection
$objRecordSet = New-Object -ComObject ADODB.Recordset
# Windows Search connection string.
$objConnection.Open("Provider=Search.CollatorDSO;Extended Properties='Application=Windows';")
# SQL SELECT statement specifies what properties to return, you can add more if you want
# FROM - use SystemIndex for a local query or MACHINENAME.SystemIndex for remote
# WHERE - specify restrictions including SCOPE and other conditions that must be true
# To add scope restriction append "WHERE SCOPE='file:c:/users'" to the query string.
# SQL Query
$objRecordSet.Open("SELECT System.ItemName, System.ItemTypeText, System.Size, System.ItemPathDisplay FROM SystemIndex WHERE SCOPE='file:C:/Users/Michael/Stack Overflow' AND CONTAINS('PowerShell')", $objConnection)
try
{
$objRecordSet.MoveFirst()
do {
# Access the column values that were specified in the SELECT statement here
Write-Host $objRecordset.Fields.Item("System.ItemName").Value
Write-Host $objRecordset.Fields.Item("System.ItemTypeText").Value
Write-Host $objRecordset.Fields.Item("System.Size").Value
Write-Host $objRecordset.Fields.Item("System.ItemPathDisplay").Value
Write-Host
$objRecordset.MoveNext()
} until ($objRecordset.EOF)
}
finally
{
$objRecordset.Close()
Remove-Variable -Name objRecordset
$objConnection.Close()
Remove-Variable -Name objConnection
}
# Script End
样品运行。
PS > & '.\QueryEverything 03.ps1'
...
Stack Overflow Notes.txt
Text Document
3606
C:\Users\Michael\Stack Overflow\in-powershell-can-you-write-host-the-invocation-and-arguments-for-an-external-co\Stack Overflow Notes.txt
Stack Overflow Answer.txt
Text Document
1720
C:\Users\Michael\Stack Overflow\mimic-windows-wildcard-search-using-powershell-script\Stack Overflow Answer.txt
Stack Overflow Notes.txt
Text Document
23310
C:\Users\Michael\Stack Overflow\mimic-windows-wildcard-search-using-powershell-script\Stack Overflow Notes.txt
请注意,“模拟 Windows 通配符搜索”在实践中是指文件名。除了像这样的尾随星号外,我不知道有什么方法可以对文档正文使用通配符:
CONTAINS('PowerSh*')