.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}
}
しかし、それは同じ結果でした。パイプラインを介してアイテムを一度に送信すると、このエラー/問題が回避されると読みましたが、続行する方法がわかりません。何かご意見は?