对不同服务器

时间:2015-11-22 10:12:39

标签: sql-server powershell sqlcmd invoke-sqlcmd

我正在使用PowerShell脚本来运行针对多个服务器和数据库的查询,其目的是将服务器和数据库动态添加到数组并执行它们。

目前我被困在最后一部分,一切都在一起。我可以添加服务器,但不能添加数据库。

我想要实现的目标:使用MFP GUI的PowerShell脚本对多个MSSQL服务器运行查询,这些服务器都包含相同的数据库(具有不同的数据),但数据库具有不同的名称,如Sql_Data-Node1,{{1}等等。

我遇到的问题:我设法将服务器动态添加到数组中,当我运行查询时,我得到了正确的响应。在这种情况下,我使用了master数据库,我将其设为静态(SqlData-Node2)。当我尝试对数据库执行相同操作(将它们添加到数组中)时,我收到错误:

-database 'master'

我的代码:

Invoke-Sqlcmd : Cannot validate argument on parameter 'Database'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
At C:\Users\master\Documents\MULTSCRIPT\MultiQueryV0.6.ps1:368 char:109
+ ... ame -Password $PassWord -ServerInstance $_[0] -Database $_[1] -Query  ...
+                                                             ~~~~~
+ CategoryInfo          : InvalidData: (:) [Invoke-Sqlcmd], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

1 个答案:

答案 0 :(得分:0)

似乎以下解决方案有效。 信用证转到:Mutiple Variables in Foreach Loop [Powershell]

$window.Button.add_Click(
{   $DataBase = $window.DataBase.Text.ToString()
    $SQLQuery = $window.Query.Text.ToString()
    $Server = $ServerAddress.getenumerator()
    $Database = $DBSet.getenumerator()
    while($Server.MoveNext() -and $Database.MoveNext()){
    Invoke-Sqlcmd -AbortOnError -Username $UserName -Password $PassWord -ServerInstance $Server.Current -Database $Database.Current -Query $SQLQuery -QueryTimeout 30 | Out-GridView -Title $Server.Current}