PowerShell发布IIS(二)


如果你已经顺利完成PowerShell远程配置,接下来可以看下我是如何去完成IIS发布WebApi的,当然每个人要根据自己的实际情况去调整。

$WebApiDown ="c:\WebApiTempDown"  #下载文件临时存放路径,如'D:\PSTest'
$FileIP =$args[0]  #zip更新包下载Ip地址,如172.x.x.x
$BinPath=$args[1] #升级替换Bin路径,如'D:\TestBin'
$NeedBakBin =$args[2] #是否备份原WebApiBin目录
$BakPath ="c:\WebApiBak"

$finishTime= Get-Date -Format "yy-MM-dd HH:mm:ss"  
Write-Host "${env:COMPUTERNAME} 脚本开始时间 ${finishTime}"  -ForegroundColor Yellow
$zipFileName= Get-Date -Format "yyMMddHHmm"
if(!(Test-Path $BinPath)){    
     Write-Host "bin目录不存在" 
     return -5   
}
if($NeedBakBin -eq 1){
    New-Item -ItemType Directory -Path $BakPath  -Force | Out-Null
    Compress-Archive -CompressionLevel Fastest -Path "${BinPath}\*" -DestinationPath "${BakPath}\${zipFileName}.zip" 
    Write-Host "${env:COMPUTERNAME} 备份压缩路径 ${BakPath}\${zipFileName}.zip" -ForegroundColor Yellow
}
New-Item -ItemType Directory -Path $WebApiDown -Force | Out-Null
if(!$?){
    Write-Host "创建目录失败"  
    return -2
}
 
Start-BitsTransfer  -Source  "http://${FileIP}/down/xxxWebAPI.zip"   -Destination "${WebApiDown}/${zipFileName}.zip"  
#(new-object System.Net.WebClient).DownloadFile("http://${FileIP}/down/test.zip", "${WebApiDown}/${zipFileName}.zip" )
#$webClient =(new-object System.Net.WebClient);
#$webClient.Encoding= [System.Text.Encoding]::GetEncoding('UTF-8')
#$webClient.DownloadFile("http://${FileIP}/down/test.zip", "${WebApiDown}/${zipFileName}.zip" )
if($?){
    Expand-Archive -Path "${WebApiDown}/${zipFileName}.zip" -DestinationPath "${WebApiDown}/${zipFileName}" -Force
     if($?){   
          Copy-Item -Path "${WebApiDown}/${zipFileName}\*" -Destination $BinPath -Force -Recurse
          if($?){           
            Remove-Item -Path "${WebApiDown}"  -Recurse -Force     
            Write-Host "${env:COMPUTERNAME} 操作成功,Bin路径 ${BinPath}" 
            return 0
          }else{       
            Write-Host "复制到bin目录失败" 
            return -4
          }
     }
     else{
        #-3 解压失败
        Write-Host "解压失败" 
        return -3
     }   
}

脚本简单的说明一下,首先我在自己电脑上搭建了一个IIS,用于存放需要更新下载的文件了;每一台IIS都是一样的,所以没必要每台都做备份,通过$NeedBakBin是否等于1告知脚本要不要备份原Api; 另外PowerShell有4种下载方式,我均尝试了,都差不多,任选一种即可;由于我经常需要VPN办公,所以脚本中使用压缩技术也是非常有必要的。

这里其实我遇到一个问题,但是不影响发布,就是在下载时,如果文件名是中文的,本地测试没问题,到了Server2016服务器就变成了文件名乱码,同时压缩包里面的文件如果有中文名称,在没解压时就已经乱码了,还好项目里没有中文名称,所以没问题,所以我这里尝试了4种下载,都不能解决文件中文名乱码的问题。

如何使用脚本请看第三章。

本文链接: https://www.pstips.net/powershell%e5%8f%91%e5%b8%83iis%ef%bc%88%e4%ba%8c%ef%bc%89.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注