Invoke-Async在多个服务器上部署SQL脚本。

问题描述:

我正在尝试使用invoke-Async将SQL脚本部署到多个sql服务器。Invoke-Async在多个服务器上部署SQL脚本。

invoke-async代码是here。 该脚本使用invoke-sqlcmd2,其代码为here

以下非sql-server-code作品。

$sb = [scriptblock] {param($system) gwmi win32_operatingsystem -ComputerName $system | select csname,caption} 
$servers = 'Server1', 'Server2', 'Server3', 'Server4' 
$rtn = Invoke-Async -Set $servers -SetParam system -ScriptBlock $sb 
$rtn 

我调整了一下代码(下)以适用于SQL服务器。不起作用。很明显,我错过了一些东西。任何帮助都非常感谢。谢谢。

$sb = [scriptblock] {param($system) Invoke-SQLCmd2 -ServerInstance $system -ServerInstance 'select name from sys.databases' } 
$servers = 'Server1', 'Server2', 'Server3', 'Server4' 
$rtn = Invoke-Async -Set $servers -SetParam system -ScriptBlock $sb 
$rtn 
+0

没有PowerShell Invoke-Async的默认命令。但有一个功能可用。您应该收到Invoke-Async无法识别为cmdlet的错误。请发布错误 –

+0

我已经下载了一个invoke-sync的副本,正如我在文章中提到的那样。我没有收到“Invoke-Async不被识别为cmdlet”异常。我只是无法使用Invoke-sqlcmd2和Invoke-sync。使用invoke-sqlcmd2为invoke-async工作吗? – RaviLobo

+0

Invoke-sqlcmd2也是一个外部函数,默认情况下不会在那里..如果你想使用它,然后把整个函数定义放在脚本块中,然后调用它 –

这很简单。因为你正在返回行。只需使用invoke-sqlcmd .. 不确定在使用invoke-sqlcmd2 -As DataTable时,invoke-Async是否会返回表。

 $sb = [scriptblock] {param($system) Invoke-Sqlcmd -ServerInstance $system -query 'select name from sys.databases' } 
     $servers = 'Server1', 'Server2', 'Server3' 
     $rtn = Invoke-Async -Set $servers -SetParam system -ScriptBlock $sb -Verbose  
     $rtn 
+0

谢谢拉希姆,那很有效。这是我学到的东西。 1.我应该使用Invoke-SQLCMD(而不是invoke-sqlcmd2) 2.我在示例中使用了两次-SERVERINSTANCE。那是一种类型。第二个应该是--QUERY。 – RaviLobo