• PowerShell自动部署ASP.NET Core程序到 IIS


    Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。有关于更多PowerShell的信息,可参阅百度词条

    接下我们就要借助PowerShell来自动部署ASP.NetCore程序。

    打开PowerShell

    打开开始菜单,输入 PowerShell 进行搜索就可以看到它了

    WebAdministration

    首先我们要引入PowerShell中的WebAdministration模块,这样就可以对IIS进行相关的操作了

        
    Import-Module WebAdministration

    DotNetCore.WindowsHosting

    要在IIS中运行ASP.NetCore程序,首先要安装DotNetCore.WindowsHosting,如果已经安装,可以跳过该步骤

    下载DotNetCore.WindowsHosting并安装它

    Invoke-WebRequest -Uri "https://aka.ms/dotnetcore.2.0.0-windowshosting" -OutFile "DotNetCore.WindowsHosting.exe"
    Start-Process "DotNetCore.WindowsHosting.exe" -Wait

    安装完DotNetCore.WindowsHosting之后,要重启IIS服务

    Invoke-Expression "net stop was /y"
    Invoke-Expression "net start w3svc"

    可以使用以下命令来检测ASPNetCoreModule是否已安装

    Get-WebGlobalModule -Name AspNetCoreModule -ErrorAction Ignore

    程序部署,IIS设置

    在IIS中部署程序要做两件事件,1. 创建一个应用程序池,2. 创建一个网站并使用这个应用程序池

    接下来要创建一个应用程序池,名称为TestApp

    New-Item -path IIS:AppPoolsTestApp

    把应用程序池的.Net版本设置为无托管代码

    Set-ItemProperty -Path IIS:AppPoolsTestApp -Name managedRuntimeVersion -Value ''

    创建了应用程序池之后,就要创建一个网站,并使用刚创建的应用程序池TestApp,将网站的名称设置为TestSite,并指向你的网站路径如C:TestSite

    New-Website -name TestSite -PhysicalPath "C:TestSite" -ApplicationPool TestApp -Port 8080

    最后就可以打开浏览器进行访问了

        
    Invoke-Expression "cmd.exe /C start http://localhost:8080"

    完整脚本

    以上是在用PowerShell部署到IIS时的关键命令,知道了这些就可以来写一个完整自动部署脚本了。以部署ZKEACMS为例,创建一个名为ZKEACMS.ps1的文件,并将以下代码粘贴到文件中保存。

    该脚本中包含了对IIS的检测,DotNetCore.WindowsHosting的检测和安装,在线下载程序并解压等:

    Add-Type -AssemblyName System.IO.Compression.FileSystem
    Import-Module WebAdministration
    $WebPath=[environment]::CurrentDirectory + "KEACMS";
    Write-Host "Welcome to use ZKEACMS, visit our website(http://www.zkea.net) for more information"
    Write-Host "ZKEACMS will install to $WebPath"
    Write-Host "After installation, you can visit the site with http://localhost:8080"
    Write-Host "Installation started. Press Ctrl+C to stop."
     
    Write-Host "Checking IIS status..."
    $iis = Get-Service W3SVC -ErrorAction Ignore
    if($iis){
        if($iis.Status -eq "Running") {
            Write-Host "IIS Service is running"
        }
        else {
            Write-Host "IIS Service is not running"
        }
    }
    else {
        Write-Host "Checking IIS failed, please make sure IIS is ready."   
    }
    $aspNetCoreModule = Get-WebGlobalModule -Name AspNetCoreModule -ErrorAction Ignore
    if($aspNetCoreModule)
    {
        Write-Host "IIS ASPNetCoreModule is ready:"
        Write-Host $aspNetCoreModule.Name $aspNetCoreModule.Image
    }
    else
    {
        Write-Host "Downloading DotNetCore.WindowsHosting."
        if(Test-Path -Path "DotNetCore.WindowsHosting.exe")
        {
            Remove-Item -Path "DotNetCore.WindowsHosting.exe" -Force
        }
        Invoke-WebRequest -Uri "https://aka.ms/dotnetcore.2.0.0-windowshosting" -OutFile "DotNetCore.WindowsHosting.exe"
         
        Write-Host "Installing DotNetCore.WindowsHosting."
        Start-Process "DotNetCore.WindowsHosting.exe" -Wait
        if(Test-Path -Path "DotNetCore.WindowsHosting.exe")
        {
            Remove-Item -Path "DotNetCore.WindowsHosting.exe" -Force
        }
    }
     
    Write-Host "Downloading ZKEACMS application package."
    if(Test-Path -Path "ZKEACMS.zip")
    {
        Remove-Item -Path "ZKEACMS.zip" -Force
    }
    Invoke-WebRequest -Uri "http://cdn.zkeasoft.com/core/cms.zip" -OutFile "ZKEACMS.zip"
     
    Write-Host "Unzip ZKEACMS application package."
    if(Test-Path "ZKEACMS")
    {
        Remove-Item -Path "ZKEACMS" -Force -Recurse
    }
    [System.IO.Compression.ZipFile]::ExtractToDirectory("ZKEACMS.zip" ,"ZKEACMS")
     
    Write-Host "Setting up IIS."
    if(!(Test-Path IIS:AppPoolsKEACMS))
    {
        New-Item -path IIS:AppPoolsKEACMS
    }
    Set-ItemProperty -Path IIS:AppPoolsKEACMS -Name managedRuntimeVersion -Value ''
    if(Test-Path IIS:SitesKEACMS)
    {
        Remove-Website ZKEACMS
    }
    New-Website -name ZKEACMS -PhysicalPath $WebPath -ApplicationPool ZKEACMS -Port 8080
    Invoke-Expression "net stop was /y"
    Invoke-Expression "net start w3svc"
    Invoke-Expression "cmd.exe /C start http://localhost:8080"
    if(Test-Path -Path "ZKEACMS.zip")
    {
        Remove-Item -Path "ZKEACMS.zip" -Force
    }
    Write-Host "ZKEACMS installed successfully."

    执行脚本

    执行脚本的方式很简单,可以在PowerShell的控制台中直接使用脚本的名称即可(注意路径)

    ./ZKEACMS.ps1

    或者可以直接鼠标右键该脚本文件,然后选择菜单中的使用 PowerShell 运行

    如果你的脚本在网络上,可以直接在控制台中使用以下脚本来运行而不用下载它,例如可以使用以下脚本来在线安装ZKEACMS:

    @powershell -NoProfile -ExecutionPolicy unrestricted -Command "&([scriptblock]::Create((Invoke-WebRequest -useb 'http://cdn.zkeasoft.com/core/win-zkeacms.ps1')))"
  • 相关阅读:
    Expert Shell Scripting
    tr [a-z] [A-Z]
    ssh
    scp
    sort 命令
    cut 命令使用
    oracle 对象权限 系统权限 角色权限
    从linux内核中学到的编程技巧 【转】
    2019.3.16 最小生成树之城市改造
    2019.1.23 01迷宫
  • 原文地址:https://www.cnblogs.com/MingQiu/p/8979075.html
Copyright © 2020-2023  润新知