IIS 服务器备份转移实现方法
程序员文章站
2024-01-30 18:05:46
原创文章:欢迎转载,转载时请保留作者名及出处 作者:jacksonluo 一:iis的服务器前期配置(其他的安全就不提了) (以 freeshare.com.cn为例 )...
原创文章:欢迎转载,转载时请保留作者名及出处
作者:jacksonluo
一:iis的服务器前期配置(其他的安全就不提了) (以 freeshare.com.cn为例 )
1.创建该域的(freeshare.com.cn)计算机用户名,并设置一个安全密码
2.创建该域的目录文件夹如(d:\inetpub\freeshare.com.cn)
3.设置目录访问权限,freeshare.com.cn对该目录完全控制(提供匿名用户访问该网站)
4.创建一个该域名的描述(公司名) 的单独应用进程池,为每一个虚拟主机创建独立的应用程序进程池,保个别网站的问题不会影响整台服务器的运行。创建进程池时可以单独设定用户名和密码并设置cpu,连接数等。这里采用的是默认的。
5.创建一个虚拟主机,并选择上面所创建的应用进程池,在目录安全性中选择匿名用户freeshare.com.cn,并设置与计算机创建freeshare.com.cn用户名的密码一致,必须一致,否则无法访问该网站。
ok,这个就对每个虚拟主机要做的,那么这些是不是需要全部的人工的去完成呢?答案是否定的,windows下也可以实现脚本编程哦,(呵呵我原来也是不知道的)
那么即然可以不用去手工完成,用什么呢?用vbscript脚本吧。
二:用脚本完成上述创建虚拟主机的动作
保存为createsiglewebsite.vbs
dim sitenum,ipaddr,portnum,lencomputer,webservercomment,logdirectory
dim user_password,groupname,tmpfolder,usernamecomp,webserverautostart
dim webanonymoususername
webservercomment="公司名"'网站描述、计算机用户描述及全名采用这个变量
usernamecomp="freeshare.com.cn"'计算机用户名及用户目录采用这个变量
hostname = ":80:www.freeshare.com.cn"'虚拟主机站点主机名
webanonymoususername = getcomputer()&"\"&usernamecomp'虚拟主机匿名用户(前面加了本地计算机名)
user_password = "**********"'计算机用户和匿名用户密码。
groupname = "guests"'计算机用户所在的组
ipaddr = ""'计算机ip地址,可以为空
tmpfolder = "d:\inetpub\"&usernamecomp'目标目录
lencomputer = len(getcomputer())+1'计算机名+'\'的长度
portnum = "80"'虚拟主机端口
webserverautostart = "true"'创建虚拟主机后是否运行true和false
logdirectory = ""'日志目录
'检测是否存在该用户的计算机帐号
if not checkuser(usernamecomp) then
'添加该计算机用户帐号
adduser getcomputer(),usernamecomp,user_password,webservercomment,webservercomment,groupname
else
wscript.echo "该计算机用户名也存在.............."
end if
'创建用户主目录
createfiledirectory(tmpfolder)
'修改用户主目录的访问权限
setntfsdirectoryperssion(usernamecomp)
'创建应用进程池
createapppool webservercomment
'创建虚拟主机站点
createwebsite getcomputer(),ipaddr,hostname,tmpfolder,logdirectory,webservercomment,usernamecomp,user_password,webserverautostart
'buildnum = buildnum+1
'wscript.echo "=============================================="&buildnum&"============================================="
'为每个iis虚拟主机应用程序站点创建站点应用程序池
function createapppool(strname)
on error resume next
err.clear
set objapppoolsexist = getobject("iis://"&getcomputer()&"/w3svc/apppools"&strname)
if err.number = 0 then
wscript.echo "该应用进程池已创建............."
set objapppoolsexist = nothing
exit function
else
set objapppools = getobject("iis://" & getcomputer() & "/w3svc/apppools")
err.clear
set objapppool = objapppools.create("iisapplicationpool", strname)
if err.number = 0 then
objapppool.apppoolidentitytype = 2 'runs as nt authority\network 3 run as specific user account 1 runs as nt authority\local service 0 runs as nt authority\system
objapppool.setinfo
if err.number = 0 then
createapppool = true
wscript.echo"应用程序"&strname&"创建成功!"
else
createapppool = false
wscript.echo"应用程序"&strname&"创建失败!"
end if
else
createapppool = false
end if
end if
set objapppool = nothing
set objapppools = nothing
set objapppoolsexist = nothing
end function
function createwebsite(strcomputer,ipaddr,webserverbingings,websitedirectory,logdirectory,websiteinfo,guestusername,guestuserpass,startorstop)
dim w3svc, webserver, newwebserver, newdir
dim bindings, bindingstring, newbindings, sitenum, siteobj, bdone
on error resume next
err.clear
'检测是否能够加载w3svc服务(即web服务)
set w3svc = getobject("iis://" & getcomputer() & "/w3svc")
if err.number <> 0 then '显示错误提示
wscript.echo "无法打开: "&"iis://" & getcomputer() & "/w3svc"
exit function
end if
'检测是否有设定相同ip地址、端口及主机名的站点存在
bindingstring = ipaddr & webserverbingings
for each webserver in w3svc
if webserver.class = "iiswebserver" then
bindings = webserver.serverbindings
if bindingstring = bindings(0) then
wscript.echo "虚拟主机:" & hostname & ",已存在,无法创建......!."
exit function
end if
end if
next
'确定一个不存在的站点编号做为新建站点编号,系统默认website站点编号为1,因此从2开始
sitenum=2
bdone = false
while (not bdone)
err.clear
set siteobj = getobject("iis://"&getcomputer()&"/w3svc/"&sitenum) '加载指定站点
if (err.number = 0) then
'wscript.echo " step_1站点"&sitenum&"存在"
sitenum = sitenum + 1
else
'wscript.echo " step_1站点"&sitenum&"不存在"
err.clear
set newwebserver = w3svc.create("iiswebserver",sitenum) '创建指定站点
if (err.number <> 0) then
wscript.echo sitenum&"创建失败"
sitenum = sitenum + 1
else
wscript.echo sitenum&"创建成功"
bdone = true
end if
end if
if (sitenum > 1000) then '服务器最大创建站点数
wscript.echo "超出服务器最大创建站点数,正在创建的站点的序号为: "&sitenum&"."
exit function
end if
wend
'进行站点基本配置
newbindings = array(0)
newbindings(0) = bindingstring
newwebserver.serverbindings = newbindings
newwebserver.servercomment= webservercomment
newwebserver.anonymoususername= guestusername
newwebserver.anonymoususerpass= guestuserpass
newwebserver.keytype = "iiswebserver"
newwebserver.frontpageweb = true
newwebserver.enabledefaultdoc = true
newwebserver.defaultdoc = "default.htm, default.asp, index.htm, index.asp,index.html,default.html"
newwebserver.logfiledirectory= logdirectory
newwebserver.setinfo
set newdir = newwebserver.create("iiswebvirtualdir", "root")
newdir.path = websitedirectory
newdir.accessread = true
newdir.appfriendlyname = webservercomment
newdir.appcreate true
newdir.accessscript = true
newdir.authntlm = true
newdir.appisolated = "2"
newdir.apppoolid = webservercomment
'newdir.appcreate3 2,websiteinfo,false
newdir.authflags = "authanonymous | authntlm" '集成windows身份验证
err.clear
newdir.setinfo
if (err.number <> 0) then
wscript.echo "主目录创建时出错."
exit function
end if
if startorstop = true then
err.clear
set newwebserver = getobject("iis://" & getcomputer() & "/w3svc/" & sitenum)
newwebserver.start
if err.number <> 0 then
wscript.echo "启动站点时出错!"
err.clear
end if
end if
wscript.echo "站点创建成功,站点编号为:"& sitenum &" ,域名为:"& webserverbingings
'setcpulimitvar strcomputer,sitenum,100 '调用cpu最大使用程度
end function
function getcomputer()
dim objnet
set objnet = createobject("wscript.network")
getcomputer= objnet.computername
set objnet = nothing
end function
function createfiledirectory(username)
set fsobject = createobject("scripting.filesystemobject")
on error resume next
err.clear
if not fsobject.folderexists(username) then
fsobject.createfolder(username)
if err.number<>0 then
wscript.echo "创建目录" & username & "失败!"
else
wscript.echo "创建目录" & username & "成功!"
end if
else
wscript.echo"目录" & username & "已存在,您不能创建!"
end if
set fsobject = nothing
end function
function setntfsdirectoryperssion(sourcedirectory)
dim wshshell,oexec
dim exedirectory
exedirectory = "c:\program files\resource kit\xcacls.exe c:\inetpub\"
orders_exec = exedirectory&sourcedirectory&" /e /t /g "&sourcedirectory&":f;f"
set wshshell = createobject("wscript.shell")
set oexec = wshshell.exec(orders_exec)
if oexec.status = 0 then
wscript.echo " 命令成功执行!"
else
wscript.echo " 命令执行失败!权限不够或者该程序无法在dos状态下运行"
end if
set wshshell= nothing
end function
function checkuser(struser)
on error resume next
'check if domain is already part of username passed to function
if instr(struser,"\") = 0 then
set objgrp = getobject("winnt://" & getcomputer() & "/" & struser & ",user")
else
set objgrp = getobject("winnt://" & replace(struser,"\","/") & ",user")
end if
if err.number = 0 then
checkuser = true
else
checkuser = false
end if
set objgrp = nothing
on error goto 0
end function
function adduser(computer,username,password,fullname,info,groupname)
dim intreturn,fsobject
on error resume next
'执行创建帐号命令
set computeraccoutobj = getobject("winnt://"&getcomputer()&"/"&username&",user")
if err.number=0 then
wscript.echo username&"计算机用户已存在...."
else
set computerobj = getobject("winnt://"&getcomputer())
set newuser = computerobj.create( "user" , username )
newuser.setinfo
'进行帐号设置
newuser.setpassword ( password ) '帐号密码
newuser.fullname = fullname '帐号全名
newuser.description = info '帐号说明
newuser.userflags = &h10000 xor &h0040 '&h20000(使用者下次登入时须变更密码) &h0040(使用者不得变更密码) &h10000(密码永久正确) &h0002(帐户暂时停用)
newuser.setinfo
wscript.echo "帐号"&username&"创建成功!"
set objselectgroup = getobject("winnt://" & getcomputer() & "/guests,group")
set objadduser = getobject("winnt://" & getcomputer() & "/" & username &",user")
objselectgroup.add(objadduser.adspath)
end if
set computerobj=nothing
set computeraccoutobj = nothing
set computeraccoutgroupobj = nothing
end function
作者:jacksonluo
一:iis的服务器前期配置(其他的安全就不提了) (以 freeshare.com.cn为例 )
1.创建该域的(freeshare.com.cn)计算机用户名,并设置一个安全密码
2.创建该域的目录文件夹如(d:\inetpub\freeshare.com.cn)
3.设置目录访问权限,freeshare.com.cn对该目录完全控制(提供匿名用户访问该网站)
4.创建一个该域名的描述(公司名) 的单独应用进程池,为每一个虚拟主机创建独立的应用程序进程池,保个别网站的问题不会影响整台服务器的运行。创建进程池时可以单独设定用户名和密码并设置cpu,连接数等。这里采用的是默认的。
5.创建一个虚拟主机,并选择上面所创建的应用进程池,在目录安全性中选择匿名用户freeshare.com.cn,并设置与计算机创建freeshare.com.cn用户名的密码一致,必须一致,否则无法访问该网站。
ok,这个就对每个虚拟主机要做的,那么这些是不是需要全部的人工的去完成呢?答案是否定的,windows下也可以实现脚本编程哦,(呵呵我原来也是不知道的)
那么即然可以不用去手工完成,用什么呢?用vbscript脚本吧。
二:用脚本完成上述创建虚拟主机的动作
保存为createsiglewebsite.vbs
复制代码 代码如下:
dim sitenum,ipaddr,portnum,lencomputer,webservercomment,logdirectory
dim user_password,groupname,tmpfolder,usernamecomp,webserverautostart
dim webanonymoususername
webservercomment="公司名"'网站描述、计算机用户描述及全名采用这个变量
usernamecomp="freeshare.com.cn"'计算机用户名及用户目录采用这个变量
hostname = ":80:www.freeshare.com.cn"'虚拟主机站点主机名
webanonymoususername = getcomputer()&"\"&usernamecomp'虚拟主机匿名用户(前面加了本地计算机名)
user_password = "**********"'计算机用户和匿名用户密码。
groupname = "guests"'计算机用户所在的组
ipaddr = ""'计算机ip地址,可以为空
tmpfolder = "d:\inetpub\"&usernamecomp'目标目录
lencomputer = len(getcomputer())+1'计算机名+'\'的长度
portnum = "80"'虚拟主机端口
webserverautostart = "true"'创建虚拟主机后是否运行true和false
logdirectory = ""'日志目录
'检测是否存在该用户的计算机帐号
if not checkuser(usernamecomp) then
'添加该计算机用户帐号
adduser getcomputer(),usernamecomp,user_password,webservercomment,webservercomment,groupname
else
wscript.echo "该计算机用户名也存在.............."
end if
'创建用户主目录
createfiledirectory(tmpfolder)
'修改用户主目录的访问权限
setntfsdirectoryperssion(usernamecomp)
'创建应用进程池
createapppool webservercomment
'创建虚拟主机站点
createwebsite getcomputer(),ipaddr,hostname,tmpfolder,logdirectory,webservercomment,usernamecomp,user_password,webserverautostart
'buildnum = buildnum+1
'wscript.echo "=============================================="&buildnum&"============================================="
'为每个iis虚拟主机应用程序站点创建站点应用程序池
function createapppool(strname)
on error resume next
err.clear
set objapppoolsexist = getobject("iis://"&getcomputer()&"/w3svc/apppools"&strname)
if err.number = 0 then
wscript.echo "该应用进程池已创建............."
set objapppoolsexist = nothing
exit function
else
set objapppools = getobject("iis://" & getcomputer() & "/w3svc/apppools")
err.clear
set objapppool = objapppools.create("iisapplicationpool", strname)
if err.number = 0 then
objapppool.apppoolidentitytype = 2 'runs as nt authority\network 3 run as specific user account 1 runs as nt authority\local service 0 runs as nt authority\system
objapppool.setinfo
if err.number = 0 then
createapppool = true
wscript.echo"应用程序"&strname&"创建成功!"
else
createapppool = false
wscript.echo"应用程序"&strname&"创建失败!"
end if
else
createapppool = false
end if
end if
set objapppool = nothing
set objapppools = nothing
set objapppoolsexist = nothing
end function
function createwebsite(strcomputer,ipaddr,webserverbingings,websitedirectory,logdirectory,websiteinfo,guestusername,guestuserpass,startorstop)
dim w3svc, webserver, newwebserver, newdir
dim bindings, bindingstring, newbindings, sitenum, siteobj, bdone
on error resume next
err.clear
'检测是否能够加载w3svc服务(即web服务)
set w3svc = getobject("iis://" & getcomputer() & "/w3svc")
if err.number <> 0 then '显示错误提示
wscript.echo "无法打开: "&"iis://" & getcomputer() & "/w3svc"
exit function
end if
'检测是否有设定相同ip地址、端口及主机名的站点存在
bindingstring = ipaddr & webserverbingings
for each webserver in w3svc
if webserver.class = "iiswebserver" then
bindings = webserver.serverbindings
if bindingstring = bindings(0) then
wscript.echo "虚拟主机:" & hostname & ",已存在,无法创建......!."
exit function
end if
end if
next
'确定一个不存在的站点编号做为新建站点编号,系统默认website站点编号为1,因此从2开始
sitenum=2
bdone = false
while (not bdone)
err.clear
set siteobj = getobject("iis://"&getcomputer()&"/w3svc/"&sitenum) '加载指定站点
if (err.number = 0) then
'wscript.echo " step_1站点"&sitenum&"存在"
sitenum = sitenum + 1
else
'wscript.echo " step_1站点"&sitenum&"不存在"
err.clear
set newwebserver = w3svc.create("iiswebserver",sitenum) '创建指定站点
if (err.number <> 0) then
wscript.echo sitenum&"创建失败"
sitenum = sitenum + 1
else
wscript.echo sitenum&"创建成功"
bdone = true
end if
end if
if (sitenum > 1000) then '服务器最大创建站点数
wscript.echo "超出服务器最大创建站点数,正在创建的站点的序号为: "&sitenum&"."
exit function
end if
wend
'进行站点基本配置
newbindings = array(0)
newbindings(0) = bindingstring
newwebserver.serverbindings = newbindings
newwebserver.servercomment= webservercomment
newwebserver.anonymoususername= guestusername
newwebserver.anonymoususerpass= guestuserpass
newwebserver.keytype = "iiswebserver"
newwebserver.frontpageweb = true
newwebserver.enabledefaultdoc = true
newwebserver.defaultdoc = "default.htm, default.asp, index.htm, index.asp,index.html,default.html"
newwebserver.logfiledirectory= logdirectory
newwebserver.setinfo
set newdir = newwebserver.create("iiswebvirtualdir", "root")
newdir.path = websitedirectory
newdir.accessread = true
newdir.appfriendlyname = webservercomment
newdir.appcreate true
newdir.accessscript = true
newdir.authntlm = true
newdir.appisolated = "2"
newdir.apppoolid = webservercomment
'newdir.appcreate3 2,websiteinfo,false
newdir.authflags = "authanonymous | authntlm" '集成windows身份验证
err.clear
newdir.setinfo
if (err.number <> 0) then
wscript.echo "主目录创建时出错."
exit function
end if
if startorstop = true then
err.clear
set newwebserver = getobject("iis://" & getcomputer() & "/w3svc/" & sitenum)
newwebserver.start
if err.number <> 0 then
wscript.echo "启动站点时出错!"
err.clear
end if
end if
wscript.echo "站点创建成功,站点编号为:"& sitenum &" ,域名为:"& webserverbingings
'setcpulimitvar strcomputer,sitenum,100 '调用cpu最大使用程度
end function
function getcomputer()
dim objnet
set objnet = createobject("wscript.network")
getcomputer= objnet.computername
set objnet = nothing
end function
function createfiledirectory(username)
set fsobject = createobject("scripting.filesystemobject")
on error resume next
err.clear
if not fsobject.folderexists(username) then
fsobject.createfolder(username)
if err.number<>0 then
wscript.echo "创建目录" & username & "失败!"
else
wscript.echo "创建目录" & username & "成功!"
end if
else
wscript.echo"目录" & username & "已存在,您不能创建!"
end if
set fsobject = nothing
end function
function setntfsdirectoryperssion(sourcedirectory)
dim wshshell,oexec
dim exedirectory
exedirectory = "c:\program files\resource kit\xcacls.exe c:\inetpub\"
orders_exec = exedirectory&sourcedirectory&" /e /t /g "&sourcedirectory&":f;f"
set wshshell = createobject("wscript.shell")
set oexec = wshshell.exec(orders_exec)
if oexec.status = 0 then
wscript.echo " 命令成功执行!"
else
wscript.echo " 命令执行失败!权限不够或者该程序无法在dos状态下运行"
end if
set wshshell= nothing
end function
function checkuser(struser)
on error resume next
'check if domain is already part of username passed to function
if instr(struser,"\") = 0 then
set objgrp = getobject("winnt://" & getcomputer() & "/" & struser & ",user")
else
set objgrp = getobject("winnt://" & replace(struser,"\","/") & ",user")
end if
if err.number = 0 then
checkuser = true
else
checkuser = false
end if
set objgrp = nothing
on error goto 0
end function
function adduser(computer,username,password,fullname,info,groupname)
dim intreturn,fsobject
on error resume next
'执行创建帐号命令
set computeraccoutobj = getobject("winnt://"&getcomputer()&"/"&username&",user")
if err.number=0 then
wscript.echo username&"计算机用户已存在...."
else
set computerobj = getobject("winnt://"&getcomputer())
set newuser = computerobj.create( "user" , username )
newuser.setinfo
'进行帐号设置
newuser.setpassword ( password ) '帐号密码
newuser.fullname = fullname '帐号全名
newuser.description = info '帐号说明
newuser.userflags = &h10000 xor &h0040 '&h20000(使用者下次登入时须变更密码) &h0040(使用者不得变更密码) &h10000(密码永久正确) &h0002(帐户暂时停用)
newuser.setinfo
wscript.echo "帐号"&username&"创建成功!"
set objselectgroup = getobject("winnt://" & getcomputer() & "/guests,group")
set objadduser = getobject("winnt://" & getcomputer() & "/" & username &",user")
objselectgroup.add(objadduser.adspath)
end if
set computerobj=nothing
set computeraccoutobj = nothing
set computeraccoutgroupobj = nothing
end function
程序完,你只要把上面的程序保存在以 *.vbs windows目录下,就可以直接执行了,
上面用到了一个xcacls的修改ntfs权限的小程序,您可以从微软官方网站下载,你也可以访问下载安装既可。
另外部分见iis服务器备份转移解决方案(二)
另外部分见iis服务器备份转移解决方案(二)