因此,我正在關注互聯網上的一個非常直接的演示,以更新我的SQL連接字符串中的data-source
屬性。不過,此行最初拋出下面的錯誤使用Powershell更新多個連接字符串數據源
$doc = (gc $file) -as [xml]
GC:找不到路徑 'C:\ WINDOWS \ SYSTEM32 \ LVOAGT.exe.config',因爲它不存在。
由於我全新到PowerShell的我刪除了gc
和錯誤走了......不過現在$doc
變量爲空白。任何想法如何抓住一個配置文件,並使用下面的方法來更新我的連接字符串的data source
部分?
#environment variables
$env = "DEV" #This will need to be changed from DEV/INT/QUA/PRD
$oldServer = "QUASQ03" #This will need to be changed from DEV/INT/QUA/PRD
#file and folder variables
$directory = "D:\AMS"
$folders = @("AgentsMonetToDss")
#new database value
$newValue = "$env-AgentResources-AMS-SQL.CORP"
#pull config file and insert new database connection
foreach($folder in $folders)
{
Write-Host "Updating app.config for $folder" -ForegroundColor Yellow
$dir = Get-ChildItem $directory\$folder -Recurse
$config = $dir | where {$_.extension -eq ".config"}
foreach($file in $config)
{
$doc = (gc $file) -as [xml]
$root = $doc.get_DocumentElement();
$newCon = $root.connectionStrings.add.connectionString.Replace("data source=$oldServer\sql08a", "data source=$newValue\sql08a")
$root.connectionStrings.add.connectionString = $newCon
$doc.Save($file)
}
}
編輯
這裏是什麼包含在$file
變量內foreach
循環的第一次迭代是截圖。在彈出的信息是準確的(文件名,目錄)
第二個編輯
所以下面的下面的代碼將更新連接字符串。然而這一行給出了下面的錯誤。
$root.connectionStrings.add.connectionString = $newCon
酒店 '的connectionString' 不能在該物體上找到。驗證該屬性是否存在並可以設置。
$doc = [xml](Get-Content $file.FullName)
$root = $doc.get_DocumentElement();
[string]$newCon = $root.connectionStrings.add.connectionString.Replace($oldServer, $newValue)
$root.connectionStrings.add.connectionString = $newCon
$doc.Save($file.FullName)
第三編輯
'connectionString' cannot be found on this object
似乎是因爲我們在<connectionStrings>
節點的多個連接字符串錯誤。如果我從配置中刪除了一個連接字符串,那麼腳本運行良好。所以我想問題是如何使用PowerShell更新MULTIPLE連接字符串?這個問題似乎是下面的這些行
$newCon = $root.connectionStrings.add.connectionString.Replace($oldServer, $newValue)
$root.connectionStrings.add.connectionString = $newCon
第一行將擦洗兩個連接字符串,並根據請求替換值。但是,由於我在$newCon
中只有一個很長的字符串,並且我試圖添加到$root
的connectionString
屬性中,所以發生衝突。
它不應該從'Windows \ system32'中拉出來。更新了帖子。 – NealR 2015-03-13 18:20:13
我已經在'$ directory \ $ folder'上調用了'Get-ChildItem'。該部分正在做它意味着要做的事情(我可以看到該目錄中的所有文件)。 – NealR 2015-03-13 18:25:17
@ user2864740用調試會話信息更新了帖子 – NealR 2015-03-13 18:31:58