2017-02-01 111 views
0

我是PowerBSD的新手,但試圖更多地採用以加快速度。Powershell:使用查找和替換替換文本文檔中的唯一值

我有一個文本文件,指定SQL連接字符串(對這個問題不關鍵)。我正在查找的兩個值是SQL Server名稱和數據庫名稱。 SQL Server名稱在每臺機器上都會有所不同,因爲它是本地實例,但數據庫名稱將保持不變。

從本質上講,這裏是字符串:

localSQLConString =數據庫= Internal_TrainingProject;服務器= MBDatabase \ SQLEXPRESS14;集成安全性= TRUE;

我想過(使用用戶提示)拉動到這些Powershell的作爲變量,像這樣:

param (
    [string]$SQL = $(Read-Host "Input SQL Server Instance Name.") 
    [string]$DB = $(Read-Host "Input SQL Database Name.") 
) 
(Get-Content "C:\Program Files (x86)\Test.txt") 

不過,我遇到了找你麻煩和替換件。每個文本文件都有共同點,比如localSQLConString =,Database =和Server =。

我希望做這樣的事情

localSQLConString =數據庫= $ DB;服務器= $ SQL;集成安全性= TRUE;

但我在分離變量之間的常見文本時遇到了問題。

任何你有任何幫助將不勝感激。

回答

0

嘗試這樣的事情

$connectionstring="Database=Internal_TrainingProject;Server=MBDatabase\SQLEXPRESS14;Integrated Security=True;" 

#split connectionstring to hash table 
[email protected]{} 
$connectionstring -split ";" | where {$_ -ne ""} | %{$Hash[$_.Split('=')[0]]=$_.Split('=')[1]} 

#modification elements 
$Hash['Server']=$SQL 
$Hash['Database']=$DB 

#create new connectionstring with elements modified 
$Newconnectionstring=($Hash.Keys | %{"$_=$($Hash[$_])"}) -join ";" 

$Newconnectionstring 
+0

感謝您的快速反應。這絕對有助於我獲得我想要做的變量。我正在研究的下一件事是如何指定使用此信息實際獲取和替換的文本。我可以調出Server =和Database =,但服務器或數據庫名稱中的字符數量會有所不同。有沒有辦法讓它抓住=和;之間的字符串?例如,如果這是我替換的字符串localSQLConString = Database = Demodatabase; Server = DemoServer \ SQLEXPRESS14; Integrated Security = True; –