Powshell发布远程IIS站点时用到的命令以及相关远程访问命令遇到的问题

注意应用程序服务器授权的处理:

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
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章