我试图编写一个函数来查找 .sys 文件中的池标记。我创建了一个包含 .sys 文件的所有目录的数组,然后使用 sysinternals Strings 实用程序遍历它们。
这是数组:
$paths = Get-ChildItem \\$server\c$ *.sys -Recurse -ErrorAction SilentlyContinue |
Select-Object Directory -unique
这是我第一次尝试循环:
foreach ($path in $paths) {
#convert object IO fileobject to string and strip out extraneous characters
[string]$path1 = $path
$path2 = $path1.replace("@{Directory=","")
$path3 = $path2.replace("}","")
$path4 = "$path3\*.sys"
Invoke-Command -ScriptBlock {strings -s $path4 | findstr $string}
}
我发现了一些对错误的引用,表明在foreach
循环中,所有信息都存储在内存中,直到它完成处理。
所以我尝试了这个:
for ($i = 0; $i -lt $paths.count; $i++){
[string]$path1 = $paths[$i]
$path2 = $path1.replace("@{Directory=","")
$path3 = $path2.replace("}","")
$path4 = "$path3\*.sys"
Invoke-Command -ScriptBlock {strings -s $path4 | findstr $string}
}
但它有同样的结果。我已经读过通过管道一次发送一个项目将防止这个错误/问题,但我不知道如何继续。有什么想法吗?