如何使用Select-String cmdlet在文本文件中搜索以特定字符串开头的字符串,然后包含随机文本并在该行末尾添加另一个特定字符串?我只对文本文件中单行的匹配感兴趣,而不是对整个文件感兴趣。
例如,我正在搜索匹配文件中同一行的'Set-QADUser'和'WhatIf'。我的示例文件包含以下行:
Set-QADUser -Identity $($ c.ObjectGUID)-ObjectAttributes @ {extensionattribute7 = $ ekdvalue} -WhatIf |出空
如何使用Select-String和正则表达式来定位相关模式?我尝试使用以下内容它确实有效,但它也匹配文本文件中其他地方找到的“Set-QADUser”或“WhatIf”的其他实例,我只想在同一行找到两个搜索字符串时匹配实例。
Select-String -path "test.ps1" -Pattern "Set-QADUser.*WhatIf" | Select Matches,LineNumber
为了使这更复杂,我实际上想要从正在搜索的脚本文件中执行此搜索。实际上,这用于警告用户正在运行的脚本当前设置为“WhatIf”模式以进行测试。但是当然,regEx在运行时匹配脚本中实际的Select-String cmd中的文本 - 因此它找到了多个匹配项,我无法找到克服该问题的一种非常好的方法。到目前为止,这就是我所拥有的:
#Warn user about 'WhatIf' if detected
$line=Select-String -path $myinvocation.mycommand.name -Pattern "Set-QADUser.*WhatIf" | Select Matches,LineNumber
If ($line.Count -gt 1)
{
Write-Host "******* Warning ******"
Write-Host "Script is currently in 'WhatIf' mode; to make changes please remove '-WhatIf' parameter at line no. $($line[1].LineNumber)"
}
我确信必须有更好的方法来做到这一点。希望有人可以提供帮助。
由于
答案 0 :(得分:0)
如果在Select-String上使用-Quiet开关,它将返回一个布尔值True / False,具体取决于它是否找到匹配。
-Quiet <SwitchParameter>
Returns a Boolean value (true or false), instead of a MatchInfo object. The value is "true" if the pattern is found; otherwise, the value is "false".
Required? false
Position? named
Default value Returns matches
Accept pipeline input? false
Accept wildcard characters? false