Powershell应用SQL修补程序多个服务器
我需要在300多个服务器中应用SQL Server修补程序,所以,我在下面创建了代码并将其保存为Apply_SQL_Patch.ps1。Powershell应用SQL修补程序多个服务器
我正在阅读包含所有服务器名称的txt文件,并且想要连接到它们,提取并应用修补程序。
的问题是,当我执行它,将它连接到服务器,但它不改变目录到d:\ SOFTWARE \补丁,从而对未来行错误:
$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程序:术语 不被识别为一个 cmdlet,函数的名称,脚本文件或可操作的程序 '\ SQLServer2014-KB4037356-x64.exe程序。'。检查名称的拼写 ,或者如果包含路径,请确认路径为 正确,然后重试。在D:\ software \ patch \ Apply_SQL_Patch.ps1:5 char:2 +。\ SQLServer2014-KB4037356-x64.exe/X:D:\ Software \ Patch + ~~~~~~~~~~~ (。\ SQLServer2014-KB4037356-x64.exe:String)[], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException
。\ setup.exe:术语'。\ setup.exe'不被识别为名称为 的cmdlet,函数,脚本文件或可操作程序。检查名称的拼写,或者如果包含路径,请确认路径 是正确的,然后重试。在D:\ software \ patch \ Apply_SQL_Patch.ps1:7 char:2 +。\ setup.exe/action = patch/instancename = SQL2014/quiet/IAcceptSQLServerLicense ... + ~~~~~~~~~ ~~ + CategoryInfo:ObjectNotFound:(\ SETUP.EXE:字符串)[],CommandNotFoundException + FullyQualifiedErrorId:CommandNotFoundException
感谢您的帮助!
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实例。
!)的目录!感谢您的回复!它的工作部分。现在,我能够连接到服务器,更改目录,提取补丁,但是,它无法执行最后一行。 \ setup.exe,导致在下面的错误(我已检查和setup.exe存在)你能给我一些光?谢谢!术语'。\ setup.exe'不被识别为cmdlet的名称,函数,脚本文件或可操作程序。请检查 名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。 – AdemirP
@AdemirP当我运行'SQLServer2014-KB4037356-x64.exe'时,它异步运行。它立即返回控制,并在提取完成之前运行下一行。尝试'开始 - 进程-PSPath'。\ SQLServer2014-KB4037356-x64.exe'-ArgumentList'/ X:D:\ Software \ Patch'-Wait' –
再次感谢!多长时间 - 等待会发生?它运行了一段时间,它看起来像冻结。是否需要一些命令开始运行下一行?最终代码如下:$ output = foreach($ GC in GC“D:\ Software \ Patch \ Servers_List.txt”) { Invoke-Command - 计算机名称$ cluster -ScriptBlock {D0 \ Software \ Patch \ Start-Process -PSPath'。\ SQLServer2014-KB4037356-x64.exe'-ArgumentList'/ X:D:\ Software \ Patch'-Wait 。\ SETUP.exe/action = patch/instancename = SQL2014/quiet/IAcceptSQLServerLicenseTerms} } – AdemirP
补丁300 + Sql Server实例肯定听起来像你真的需要一个配置管理解决方案。话虽如此,你是否已将补丁文件复制到远程服务器呢? – vonPryz
Hi @ vonPryz!感谢回复!是的,补丁存在于名为:( – AdemirP