【发布时间】:2018-04-06 00:44:16
【问题描述】:
我已经开发了一个 PS1 文件,它将负责基于服务器列表应用 SQL Server 补丁。因此,它将读取包含我需要修补和应用补丁的所有服务器的文本文件。 我决定将 PARAM 用于“源文件夹”(我将在其中获取服务器列表并记录输出); “目标文件夹”(我可以在其中运行补丁)、“文件”(补丁名称)、“实例”(我将运行补丁更新的 SQL Server 实例)。 当我开始运行下面的命令时,它能够读取服务器列表(所以,第一个 PARAM 是好的),但是,它在中止过程下面返回错误。 下面的代码缺少什么或我做错了什么?
PS.: 我也想使用 Try...Catch 在输出文件上记录一条消息。我写对了吗? 提前致谢!
[CmdletBinding()]
Param (
[Parameter(Mandatory=$True,Position=0)]
[string]$foldersource,
[Parameter(Position=1)]
[string]$folderdest,
[Parameter(Position=2)]
[string]$file,
[Parameter(Position=3)]
[string]$instance
)
foreach ($cluster in GC "$foldersource\Servers_List.txt")
{
$output = "Server: $cluster Patch Installation on: $(Get-Date -format 'u')"
try{
Invoke-Command -ComputerName $cluster -ScriptBlock
{
cd $folderdest
.\$file /X:$folderdest
Start-Sleep -s 10
.\SETUP.exe /action=patch /instancename=$instance /quiet /IAcceptSQLServerLicenseTerms
}
-ErrorAction Stop;
$output += " SUCCESS"
}
catch
{
$output += "Failed - $($_.exception.message)"
}
$output | Out-File -Append $foldersource\Patch_Result_Non_SP.txt
}
我如何运行上面的命令:.\SQL_Server_install_non-Service_Pack_V2.ps1 "D:\Software\Patch" "D:\Software" "SQLServer2008R2-KB3045316-x64.exe" "MSSQLSERVER"
ERROR:
Cannot process argument because the value of argument "path" is null. Change the value of argument "path" to a non-null value.
+ CategoryInfo : InvalidArgument: (:) [Set-Location], PSArgumentNullException
+ FullyQualifiedErrorId : ArgumentNull,Microsoft.PowerShell.Commands.SetLocationCommand
+ PSComputerName :
The term '.\$file' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included,
verify that the path is correct and try again.
+ CategoryInfo : ObjectNotFound: (.\$file:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
+ PSComputerName :
The term '.\SETUP.exe' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included,
verify that the path is correct and try again.
+ CategoryInfo : ObjectNotFound: (.\SETUP.exe:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
+ PSComputerName :
【问题讨论】:
-
try catch 使用是正确的
-
谢谢@Moerwald! :)
-
我添加了一个答案,包括可能的解决方案。如果答案是正确的,请将其标记为正确的。谢谢。
标签: sql-server powershell path patch service-pack