2016-03-04 88 views
1

我正在尋找一種方法來查找文件中的字符串後提取字符串,然後提取該字符串和分離器之間的一切。我能得到LINE出來的文件,但我如何得到我想要離開它的字符串有點難倒。PowerShell來尋找另一個字符串

線出來的文件是這樣的:

<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對象。然後我可以獲取值並使用split將數據分解成我需要的塊。最終的代碼將如下所示:

$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]讓我調用一個特定的元素。在分割中有多個分隔符,它會在任何分隔符處打斷輸入。也許這可以幫助未來的其他人。

感謝所有幫助,夥計們!

回答

2

個人而言,我剛剛得到的屬性值 - 可能與選擇的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' 
+0

我在解決方案中使用了這些元素。我將它添加到編輯後的文章中。謝謝! –

2

我同意@培根位 - 如果您有一個xml文件,那麼您可能會考慮將其視爲這樣。如果你想使用Select-String,你可以使用MatchInfo的捕獲組。使用命名組的示例:

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

這是一個有趣的方法。我會繼續記住這一點。謝謝! –

相關問題