[string[]]$computername="172.25.63.37" $account = "hcadmin" $password = $env:testpasswd $sn = $env:ServiceNAME $pn = $env:ProcessNAME If ($sn -eq $null) { echo "未定义目录名" exit } Else { echo "项目名为$sn" } $tmppath = "D:\jenkins-tmp\$sn\" $runpath = "D:\web\background\" # 把密码转换为SecureString $secpwd = convertto-securestring $password -asplaintext -force # 新建PSCredential对象 $cred = new-object System.Management.Automation.PSCredential -argumentlist $account,$secpwd -ErrorAction Stop # 远程主机列表赋值给变量 foreach ($cname in $computername) { # 创建PSSession $session_many = new-pssession -ErrorAction Stop -computername $cname -Credential $cred # 批量远程执行命令 echo "重置缓存临时目录" Invoke-Command -Session $session_many -ArgumentList $tmppath -ScriptBlock { param($tmppath) rd -recurse $tmppath md $tmppath } echo "重置缓存临时目录完成" echo "开始同步程序文件" Copy-Item -Path ${env:WORKSPACE}\${env:DEST}\jenkins_publish\* -Destination $tmppath -ToSession $session_many -recurse -ErrorAction Stop echo "同步程序文件完成" echo "停止服务" Invoke-Command -Session $session_many -ArgumentList $pn -ScriptBlock { param($pn) $pc = Get-Process -Name $pn If ($pc -eq $null) { echo "未发现程序名为${pn}的进程" } Else { taskkill /f /pid $pc.Id /t } } echo "停止服务完成" echo "开始替换远程程序文件" Invoke-Command -Session $session_many -ArgumentList $tmppath, $runpath -ScriptBlock { param($tmppath, $runpath) #rd -recurse $runpath #md $runpath } Invoke-Command -Session $session_many -ArgumentList $tmppath, $runpath -ErrorAction Stop -ScriptBlock { param($tmppath, $runpath) Copy-Item -ErrorAction Stop -recurse -Force $tmppath\* -Exclude XmlConfig $runpath } echo "替换远程程序文件完成" echo "启动服务" Invoke-Command -Session $session_many -ArgumentList $sn -ErrorAction Stop -ScriptBlock { param($sn) Start-Service -Name $sn } echo "启动服务成功" }