Ich versuche invoke-Async zu verwenden, um ein SQL-Skript auf mehreren SQL-Servern bereitzustellen.Invoke-Async zum Bereitstellen von SQL-Skript auf mehreren Servern.
Der Invoke-Async-Code ist here. Das Skript verwendet invoke-sqlcmd2, dessen Code here ist.
Der folgende non-sql-server-code funktioniert.
$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
Ich habe den Code ein bisschen (unten) für den SQL-Server optimiert. Funktioniert nicht. Offensichtlich vermisse ich etwas. Jede Hilfe wird sehr geschätzt. Vielen Dank.
$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
Es gibt keinen Standardbefehl für Powershell Invoke-Async. Aber es gibt eine Funktion zur Verfügung. Sie sollten den Fehler erhalten, dass Invoke-Async nicht als Cmdlet erkannt wird. Bitte posten Sie den Fehler –
Ich habe bereits eine Kopie von invoke-sync heruntergeladen, wie ich in meinem Beitrag erwähnt habe. Ich erhalte die Ausnahme "Invoke-Async wird nicht als Cmdlet erkannt". Ich kann Invoke-sqlcmd2 mit Invoke-sync nur nicht verwenden. Funktioniert Invoke-Async für Sie mit invoke-sqlcmd2? – RaviLobo
Invoke-sqlcmd2 ist auch eine externe Funktion, die standardmäßig nicht vorhanden ist. Wenn Sie sie verwenden möchten, dann setzen Sie die gesamte Funktionsdefinition in den Skriptblock und rufen Sie sie –