2013-06-30 71 views
0

EngConI需要帮助从Select-String命令获取信息。我需要找到来自$array的哪些项目在engcon.pbo文件中。如果发现的结果显示在控制台上,或者更好,在.txt文件中,这将是最有用的。Powershell“select-string”阅读信息

在全码,也有在阵列中297项(#0和#295在内)。

###### 
#Mine# 
###### 


$TargetFile = "C:\PowershellScripts\EngCon.pbo" 

$array = @("Comprehension", "Outspeed", "Marsileaceae", "Chalybeate") 

$i = 0 

while ($i -le 295) 
{ 

$SearchString = $array[$i] 

Select-String $TargetFile -pattern $SearchString 

$i = $i + 1 

} 

####### 
#Yours# 
####### 

$array = @($array = @("Comprehension", "Outspeed", "Marsileaceae", "Chalybeate") 
$found = @{} 
Get-Content "C:\PowershellScripts\EngCon.txt" | % { 
    $line = $_ 
    foreach ($item in $array) { 
    if ($line -match $item) { $found[$item] = $true } 
    } 
} 

$found.Keys | Out-File "C:\PowershellScripts\results.txt" 

如果可能,你还可以提供一些很好的学习PS的地方。

使用“写主机”进行快速测试后,结果显示foreach ($item in $array)中的某些内容正在导致错误(立即结束脚本),我使用的示例文件也仅仅是一些数组项和一些随机词的测试器,全部用空格分隔。至于代码,所有我编辑是集$阵列项目

仅供参考,我不能透露大部分的阵列项目,因为它们是私人

“理解随机Outspeed你好你Uncovenable苹科极端Runcation Guggle Tribunitious Chalybeate“是所有版本的完整测试程序文件(EngCon.pbo,EngCon.txt和EngCon)

+0

然后模糊数组元素,但显示您的实际代码。不要说出你以为你做了什么。 –

+0

为什么要将数组定义放入另一个数组定义中?我当然没有告诉你这样做。将'$ array = @($ array = @(“Comprehension”,“Outspeed”,“Marsileaceae”,“Chalybeate”)'改为'$ array = @(“Comprehension”,“Outspeed”,“Marsileaceae”,“Chalybeate “)',然后再试一次。 –

+0

非常感谢你,现在的工作和工作的目的是第一次已经 –

回答

2

您的Select-String指令反复读取$TargetFile。这会对性能产生不利影响。尝试这样的代替:

$array = @(...) 

$found = @{} 
Get-Content "C:\PowershellScripts\EngCon.pbo" | % { 
    $line = $_ 
    foreach ($item in $array) { 
    if ($line -match $item) { $found[$item] = $true } 
    } 
} 

$found.Keys | Out-File "C:\results.txt" 
+0

这将返回一个空文件,需要做其他的则数组 –

+0

不是真的,代码工作正常,什么编辑我是否'EngCon.pbo'实际上是一个文本文件? –

+0

我试过一个普通的.txt文件和一个普通文件(no。***),它仍然是一个空文件 –