我有一个代码片段,用于连接到SQL Server实例和查询,这很好。
$instance="Instance"
$DB = "master"
$sqlConnection = ConnectionString $Instance $DB
$sqlConnection = New-Object System.Data.SqlClient.SQLConnection($sqlConnection)
$sqlConnection.Open()
但是,相同的代码片段,如果放入foreach循环,它必须遍历一组服务器,它不起作用。
foreach ($instance in $Instances) {
$instance
$DB = "master"
$sqlConnection = ConnectionString $Instance $DB
$sqlConnection = New-Object System.Data.SqlClient.SQLConnection($sqlConnection)
$sqlConnection.Open()
}
错误:
异常通话"打开"用" 0"参数:"建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供者:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)"
答案 0 :(得分:0)
安斯加是对的。你不应该重用变量名。
更简单的实现方法是使用the Invoke-Query module,将大部分代码折叠为一行。
$sql = "Update myTable set myColumn = 1;"
$db= "master"
$instances = ("instance1","instance2")
foreach ($instance in $instances)
## This command uses windows auth.
## You can pass in a Credential object to use SqlServer auth.
$rowcount = $sql | Invoke-SqlServerQuery -Server $instance -Database $db -CUD
Write-Host "Updated $rowcount rows on server $instance."
}
免责声明:我是该模块的作者。