>> 点击上方 懒人MES 关注我们
之前有写过一篇"教你两分钟使用ASP.NET CORE创建并发布一个Web应用“,今天分享一篇Powershell实例“只需2秒钟实现在IIS上面新建站点并发布Web应用”。在过去的一年工作中接触到很多服务器上应用迁移的任务,其中很多应用都是通过IIS发布的Web站点,为了方便迁移于是用Powershell搞了一个脚本,可以方便的把一个Web应用从一个服务器迁移到另一个服务器。
开始前请确保目标服务器或者自己测试的电脑上已经启用了IIS
然后执行Powershell脚本,脚本中的操作逻辑包括:
在新服务器上新建应用池和站点
在新服务器防火墙创建对应端口的入站规则(不添加的话服务器外的客户端无法访问该端口)
将原有的Web应用源文件拷贝到新服务器
脚本如下:
Import-Module IISAdministration# 指定应用池名,站点名,应用源文件存放路径$iisAppPoolName = "MyTestWebApplication"$iisAppName = "MyTestWebApplication"$iisAppPath = "C:\inetpub\wwwroot\$iisAppName"$manager = Get-IISServerManagerWrite-Host "检查站点名'$iisAppName'是否已经存在"# 如果不存在,我们可以进行添加该站点if ($manager.ApplicationPools[$iisAppPoolName] -eq $null){ Write-Host "如果需要添加的路径'$iisAppPath'不存在,那么新建该路径" if (!(Test-Path $iisAppPath -pathType container)) { # 添加该路径文件夹 mkdir $iisAppPath Write-Host "新建路径 '$iisAppPath'" } # 应用池配置定义 $pool = $manager.ApplicationPools.Add($iisAppPoolName) $pool.ManagedPipelineMode = "Integrated" $pool.ManagedRuntimeVersion = "v4.0" $pool.Enable32BitAppOnWin64 = $false $pool.AutoStart = $true $pool.StartMode = "OnDemand" $pool.ProcessModel.IdentityType = "ApplicationPoolIdentity" $manager.CommitChanges() echo "新建站点..." $site = $manager.Sites.Add($iisAppName, "http", "*:51000:", $iisAppPath) $site.Applications["/"].ApplicationPoolName = $iisAppPoolName $manager.CommitChanges() echo "在新建的路径文件'$iisAppPath'的访问控制中添加'$iisAppPoolName'对应安全标识符,以此标识来保护资源" # 获取安全标识符,并添加到新建文件的访问控制列表中 $appPoolSid = $pool.RawAttributes["applicationPoolSid"] $objAppPoolSid = New-Object System.Security.Principal.SecurityIdentifier ($appPoolSid) $poolUser = $objAppPoolSid.Translate([System.Security.Principal.NTAccount]) $rule = New-Object System.Security.AccessControl.FileSystemAccessRule -ArgumentList @($poolUser.Value, "FullControl", "ContainerInherit, ObjectInherit", "None", "Allow") $aclObj = Get-Acl $iisAppPath $aclObj.AddAccessRule($rule) Set-Acl -Path $iisAppPath -AclObject $aclObj | Out-Null Write-Host "新站点'$iisAppName'添加完成"}else{ Write-Host "新站点'$iisAppName'已存在"}# -----------------------------------------------------------------------------# 添加防火墙的入站规则,如果不添加无法在外部客户端访问新定义的51000端口# 可以使用xxx-xxx的方式开放多个端口,如下$Ports='51000-51005'$RuleName='MyTestApplication'$RuleDescription='port for MyTestApplication'Write-Host "`n`n检查入站规则'$RuleName'是否已存在"$fwr = Get-NetFirewallRule -DisplayName $RuleName -ErrorAction SilentlyContinueif ($fwr){ Write-Host "$RuleName 已存在"}else{ Write-Host "正在新建入站规则 '$RuleName' 并开放端口 $Ports" New-NetFirewallRule ` -DisplayName $RuleName ` -Description $RuleDescription ` -Direction Inbound ` -Profile @('Domain', 'Private') ` -Protocol TCP ` -LocalPort $Ports Write-Host "入站规则添加完成"}if (Test-Path $iisAppPath -pathType container) { # 将旧服务器中Web应用的源文件全部复制到$iisAppPath路径中 Copy-Item \\SOURCESERVER\inetpub\wwwroot\SourceWebAPP\* $iisAppPath }
执行完我们可以看到IIS中新应用池和站点已经创建,防火墙中入站规则已经创建,Web应用源文件已经复制过来
- 迁移已经完成,此时我们已经可以在IIS所在的服务器或电脑上通过http://localhost:51000/访问,或者是在客户端通过http://HOSTNAME:51000/访问