Powershell应用SQL修补程序多个服务器

时间:2017-10-20 12:47:54

标签: sql-server powershell server patch

我需要在300多个服务器中应用SQL Server补丁,因此,我已在下面创建了代码并将其保存为Apply_SQL_Patch.ps1。

我正在阅读包含所有服务器名称的txt文件,并且我想要连接到它们,提取并应用Patch。

问题是当我执行它时,它连接到服务器,但它没有将目录更改为D:\ Software \ Patch,导致下一行出错:

$output = foreach ($cluster in GC "D:\Software\Patch\Servers_List.txt")
{
    Enter-PSSession -ComputerName $cluster
    cd D:\Software\Patch\
    .\SQLServer2014-KB4037356-x64.exe /X:D:\Software\Patch
    .\setup.exe /action=patch /instancename=SQL2014 /quiet /IAcceptSQLServerLicenseTerms
} 
$output | Out-File -Append D:\Software\Patch\Patch_Result.txt

以下错误:

  

。\ SQLServer2014-KB4037356-x64.exe:该术语   ' \ SQLServer2014-KB4037356-x64.exe程序'不被识别为a的名称   cmdlet,函数,脚本文件或可操作程序。检查拼写   如果包含名称,或者包含路径,请验证路径是否正确   正确,然后再试一次。在D:\ software \ patch \ Apply_SQL_Patch.ps1:5   焦炭:2   +。\ SQLServer2014-KB4037356-x64.exe / X:D:\ Software \ Patch   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:ObjectNotFound:(。\ SQLServer2014-KB4037356-x64.exe:String)[],   CommandNotFoundException       + FullyQualifiedErrorId:CommandNotFoundException

     

。\ setup.exe:术语'。\ setup.exe'不被认为是的名称   cmdlet,函数,脚本文件或可运行程序。检查   拼写名称,或者如果包含路径,请验证路径   是正确的,然后再试一次。在D:\ software \ patch \ Apply_SQL_Patch.ps1:7   焦炭:2   +。\ setup.exe / action = patch / instancename = SQL2014 / quiet / IAcceptSQLServerLicense ...   + ~~~~~~~~~~~       + CategoryInfo:ObjectNotFound:(。\ setup.exe:String)[],CommandNotFoundException       + FullyQualifiedErrorId:CommandNotFoundException

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

Enter-PSSession -ComputerName $cluster
cd D:\Software\Patch\
.\SQLServer2014-KB4037356-x64.exe /X:D:\Software\Patch
.\setup.exe /action=patch /instancename=SQL2014 /quiet /IAcceptSQLServerLicenseTerms

我认为这不会像你想的那样奏效。您正在创建一个会话,然后在本地执行三个命令

尝试:

Invoke-Command -ComputerName $cluster -ScriptBlock {
    cd D:\Software\Patch\
    Start-Process -PSPath '.\SQLServer2014-KB4037356-x64.exe' -ArgumentList '/X:D:\Software\Patch' -Wait
    .\setup.exe /action=patch /instancename=SQL2014 /quiet /IAcceptSQLServerLicenseTerms
}

我已经将补丁提取命令替换为上面的命令,因为该命令会立即将控制权返回给PowerShell。您可能需要使用setup.exe执行相同的操作。我没有要测试的SQL 2014实例。