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
}

 

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