注意应用程序服务器授权的处理:
1. 启动WinRM(Windows Remote Management (WS-Management))服务
2. 将Jenkins客户端加入到信任列表
Command: Set-Item wsman:\localhost\Client\TrustedHosts -value 192.168.1.xxx
3. 设置 WinRM 以接收请求
Command: Enable-PSRemoting -Force
Powershell完整命令:
注:如果iis应用程序池没有启动的情况下执行会出现错误提示:服务尚未启动。 (异常来自 HRESULT:0x80070426)
$username='admin' $password='xxx' $hostname='192.168.1.xxx' $localdir='C:\Jenkins\workspace\ProjectName\aspnet-core\src\Project\bin\Debug\netcoreapp2.2\publish' #本地发布程序目录 $remotedir='D:\wwwroot\Project_API' #服务器IIS站点工作目录 $eap = $ErrorActionPreference Try{ $ErrorActionPreference = 'Stop' #创建远程PSSesion会话 $pass=ConvertTo-SecureString -String $password -AsPlainText -Force $cre=New-Object pscredential($username, $pass) $session=New-PSSession -ComputerName $hostname -Credential $cre Invoke-Command -Session $session -ScriptBlock{ $nowTime=Get-Date #当前时间 $sitename='Project_API' #站点名称 $workdir='D:\wwwroot\Project_API' #工作目录 $backdir='D:\wwwroot\Back' #备份目录 $iissitespath='IIS:\Sites\'+$sitename $iisapppoolspath='IIS:\AppPools\'+$sitename import-module webadministration set-location IIS:\ #停止IIS站点 $site=Get-Item $iissitespath $site.Stop() #停止IIS程序池 $pool=Get-Item $iisapppoolspath #这行执行有点问题 $pool.Stop() #ZIP备份文件 $backpath='{0}\{1}_{2}.{3}' -f $backdir, $sitename, $nowTime.ToString("yyyyMMddHHmmss"), 'zip' Compress-Archive -Path $workdir -DestinationPath $backpath #删除IIS站点工作目录下所有文件,排除(*.jpg,*.jpeg,*.png,*.gif,*.log) 文件格式 $removeworkpath=$workdir+'\*' Remove-Item $removeworkpath -exclude *.jpg,*.jpeg,*.png,*.gif,*.log -recurse } #将本地文件 上传至 服务器 ls $localdir | cp -Destination $remotedir -ToSession $session -Recurse -Force Invoke-Command -Session $session -ScriptBlock{ #启动IIS站点 $site.Start() #启动IIS站点 $pool.Start() #这行执行有点问题 } #使用完毕后一定记得释放PSSesion Remove-PSSession -Id $session.Id } Catch{ # 包含堆栈的信息 Write-Output $PSItem Exit 1 } Finally{ $ErrorActionPreference = $eap }