Windows PowerShell 是一種命令行外殼程式和腳本環境,使命令行用戶和腳本編寫者可以利用 .NET Framework的強大功能。接下我們就要藉助PowerShell來自動部署ASP.NetCore程式。 ...
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