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:\AppPools\TestApp

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

Set-ItemProperty -Path IIS:\AppPools\TestApp -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 + "\ZKEACMS";
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:\AppPools\ZKEACMS))
{
New-Item -path IIS:\AppPools\ZKEACMS
}
Set-ItemProperty -Path IIS:\AppPools\ZKEACMS -Name managedRuntimeVersion -Value ''
if(Test-Path IIS:\Sites\ZKEACMS)
{
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')))"

原文地址:http://www.zkea.net/codesnippet/detail/post-87

使用PowerShell自动部署ASP.NetCore程序到IIS的更多相关文章

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

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

  2. 利用Powershell自动部署asp.net mvc网站项目 (一)

    这一篇中我们会写一些关于自动化部署的代码.我们会使用 Powershell 书写这类代码. 你将发现这篇文章中涉及的东西非常具体,有的要求甚至相当苛刻且可能不具有通用性.这是因为部署从来都是跟环境打交 ...

  3. PowerShell自动部署网站—(1)、安装IIS[添加角色和角色服务]

    #------添加角色/角色服务------ Import-Module servermanager $features = get-windowsfeature Net-*,Telnet-*,Web ...

  4. 自动部署Asp.Net Core到Docker

    原文链接:个人博客:自动部署Asp.Net Core至Docker 本文简介 最近在开发一个管理系统,代码框架是用的前后台分离的方式 后台使用的是Asp.Net Core平台,开发所有业务,向前台提供 ...

  5. Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二)

    Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(一) 接上一篇 3. Nginx配置反向代理 3.1 cnetos 安装nginx 首先,我们需要在服务器上安装N ...

  6. Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(一)

    环境 本地 win7 服务器:Virtual Box 上的Centos ssh工具: Xshell 文件传输: xftp 1.在本地创建asp.net core应用发布 1.1 使用Vs2017 新建 ...

  7. Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践

    原文:Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践 环境 本地 win7 服务器:Virtual Box 上的Centos ssh工具: Xshell 文件传输 ...

  8. Gitlab CI 自动部署 asp.net core web api 到Docker容器

    为什么要写这个? 在一个系统长大的过程中会经历不断重构升级来满足商业的需求,而一个严谨的商业系统需要高效.稳定.可扩展,有时候还不得不考虑成本的问题.我希望能找到比较完整的开源解决方案来解决持续集成. ...

  9. VS2010部署Asp.net程序到本地IIS 7

        部署自己的网站到本地IIS 当你做一个网站,你想要在局域网访问的时候,你就可以部署到自己的IIS中然后他们通过 ip 去访问.下面就是怎么部署Asp.net 的网站怎么到本地IIS 上的. 1 ...

随机推荐

  1. 使用json格式去call外部系统

    1. 使用postman去call post方式 body填入对应的json请求 格式选json 2. 使用java 代码去call import java.io.BufferedReader; im ...

  2. mybatis 传入集合参数遍历 查询总结

    出自:http://blog.csdn.net/u013628152/article/details/51184641 1. findByIds(List ids) 如果参数的类型是List, 则在使 ...

  3. AutoMapper差异内容备份

    公司就得项目用的automapper 是 4.2.1 当时用的方法是:Mapper.CreateMap<source,sourceDto>(); 在最新版 6.0.1 中,这些个方法被删除 ...

  4. elasticsearch must和should组合查询

    {"query": { "bool": { "should": [ {"bool": { "must" ...

  5. Dev的双击Gridview的DoubleClick

    注意: 是GridView的Double而不是GridControlprivate void gridView1_DoubleClick(object sender, EventArgs e){    ...

  6. 使用Cloudrea Manager在CDH集群中添加kafka服务节点,更改borker.id配置后无法启动

    需要保证meta.properties文件中的broker.id和cloudrea manager的web页面上kafka配置的broker.id一致,最好让server.properties中的br ...

  7. Unity3d 下websocket的使用

    今天介绍一下如何在Unity3D下使用WebSocket. 首先介绍一下什么是websocket,以及与socket,和http的区别与联系,然后介绍一下websocket的一些开源的项目. WebS ...

  8. Centos7 安装Nginx服务

    第一种方式:通过yum安装 直接通过 yum install nginx 肯定是不行的,因为yum没有nginx,所以首先把 nginx 的源加入 yum 中. 运行下面的命令: 1.将nginx放到 ...

  9. windows命令行下批量拷贝同一后缀的文件到另外一个目录

    一个目录下有很多文件夹,想拷贝每个文件夹下面的wmv文件到另外一个目录,如果鼠标打开一个文件,拷贝一个,再打开其他的,逐一操作,很麻烦的,百度了一下,xcopy命令就可以实现:例如将C盘x1目录下所有 ...

  10. 常用的 Python 调试工具,Python开发必读-乾颐堂

    以下是我做调试或分析时用过的工具的一个概览.如果你知道有更好的工具,请在评论中留言,可以不用很完整的介绍. 日志 没错,就是日志.再多强调在你的应用里保留足量的日志的重要性也不为过.你应当对重要的内容 ...