Arrays 将txt文件用作PowerShell数组/变量中的列表

Arrays 将txt文件用作PowerShell数组/变量中的列表,arrays,powershell,csv,text-files,powershell-3.0,Arrays,Powershell,Csv,Text Files,Powershell 3.0,我有一个搜索字符串的脚本(在本例中为“End program”)。然后,它遍历文件夹中的每个文件,并输出任何不包含字符串的文件 当这个短语被硬编码时,它工作得非常好,但是我想通过创建一个文本文件来保存字符串,使它更具动态性。在将来,我希望能够添加到文本文件中的字符串列表中。我在任何地方都找不到这个,所以非常感谢您的帮助 当前代码: $Folder = "\\test path" $Files = Get-ChildItem $Folder -Filter "*.log" | ?

我有一个搜索字符串的脚本(在本例中为“End program”)。然后,它遍历文件夹中的每个文件,并输出任何不包含字符串的文件

当这个短语被硬编码时,它工作得非常好,但是我想通过创建一个文本文件来保存字符串,使它更具动态性。在将来,我希望能够添加到文本文件中的字符串列表中。我在任何地方都找不到这个,所以非常感谢您的帮助

当前代码:

$Folder = "\\test path"
$Files = Get-ChildItem $Folder -Filter "*.log" |
         ? {$_.LastWriteTime -gt (Get-Date).AddDays(-31)} 

# String to search for within the file
$SearchTerm = "*End program*"

foreach ($File in $Files) {
    $Text = Get-Content "$Folder\$File" | select -Last 1

    if ($Text | WHERE {$Text -inotlike $SearchTerm}) {
        $Arr += $File
    }
}
if ($Arr.Count -eq 0) {
   break
}
这是代码的简化版本,仅显示问题区域。我想把“End program”和另一个字符串“End”放在文本文件中

以下是文件内容的外观:

*End program*,*Start* *结束程序*,*开始*
如果要检查文件是否包含(或不包含)许多给定的术语,最好使用正则表达式。从文件中读取术语,将其转义,然后将其加入到:

文件中的每个术语应在单独的一行中,不包含前导或尾随通配符。像这样:

End program Start 如果要检查整个文件,而不仅仅是最后一行的更改

Get-Content $_.FullName | Select-Object -Last 1


因此,基本上,您希望有一个包含一些搜索词的文件,并且您希望枚举所有不包含这些词的文件?我认为您可以使用
Get Content
从文本文件中获取值。您只需要知道文本文件的名称或名称的模式,然后使用
Get ChildItem
扫描目录中的文本文件。@AnsgarWiechers是的,这就是我需要做的。@Jasonnell我已经这样做了,当文件中只有一个短语,而不是多个短语时,它就可以工作了
Get-ChildItem $folder | Where-Object {
    -not $_.PSIsContainer -and
    (Get-Content $_.FullName | Select-Object -Last 1) -notmatch $pattern
}
Get-Content $_.FullName | Select-Object -Last 1
Get-Content $_.FullName | Out-String