工作中经常会遇到需要在客户端主机架站的情况,
如果客户端只有一台主机,手动布署或许不会花太多时间,
但若同时会有多台主机运行,可能就必须花上一整天,甚至好几天的时间,
重复进行安装软件、调整系统参数这些琐碎的动作,
不仅浪费掉许多时间,手动布署站台主机也可能会有部分作业漏做的风险。
这时候可以写一个bat档,让主机自动执行需要执行的动作,
这样做的优点是:
以下用一个简单的范例说明如何包出一个环境布署用的bat档。
本篇范例想要做到的项目如下:
Web
在开始之前,先准备好需要的软件安装档,以及要复制到主机的档案A.txt,
另外,我们通常都会希望这个bat档可以重复使用,
所以首先需要宣告在不同的情况下,可能会变动的参数。
使用文字编辑器开启一份新文件,先另存档案为install.bat,接着填入以下参数:
::站台根目录
set "WebPath=C:\Web"
::设定传输协定
set "Protocol=http"
::设定DOMAIN
set "DomainName=test.com.tw"
::设定WEB DOMAIN
set "WebUrl=%Protocol%:\\%DomainName%"
接下来依照想要做到的项目顺序,将动作转为cmd指令。
前面已经将站台根目录设定为参数了,在参数前後加上"%参数%"
,该指令就可以使用参数值。
md "%WebPath%
搬移档案前,先确保目前所在目录是我们准备的A.txt及schedule.bat存放的目录。
cd /D %~dp0
接着再把这两个档案放到C:\Web下,
其中,执行XCOPY时,如果目的地的档案或资料夹不存在,
会要求我们选择复制到目的地的是档案或是资料夹,
这会中断bat档的执行,因此在XCOPY前先设定F
参数,预先指定复制到目的地的是一个档案,
结尾的/Y
参数则代表不跳出是否要覆写已存在的目的地档案的提示。
echo F |XCOPY "A.txt" "%WebPath%\A.txt" /Y
echo F |XCOPY "schedule.bat" "%WebPath%\schedule.bat" /Y
若要复制到主机的是一个资料夹,在XCOPY前可以设定参数D
,指定复制到目的地的是资料夹。
echo D |XCOPY "testDirectory" "%WebPath%\testDirectory" /Y
为了不中断bat档的执行,使用/S
参数设定Notepad++在安静模式下安装。
npp.8.3.3.Installer.x64.exe /S
由於要批次开启多个Windows功能,这里另外使用一个powershell档InstallIIS.ps1
,
新增一个新文件,先另存档案为InstallIIS.ps1
後,编写以下指令:
#以系统管理员身分执行powershell
param([switch]$Elevated)
function Test-Admin {
$currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
$currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}
if ((Test-Admin) -eq $false) {
if ($elevated) {
# tried to elevate, did not work, aborting
} else {
Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
}
exit
}
#根据需求开启WINDOWS功能
Enable-WindowsOptionalFeature -Online -FeatureName IIS-WebServerRole -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-WebServer -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-CommonHttpFeatures -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-HttpErrors -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-ApplicationDevelopment -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-NetFxExtensibility45 -ALL
Enable-WindowsOptionalFeature -Online -FeatureName IIS-HealthAndDiagnostics -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-HttpLogging -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-LoggingLibraries -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-RequestMonitor -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-HttpTracing -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-Security -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-RequestFiltering -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-Performance -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-WebServerManagementTools -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-StaticContent -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-DefaultDocument -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-DirectoryBrowsing -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-WebSockets -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-ApplicationInit -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-ASPNET45 -ALL
Enable-WindowsOptionalFeature -Online -FeatureName IIS-ISAPIExtensions -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-ISAPIFilter -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-HttpCompressionStatic -All
Enable-WindowsOptionalFeature -Online -FeatureName IIS-ManagementConsole -All
接着回到install.bat
补上使用PowerShell执行InstallIIS.ps1的指令。
PowerShell.exe -ExecutionPolicy UnRestricted -File InstallIIS.ps1
::=====建立应用程序集区=====
::建立应用程序集区TEST,并设定启动模式为AlwaysRunning
%windir%\System32\inetsrv\APPCMD ADD APPPOOL /name:TEST /managedRuntimeVersion:"v4.0" /startMode:AlwaysRunning
::=====建立应用程序目录=====
::变更IIS根目录为C:\Web,应用程序集区为TEST
%windir%\System32\inetsrv\APPCMD SET SITE /site.name:"Default Web Site" /[path='/'].applicationPool:TEST -[path='/'].[path='/'].physicalPath:"%WebPath%" -[path='/'].preloadEnabled:true
把站台的DomainName mapping到本机localhost。
find /i "%DomainName%" %WINDIR%\system32\drivers\etc\hosts
if /i not %DomainName%==localhost (
if /i not %DomainName%==127.0.0.1 (
IF %errorlevel% equ 1 (
echo. >> %WINDIR%\system32\drivers\etc\hosts & echo 127.0.0.1 %DomainName% >> %WINDIR%\System32\drivers\etc\hosts
)
)
)
步骤2提到要将schedule.bat
搬移到C:\Web底下,这一个schedule.bat
为执行排程的指令档,
在schedule.bat
里面编写的是IIS Restart的指令:
iisreset /restart
回到install.bat
中编写执行排程的指令:
schtasks /Create /TR %WebPath%\schedule.bat /ST 23:30 /TN IIS_RESTART /SC DAILY /RU system
这样就完成一个自动布署的bat档了!
最後记得检查一下所有需要的程序和文件都放在同一个资料夹
要执行自动布署bat档时,使用系统管理员身分开启命令提示字元,
然後cd到setup资料夹,执行install.bat就可以罗!
>>: 【2022】忘记 Apple ID 密码?教你四个超实用破解技巧!
使用 styled 方式 这个方式其实是 emotion 参考 styled-component,...
useContext useContext 本质上是 Context 的语法糖, 精简了 Conte...
学习PHP前的准备,就是开发环境与执行环境的部署,就像上学前要先准备铅笔、课本、背包,最重要的是一颗...
tags: ItIron2021 Javascript 前言 我们前两天都把心力分给可爱的闭包,又是...
新增功能完成後,接着是待办事项列表与删除待办事项。 前两天为了说明前後端应用程序和关联把文章写得有点...