Powershell在找到另一个字符串后提取字符串



我正在寻找一种在文件中查找字符串的方法,然后提取该字符串和分隔符之间的所有内容。 我可以从文件中取出 LINE,但我对如何从中获取我想要的字符串有点困惑。

文件中的行是这样的:

<add key="ConnectionString" value="Data Source=xxxxxx;Initial Catalog=Database;Integrated Security=True" />

我可以找到"数据源=",但我想返回"xxxxxx"。这是我正在使用的:

((Get-Process -Name "db-engine").Path ) + '.Config' | Select-String -Path {$_} - Pattern 'Data Source='

这给了我上面的整个"添加键"行。

提前感谢任何帮助!

编辑:感谢您的回复。 经过更多的挖掘,看起来"更合适"的方法实际上是使用 [xml] 将文件的内容拉取到 xml 对象中。 然后我可以获取值并使用拆分将数据分解为我需要的块。 最终代码将如下所示:

$configpath     = ((Get-Process -Name "db-engine").Path)
$linepath       = $configpath + ".Config"
[xml]$xmlfile   = get-content $linepath
$xmlvalue       = ($xmlfile.configuration.appSettings.add | where {$_.key -eq "ConnectionString"}).value
$server         = $xmlvalue.split(";=")[3]
$db             = $xmlvalue.split(";=")[5]  

仍在解决问题,但这似乎让我走上了正确的道路。 Split 将输入分解为一个数组,因此 [x] 允许我调用特定元素。 拆分中有多个分隔符,它会中断其中任何一个的输入。 也许这可以在未来帮助其他人。

谢谢所有的帮助,伙计们!

就个人而言,我只会获取属性的值 - 可能使用带有 Select-XML 的 XQuery - 然后将其拆分为分号,然后使用 ConvertFrom-StringData

$xml = [xml]'<add key="ConnectionString" value="Data Source=xxxxxx;Initial Catalog=Database;Integrated Security=True" />';
$ConnectionString = ($xml | Select-Xml -XPath '/add[@key="ConnectionString"]/@value').Node.'#text'
$DataSource = ($ConnectionString.Split(';') | ConvertFrom-StringData).'Data Source'

我同意@Bacon位 - 如果你有一个xml文件,那么你可能需要考虑这样对待它。如果要使用选择字符串,可以使用 Matchinfo 捕获的组。使用命名组的示例:

 gc .dataSource.txt | Select-String -Pattern 'Data Source=(?<ds>.+?);' | % { $_.Matches[0].Groups['ds'].Value }

相关内容

  • 没有找到相关文章

最新更新