我有一段代码在一系列日志文件中寻找字符串。Powershell问题while while循环
如果找到字符串,它应该退出循环(嵌套在另一个循环内的功能的一部分)以$ buildlogsuccess =“真”
如果无法找到字符串,它应该退出,返回$ buildlogsuccess =“假”
的选择字符串语句本身的工作原理,但它看起来像有什么毛病下面的代码:
$logArr = gci C:\build\Logs | where {($_.name -like 'install*.log') -and (! $_.PSIsContainer)} | select -expand FullName
$count = ($logArr).count
Foreach ($log in $logArr) {
Do {
$count -= 1
$buildlogsuccess = [bool](select-string -path $log -simplematch $buildstring)
If (($buildlogsuccess)) {break}
} while ($count -gt '0')
}
当日志中的一个具有串,循环结束并且应该返回$ buildlogsuccess为'True ”。
如果我检查$ log,它会显示我知道的字符串文件(在本例中为C:\ build \ Logs \ Installer1.log)。
奇怪的是,在这一点上$ count显示为值为-1?
如果我从该文件中取出字符串并再次运行,它也会退出并返回正确的变量值(并根据预期显示$ log变量作为$ logArr中的最后一个文件),但此时$ count显示为-24。
当字符串出现在其中一个日志文件中时,我的代码也返回$ buildlogsuccess'False'。
重新测试通过手动填充$日志(与具有该字符串的文件)和$ buildstring并获得“真”如预期使用
[布尔](选择串-path $当
[bool](select-string -path $log -simplematch $buildstring)
登录-simpleMatch $ buildstring)
注:变量它使用:
$ buildstring =“包 “F:\ XXX \引导程序\ apackage \ Installsomething。 xml'已成功处理 “
任何帮助确定我出错的地方将不胜感激。