使用vbs脚本检查网站是否使用asp.net

简介:
Const AspNetExt="aspx"
Dim Obj,Fso,F,Val,i
Set Obj=New IISClass
Set Fso=CreateObject("Scripting.FileSystemObject")
Set F = Fso.CreateTextFile("是否有Net程序.txt", True)
Obj.GetIIS
i=0
For Each Val In Obj.Site
 i=i+1
 WScript.Echo Fill(i,4) & "正在检测站点 " & Val.Name & " 是否有" & AspNetExt & "文件:"
 Path=Val.Path
 If CheckAspNet(Path) Then
  WScript.Echo vbTab & "有"
  F.WriteLine Fill(Val.Name,25) & Path
 Else
  WScript.Echo vbTab & "没有"
 End If
Next
F.Close()
Set Fso=Nothing
Set Obj=Nothing
Function CheckAspNet(ByRef Path)
 Dim F,Folder,Files,fName,ExtName,dPath
 Dim Fso
 Set Fso=CreateObject("Scripting.FileSystemObject")
 Set F=Fso.GetFolder(Path)
 CheckAspNet=False
 For Each Files In F.Files
  fName=Files.Name
  ExtName=Fso.GetExtensionName(Path & "\" & fName)
  If LCase(ExtName)=LCase(AspNetExt) Then
   CheckAspNet=True
   Exit Function
  End If
 Next
 For Each Folder In F.SubFolders
  dPath=Path & "\" & Folder.Name
  If CheckAspNet(dPath) Then
   CheckAspNet=True
   Exit Function
  End If
 Next
 Set F=Nothing
 Set Fso=Nothing
End Function

Function Fill(byRef Str,byRef L)
 Dim Tmp
 If CLng(L)<=Len(Str) Then
  Fill=Str
  Exit Function
 End If
 Tmp=Str & Space(L)
 Fill=Left(Tmp,L)
End Function

'IIS操作类,包含创建应用程序池、站点和用户的功能
Class IISClass
 Public Site()
 Public AppPool()
 Private SiteN,PoolN
 Private AnonyMouseName,ComputerName
 Private AppPoolAndIIsSplitStr,SplitStr
 Private CreateSiteTmpNum
 Private Sub Class_Initialize()
  SiteN=0
  PoolN=0
  ComputerName=GetComputerName
  AnonyMouseName="IUSR_" & ComputerName
  AppPoolAndIIsSplitStr=vbCrlf & "|AppPoolEndIIsStart|" & vbCrLf  '生成备份文件时,应用程序池和IIS站点信息的分隔线
  SplitStr="<|>"
  CreateSiteTmpNum=0
 End Sub
 
 '获取当前计算机的名称
 Private Function GetComputerName()
  Dim ObjNetWork,NetworkStr
  NetworkStr="Wscript.Network"
  Set objNetwork = CreateObject(NetworkStr)
  GetComputerName = objNetwork.ComputerName
  Set ObjNetWork=Nothing
 End Function
 
 '把域名绑定的对象转换成数组的原始数据
 Private Function DomainObjToArr(ByRef Obj)
  Dim Tmp(),Val,i,s
  i=0
  s=""
  For Each Val In Obj
   ReDim Preserve Tmp(i)
   s=Val.IP & ":" & Val.Port & ":" & Val.Domain
   Tmp(i)=s
   i=i+1
  Next
  DomainObjToArr=Tmp
 End Function
 '把用户添加到指定的组中
 Public Function AddUserToGroup(byRef UserName,byRef GroupName,ByRef ErrMsg)
  Dim Obj,GroupObj
  AddUserToGroup=False
  On Error Resume Next
  Err.Clear
  Set Obj=GetObject("WinNT://" & ComputerName)
  If Err.number<>0 Then
   ErrMsg="无法使用ADSI功能"
   Exit Function
  End If
  Err.Clear
  Set GroupObj=Obj.GetObject("Group",GroupName)
  If Err.number<>0 Then
   ErrMsg="控制用户组失败,请检查组的名称是否正确"
   Exit Function
  End If
  Err.Clear
  GroupObj.add("WinNT://" & ComputerName & "/" & UserName)
  If Err.number<>0 Then
   ErrMsg="在把用户添加到组中时出现错误,可能是该组中已存在此用户"
   Exit Function
  End If
  AddUserToGroup=True
  Set Obj=Nothing
  Set GroupObj=Nothing
 End Function
 '创建一个用户
 Function CreateUser(byRef UserName,byRef UserPass,byRef FullName,byRef ExtInfo,ByRef ErrMsg)
  Dim ComputerObj,NewUser
  CreateUser=False
  On Error Resume Next
  Err.Clear
  Set ComputerObj = GetObject("WinNT://"& ComputerName)
  If Err.number<>0 Then
   ErrMsg="无法使用ADSI功能"
   Exit Function
  End If
  Err.Clear    
  Set NewUser = ComputerObj.Create("User" , UserName)  
  NewUser.SetInfo
  If Err.number<>0 Then
   ErrMsg="创建用户出错" & Err.Description
   Exit Function
  End If
  Err.Clear
  '进行帐号设置
  NewUser.SetPassword UserPass '帐号密码
  NewUser.FullName=FullName  '帐号全名
  NewUser.Description=ExtInfo  '帐号说明
  NewUser.UserFlags=&H10040  '&H20000(使用者下次登入时须变更密码) &H0040(使用者不得变更密码) &H10000(密码永久正确) &H0002(帐户暂时停用)
  NewUser.SetInfo
  If Err.number<>0 Then
   ErrMsg="设置用户信息时出错" & Err.Description
   Exit Function
  End If
  Set ComputerObj=nothing
  CreateUser=True
 End Function
 
 '创建一个应用程序池
 Public Function CreateAppPool(ByRef AppPoolObj,ByRef ErrMsg)
  Dim ServerObj, AppObj
  CreateAppPool=False
  On Error Resume Next
  Set ServerObj = GetObject("IIS://Localhost/W3SVC/AppPools")
  Err.Clear
  Set AppObj = ServerObj.Create("IIsApplicationPool", AppPoolObj.Name)
  AppObj.SetInfo
  If Err.Number <> 0 Then
   ErrMsg="创建应用程序池出错" & Err.Description
   Exit Function
  End If
  Set AppObj=Nothing
  Set ServerObj=Nothing
  CreateAppPool=True
 End Function
 '设置站点的应用程序池
 Public Function SetSiteAppPool(ByRef SiteObj,ByRef ErrMsg)
  Dim WWWServer,Obj
  SetSiteAppPool=False
  On Error Resume Next
  Err.Clear
  Set WWWServer = GetObject(SiteObj.AdsPath & "/ROOT")
  WWWServer.AppPoolId=SiteObj.AppPool
  WWWServer.SetInfo
  If Err.Number<>0 Then
   ErrMsg="设置站点的应用程序池时出错"
   Exit Function
  End If
  Set WWWServer=Nothing
  SetSiteAppPool=True
 End Function
 
 '设置站点的用户名和密码
 Public Function SetSiteUser(ByRef SiteObj,ByRef ErrMsg)
  Dim WWWServer,Obj
  SetSiteUser=False
  If SiteObj.User<>"" And SiteObj.Password<>"" Then
   On Error Resume Next
   Err.Clear
   Set WWWServer = GetObject(SiteObj.AdsPath & "/ROOT")
   WWWServer.AnonymousUserName=SiteObj.User
   WWWServer.AnonymousUserPass=SiteObj.Password
   WWWServer.SetInfo
   If Err.Number<>0 Then
    ErrMsg="设置站点的用户名和密码时出错"
    Exit Function
   End If
   Set WWWServer=Nothing
  Else
   ErrMsg="没有设置用户名和密码"
   Exit Function
  End If
  SetSiteUser=True
 End Function

 '创建一个站点,由于便与分析出错信息,此处创建站点只创建最基本的属性(站点名称,绑定域名,站点目录)
 Public Function CreateSite(ByRef SiteObj,ByRef ErrMsg)
  '默认从配置文件中获取的信息不会出错,不再写容错处理程序
  Dim WWWServer,IIsAdsNum,TmpObj,VDirObj,ServerObj
  CreateSite=False
  On Error Resume Next
  Set WWWServer = GetObject("IIS://Localhost/W3SVC")
  IIsAdsNum=SiteObj.AdsNum
  Err.Clear
  Set TmpObj = WWWServer.GetObject("IIsWebServer", IIsAdsNum)
  If Err.Number = 0 Then
   Err.Clear
   '程序执行没有出错说明该站点已存在
   ErrMsg = "该服务器已经存在和此站点AdsPath相同的站点"
   Exit Function
  End If
  '开始创建站点
  Err.Clear
        Set ServerObj = WWWServer.Create("IIsWebServer", IIsAdsNum)
  If Err.Number <> 0 Then
   ErrMsg = "创建站点失败"
   Exit Function
  End If
  '配置站点
  Err.Clear
  ServerObj.ServerComment = SiteObj.Name
  ServerObj.LogType=SiteObj.LogType
  If SiteObj.LogType Then
   ServerObj.LogFileDirectory=SiteObj.LogDir
  End If
  ServerObj.ServerBindings = DomainObjToArr(SiteObj.Domains)
  ServerObj.SetInfo
  If Err.Number <> 0 Then
   ErrMsg = "配置站点时出错"
   Exit Function
  End If
  '建立ROOT虚拟目录
  Err.Clear
  Set VDirObj = ServerObj.Create("IIsWebVirtualDir", "ROOT")
  If Err.Number <> 0 Then
   ErrMsg = "创建ROOT虚拟目录失败"
   Exit Function
  End If
  '默认ROOT信息
  Err.Clear
  VDirObj.Path=SiteObj.Path
  VDirObj.DefaultDoc=SiteObj.DefaultDoc
  VDirObj.SetInfo
  If Err.Number <> 0 Then
   ErrMsg = "配置站点时出错"
   Exit Function
  End If
  Err.Clear
  VDirObj.AppFriendlyName = "默认应用程序"
  VDirObj.SetInfo
  VDirObj.AppCreate2 2
  VDirObj.SetInfo
  VDirObj.AccessScript = True
  VDirObj.AccessFlags = 513
  VDirObj.SetInfo
  If Err.Number <> 0 Then
   ErrMsg = "配置ROOT虚拟目录时出错"
   Exit Function
  End If
  If CInt(SiteObj.Stat)=2 Then
   ServerObj.Start
  Else
   ServerObj.Stop
  End If
  
  Set VDirObj = Nothing
  Set TmpObj = Nothing
  Set ServerObj = Nothing
  Set WWWServer = Nothing
  CreateSite = True
 End Function
 '创建一个FTP
 Public Function CreateFTP(ByRef SiteObj,ByRef ErrMsg)
  Dim FtpObj,RootObj,VirObj
  On Error Resume Next
  CreateFTP=False
  If SiteObj.User<>"" And SiteObj.Password<>"" Then
   Err.Clear
   Set FtpObj= GetObject("IIS://Localhost/MSFTPSVC/1")
   Set RootObj=FtpObj.GetObject("IIsFtpVirtualDir", "ROOT")
   Set VirObj=RootObj.Create("IIsFtpVirtualDir",SiteObj.User)
   VirObj.AccessFlags=3
   VirObj.DontLog=0
   VirObj.Path=SiteObj.Path
   VirObj.SetInfo
   If Err.Number<>0 Then
    ErrMsg="创建站点失败" & Err.Description
    Exit Function
   End If
   Set VirObj=Nothing
   Set RootObj=Nothing
   Set FtpObj=Nothing
  End If
  CreateFTP=True
 End Function
 '把IIS信息整合成文本内容
 Public Function BackUP()
  Dim Str,s,v
  Str=""
  s=""
  For Each v In AppPool
   If s="" Then
    s=v.Name
   Else
    s=s & "," & v.Name
   End If
  Next
  Str=s & AppPoolAndIIsSplitStr
  '以上为应用程序池的保存
  '下面保存IIS的信息
  s=""
  Dim Tmp,D,DStr
  Tmp=""
  For Each v In Site
   If CLng(v.AdsNum)<>1 Then
    DStr=""
    For Each D In v.Domains
     If DStr="" Then
      DStr=D.IP & ":" & D.Port & ":" & D.Domain
     Else
      DStr=DStr & "," & D.IP & ":" & D.Port & ":" & D.Domain
     End If
    Next
    Tmp=v.Name & SplitStr & _
     v.Path & SplitStr & _
     v.User & SplitStr & _
     v.Password & SplitStr & _
     v.AppPool & SplitStr & _
     v.DefaultDoc & SplitStr & _
     v.LogType & SplitStr & _
     v.LogDir & SplitStr & _
     v.AdsPath & SplitStr & _
     v.AdsNum & SplitStr & _
     v.Stat & SplitStr & _
     DStr
    If s="" Then
     s=Tmp
    Else
     s=s & vbCrLf & Tmp
    End If
   End If
  Next
  Str=Str & s
  Backup=Str
 End Function
 
 '从以前备份的IIS内容中读出信息
 Public Sub ReadFromFile(ByRef Content)
  Dim Arr,PoolStr,IIsStr,Pool,S,TmpArr,Val
  Arr=Split(Content,AppPoolAndIIsSplitStr)
  PoolStr=Arr(0)
  IIsStr=Arr(1)
  For Each Pool In Split(PoolStr,",")
   ReDim Preserve AppPool(PoolN)
   Set AppPool(PoolN)=New AppPoolTypes
   AppPool(PoolN).Name=Pool
   PoolN=PoolN+1
  Next
  For Each S In Split(IIsStr,vbCrLf)
   ReDim Preserve Site(SiteN)
   Set Site(SiteN)=New IIsTypes
   TmpArr=Split(S,SplitStr)
   With Site(SiteN)
    .Name=TmpArr(0)
    .Path=TmpArr(1)
    .User=TmpArr(2)
    .Password=TmpArr(3)
    .AppPool=TmpArr(4)
    .DefaultDoc=TmpArr(5)
    .LogType=TmpArr(6)
    .LogDir=TmpArr(7)
    .AdsPath=TmpArr(8)
    .AdsNum=TmpArr(9)
    .Stat=TmpArr(10)
    For Each Val In Split(TmpArr(11),",")
     .AddDomain Val
    Next
   End With
   SiteN=SiteN+1
  Next
 End Sub
 
 '从当前服务器上IIS中读取应用程序池的列表
 Public Sub GetPool()
  Dim WWWObj,AppObj
  Set WWWObj=GetObject("IIS://Localhost/W3SVC/AppPools")
  For Each AppObj In WWWObj
   ReDim Preserve AppPool(PoolN)
   Set AppPool(PoolN)=New AppPoolTypes
   AppPool(PoolN).Name=AppObj.name
   PoolN=PoolN+1
  Next
  Set WWWObj=Nothing
 End Sub
 
 '从当前服务器上IIS中读取站点的列表
 Public Sub GetIIS()
  Dim WWWObj,SiteObj,Obj,UserName,UserPass,SiteName
  Dim Binds,AppPool,VirObj
  '从IIS站点中获取所有IIS信息
  Set WWWObj=GetObject("IIS://Localhost/w3svc")
  For Each SiteObj In WWWObj
   If SiteObj.Class="IIsWebServer" Then
    Binds=SiteObj.ServerBindings
    SiteName=SiteObj.ServerComment
    Set Obj=SiteObj.GetObject("IIsWebVirtualDir","ROOT")
    UserName=Obj.AnonymousUserName
    UserPass=Obj.AnonymousUserPass
    AppPool=Obj.AppPoolId
    '处理一下用户名的信息
    UserName=Replace(UserName,ComputerName & "\","")
    UserName=Replace(UserName,AnonyMouseName,"")
    If UserName="" Then
     UserName=""
     UserPass=""
    End If
    ReDim Preserve Site(SiteN)
    Set Site(SiteN)=New IIsTypes
    With Site(SiteN)
     .Name=SiteName
     .Path=Obj.Path
     .DefaultDoc=Obj.DefaultDoc
     .LogType=SiteObj.LogType
     .LogDir=SiteObj.LogFileDirectory
     For Each Val In Binds
      .AddDomain Val
     Next
     .User=UserName
     .Password=UserPass
     .AppPool=AppPool
     .AdsPath=SiteObj.AdsPath
     .AdsNum=SiteObj.Name
     .Stat=SiteObj.Status
    End With
    SiteN=SiteN+1
   End If
  Next
  Set WWWObj=Nothing
 End Sub
End Class
 
'站点绑定信息数据类型
Class BindsTypes
 Public IP
 Public Domain
 Public Port
 Private Sub Class_Initialize()
  IP=""
  Domain=""
  Port="80"
 End Sub
End Class
'应用程序池的数据类型
Class AppPoolTypes
 Public Name
 '由于池比较少,不再加大程序的复杂性,只记录一下池的名称就成了,其它信息由默认池中获取
 Private Sub Class_Initialze()
  Name=""
 End Sub
End Class
'站点的数据类型
Class IIsTypes
 Public Name
 Public Path
 Public Domains()
 Public User
 Public Password
 Public AppPool
 Public DefaultDoc
 Public LogDir,LogType
 Public AdsPath,AdsNum
 Public Stat
 Private DomainN
 Private Sub Class_Initialze()
  Name=""
  Path=""
  User=""
  Password=""
  AppPool=""
  DomainN=0
  AdsPath=""
  AdsNum=0
  Stat=2
 End Sub
 Public Sub AddDomain(ByRef Str)
  Dim Arr
  Arr=Split(Str,":")
  ReDim Preserve Domains(DomainN)
  Set Domains(DomainN)=New BindsTypes
  With Domains(DomainN)
   .IP=Arr(0)
   .Port=Arr(1)
   .Domain=Arr(2)
  End With
  DomainN=DomainN+1
 End Sub
End Class

 本文转自 simeon2005 51CTO博客,原文链接:http://blog.51cto.com/simeon/99759

相关文章
|
2月前
|
SQL 开发框架 .NET
ASP.NET Web——GridView完整增删改查示例(全篇幅包含sql脚本)大二结业考试必备技能
ASP.NET Web——GridView完整增删改查示例(全篇幅包含sql脚本)大二结业考试必备技能
33 0
|
10月前
|
开发框架 供应链 前端开发
net基于asp.net的社区团购网站
社区团购系统依托社区团购系统和社区门店,是现在的一个重大市场和发展方向,通过研究企业在社区团购系统环境下的营销模式创新,对于普通的零售业和传统社区团购系统的转型发展具有重要的理论意义。随着互联网行业的发展,人们的生活方式发生着重大变化,人们越来越倾向于网络购物,这对传统企业来说如何把客户留下是一个重大挑战。就现在而言,由于社区团购的竞争已经进入最紧张激烈的阶段,有些团购平台甚至已经彼此之间打起了价格战,其中不乏有平台因为利润变少或资金链断裂而半途败亡。企业在实际的商业活动中,往往会面临许多等待优化的问题。因此,要在竞争激烈的市场中拔得头筹,必须重视提升对新商业模式的全面认知,科学于实际贴合的分
|
11月前
|
开发框架 安全 .NET
教你如何在WINDOWS Server2003上部署一个Asp.Net的网站
教你如何在WINDOWS Server2003上部署一个Asp.Net的网站
302 0
|
开发框架 .NET 应用服务中间件
|
开发框架 .NET 应用服务中间件
使用Nginx对ASP.NETCore网站或D ocker等进行反向代理,宝塔面板对ASP.NET Core 反向代理
使用Nginx对ASP.NETCore网站或D ocker等进行反向代理,宝塔面板对ASP.NET Core 反向代理
351 0
|
开发框架 .NET C#
ASP.NET Core 返回文件、用户 下载文件,从网站下载文件,动态下载文件
ASP.NET Core 返回文件、用户 下载文件,从网站下载文件,动态下载文件
496 0
|
SQL 开发框架 前端开发
Asp.net core项目实战 新闻网站+后台 源码、设计原理、视频教程
Asp.net core项目实战 新闻网站+后台 源码、设计原理、视频教程
304 0
Asp.net core项目实战 新闻网站+后台 源码、设计原理、视频教程
|
开发框架 Ubuntu .NET
5分钟快速安装ASP.NET Core 网站运行环境
简介 ASP.NET Core 是新一代的 ASP.NET,早期称为 ASP.NET vNext,并且在推出初期命名为 ASP.NET 5,但随着 .NET Core 的成熟,以及 ASP.NET 5 的命名会使得外界将它视为 ASP.NET 的升级版,但它其实是新一代从头开始打造的 ASP.NET 核心功能,因此微软宣布将它改为与 .NET Core 同步的名称,即 ASP.NET Core。
2786 0
|
.NET C# C++
通通WPF随笔(2)——自己制作轻量级asp.net网站服务
原文:通通WPF随笔(2)——自己制作轻量级asp.net网站服务          大学玩asp.net时就发现VS在Debug时会起一个web服务,这东西也太神奇了服务起得这么快,而相对于IIS又这么渺小。
1267 0
|
前端开发 .NET 数据库
用asp.net core 2.0 + EFCore.Sqlite做个小网站
许久没用C#写程序。听说进来发生大事,.NetCore2.0发布了,于是便学习了下,本站也应运而生。 大多数的地方按照官方的文档起步走就可以了,这里谈谈遇到的几个坑。 首先,本站是基于ASP.NetCore2.0和EntityFrameWorkCore.Sqlite的,前端使用了layui,搭建于CentOS7上。
1674 0