iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >VBScript基于WSH编程
  • 898
分享到

VBScript基于WSH编程

2024-04-02 19:04:59 898人浏览 泡泡鱼
摘要

大学时期也用过VBScript,不过都是基于ASP的,近期因工作需要,尝试在WSH(windows script host)下编程,实现列示oracle client下tnsnames.ora文件的主要信息

大学时期也用过VBScript,不过都是基于ASP的,近期因工作需要,尝试在WSH(windows script host)下编程,实现列示oracle client下tnsnames.ora文件的主要信息(TNSname、HOST、SID),大体思路是:判断当前系统下oracle路径,从系统变量中读取具体path,通过Wscript下的文件对象读取文件,分隔path,截取ora文件中的需要信息,下面是具体实现的脚本:


option explicit
'on error resume next
call Main
Sub Main
 dim homes
 homes = ReadOracleHome
 call ReadTNS(homes)
End Sub
'Date:2014-10-15 
'Author:Alan
Function ReadTNS(homes)
 dim i,j,k,fs,ts,f,strAll,strTSNname(100),strHost(100),strServiceName(100),contents,content(10),strTotal,txt
 set fs =WScript.CreateObject("Scripting.FileSystemObject")
 For i=0 to UBound(homes)
  If homes(i) <> "" Then
   '判断tns文件是否存在
   If fs.FileExists(Mid(homes(i),1,Len(homes(i))-3)&"network\admin\tnsnames.ora") = true Then    
    '读取tnsnames.ora文件
    set f=fs.getfile(Mid(homes(i),1,Len(homes(i))-3)&"network\admin\tnsnames.ora")
    set ts = f.OpenAsTextStream(1,0)
    do while ts.AtEndOfStream <> true
     For j=0 to 100
      if ts.AtEndOfStream =true then
       exit for
      End if
      txt= ts.ReadLine
      If InStr(StrReverse(Trim(txt)),"=")=1 and InStr(Trim(txt),"(")=0 Then
       strTSNname(j)=StrReverse(Mid(Trim(StrReverse(txt)),InStr(Trim(StrReverse(txt)),"=")+1))
       'msgbox strTSNname(j)
      ElseIf InStr(txt,"(HOST =")>0 Then
       If InStr(txt,")(PORT =")>0 Then
        strHost(j)=Trim(SplitStr(txt,"(HOST =",")(PORT ="))
       Else
        strHost(j)=Trim(SplitStr(txt,"(HOST =",")"))
       End If
       'msgbox strHost(j)
      ElseIf InStr(txt,"(SERVICE_NAME=")>0 or InStr(txt,"(SID =")>0 Then
       IF InStr(txt,"(SERVICE_NAME=")>0 Then
        strServiceName(j)=Trim(SplitStr(txt,"(SERVICE_NAME=",")"))
       ElseIf InStr(txt,"(SID =")>0 Then
        strServiceName(j)=Trim(SplitStr(txt,"(SID =",")"))
       End IF
       'msgbox strServiceName(j)
      End If
      'msgbox "TNSName="+strTSNname(j)+"    HOST="+strHost(j)+"      SERVUCE_NAME/SID="+strServiceName(j)+vbNewLine
     Next
    Loop
    '去除数组中的空值
    dim a,b,c,nstrTSNname,nstrHost,nstrServiceName
    a=sumArrayNotNullValue(strTSNname)
    b=sumArrayNotNullValue(strHost)
    c=sumArrayNotNullValue(strServiceName)   
    nstrTSNname= dropArrayNullValue(strTSNname,maxThree(a,b,c))
    nstrHost= dropArrayNullValue(strHost,maxThree(a,b,c))
    nstrServiceName= dropArrayNullValue(strServiceName,maxThree(a,b,c))
    '组织文本显示效果
    For k=0 to maxThree(a,b,c)
     IF nstrTSNname(k) <>"" and nstrHost(k)<>"" and nstrServiceName(k)<>"" Then
      If contents="" Then
       contents="TNSName="+addSpaceToString(getMaxLength(nstrTSNname),nstrTSNname(k))+"HOST="+addSpaceToString(getMaxLength(nstrHost),nstrHost(k))+"   SERVUCE_NAME/SID="+nstrServiceName(k)+vbNewLine
       'contents="TNSName="+nstrTSNname(k)+" "+"HOST="+nstrHost(k)+" "+"SERVUCE_NAME/SID="+nstrServiceName(k)+" "+vbNewLine
      Else
       contents=contents+"TNSName="+addSpaceToString(getMaxLength(nstrTSNname),nstrTSNname(k))+"HOST="+addSpaceToString(getMaxLength(nstrHost),nstrHost(k))+"   SERVUCE_NAME/SID="+nstrServiceName(k)+vbNewLine
       'contents=contents+"TNSName="+nstrTSNname(k)+" "+"HOST="+nstrHost(k)+" "+"SERVUCE_NAME/SID="+nstrServiceName(k) +" "+vbNewLine
      End If
     End If
    Next
    'msgbox contents
    content(i)=Mid(homes(i),1,Len(homes(i))-3)&"network\admin\tnsnames.ora 中TNS信息如下:" & vbNewLine+contents
    '置空本次循环的字符串变量,便于下次循环重新赋值
    contents = ""
    '关闭对象
    set ts=nothing
    set f= nothing
   Else
    MsgBox "在"& Mid(homes(i),1,Len(homes(i))-3)& "network\admin\ 路径下未找到tnsnames.ora文件。" ,,"InfORMation"
   End If
  End If
 Next
 set fs = nothing
 For i=0 to UBound(content)
  IF content(i) <>"" Then
   strTotal=strTotal+content(i)+vbNewLine
  End IF
 Next
 call PopupShowStr(strTotal)
End Function
'读取ORACLE_HOME,返回一个homes数组(因为可能有多个oracle_home)
Function ReadOracleHome
 dim Wshshell,WshSysEnv,path,paths,i,oracle_homes,counter
 Set WshShell = WScript.CreateObject("WScript.Shell")
 Set WshSysEnv=WshShell.Environment("SYSTEM")
 path= WshSysEnv("PATH")
 '从系统环境变量PATH中分离出ORACLE_HOME
 paths = Split(path,";",-1,1)
 counter=0
 For  i=0 to UBound(paths)
  If InStr(UCase(paths(i)),"\APP\")>0 Then
   If InStr(UCase(paths(i)),"\PRODUCT\")>0 Then
    'MsgBox "Found valid path: " &  paths(i)
    oracle_homes = paths(i)
    paths(i)=""
    paths(counter)=oracle_homes
    counter=counter+1
   End If
  Else
   paths(i)="" 
  End If 
  Next 
  '函数FilterOracleHome的返回值为paths数组
  ReadOracleHome = paths
End Function
'定义截取指定字符串之间字符串的函数
Function SplitStr(mainStr,findStartStr,findEndStr)
 dim strSplit,intStart,intLength
 If InStr(mainStr,findStartStr) >0 Then
  intStart=InStr(mainStr,findStartStr)+Len(findStartStr)
  intLength= InStr(mainStr,findEndStr) - intStart
  strSplit = Mid(mainStr,intStart,intLength)
 End If
 SplitStr = strSplit
End Function
'定义一个弹出框显示文本内容的函数
Function PopupShowStr(string)
 Dim WshShell
 Set WshShell = WScript.CreateObject("WScript.Shell")
 '将文本内容显示在弹出框中
 call WshShell.Popup(string,0,"TNS Lists:")
End Function
'定义一个去除数组中空值的函数
Function dropArrayNullValue(array,counter)
 dim i,j
 Redim arrNew(CInt(counter))
 '如果array(i)为空,则后面的值往前移
 For i=0 to UBound(array)
  IF array(i)<>"" Then
   arrNew(j)=array(i)
   j=j+1
  End IF
 Next
 dropArrayNullValue=arrNew
End Function
'定义计算数组中非空值的个数函数
Function sumArrayNotNullValue(array)
 dim i,j
 j=0
 For i=0 to UBound(array)
  IF array(i)<>"" Then
   j=j+1
  End IF
 Next
 sumArrayNotNullValue=j
End Function
'求三个数中的最大值
Function maxThree(a,b,c)
 dim max
 max =a
 if a>b then
  if b>c then
   max=a
  else
   if a>c then
    max=a
   else
    max=c
   end if
  end if
 else
  if b>c then
   max=b
  else
   max=c
  end if
 end if
 maxThree=max
End Function
'获取字符串数组中值的最大长度
Function getMaxLength(array)
 dim i,max 
 max=Len(Trim(array(0)))
 For i=0 to UBound(array)
  if Len(Trim(array(i))) > max then
   max=Len(Trim(array(i)))
  end if 
 Next
 getMaxLength=max
End Function
'统一字符串数组中各值的长度,长度不够补空格
Function addSpaceToString(max,str)
 if max-Len(str)>0 then
  addSpaceToString=str +String(max-Len(str)," ") ' Space(max-Len(str))
 else
  addSpaceToString=str
 end if
End Function

效果展示:

VBScript基于WSH编程

您可能感兴趣的文档:

--结束END--

本文标题: VBScript基于WSH编程

本文链接: https://www.lsjlt.com/news/40196.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 最基础的vbscript,jscript脚本编程方法
    这篇文章主要介绍“最基础的vbscript,jscript脚本编程方法”,在日常操作中,相信很多人在最基础的vbscript,jscript脚本编程方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”最基础的v...
    99+
    2023-06-08
  • 基于tkinter的GUI编程
    tkinter:tkinter是绑定了Python的TKGUI工具集,就是Python包装的Tcl代码,通过内嵌在Python解释器内部的Tcl解释器实现的,它是Python标准库的一部分,所以使用它进行GUI编程不需要另外安装第三方库的...
    99+
    2023-01-31
    tkinter GUI
  • 基于Java的Scoket编程
    目录一,网络编程中两个主要的问题二,两类传输协议:TCP和UDPTCP和UDP的区别三,基于Socket的java网络编程1、什么是Socket2、Socket通讯的过程3、创建So...
    99+
    2024-04-02
  • 基于Java实现Socket编程入门
    目录认识Socket建立socket的基本流程1.最基本的Socket示范1.1 单向通信1.2 双向通信2. 发送更多的消息:结束的界定2.1 使用特殊符号2.2 根据长度界定3....
    99+
    2024-04-02
  • 基于JDBC的MySQL数据库编程
    ✨博客主页: 荣 ✨系列专栏: MySQL ✨一句短话: 难在坚持,贵在坚持,成在坚持! 文章目录 一. JDBC概述二. JDBC前置工作1. 准备好MySQL驱动包2. 创建项目 三....
    99+
    2023-09-12
    数据库 mysql java
  • Java网络编程之基于TCP协议
    目录一、单向通信二、双向通信三、对象流传送四、加入完整的处理异常方式五、多线程接收用户请求一、单向通信 功能:客户端发送一句话到服务器: 客户端: public class ...
    99+
    2024-04-02
  • 基于Java实现Socket编程的方法
    这篇文章主要介绍“基于Java实现Socket编程的方法”,在日常操作中,相信很多人在基于Java实现Socket编程的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基于Java实现Socket编程的方法...
    99+
    2023-06-29
  • Java基于IDEA如何实现http编程
    这篇文章主要介绍了Java基于IDEA如何实现http编程,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用...
    99+
    2023-06-14
  • VBScript编写Windows防止锁屏脚本程序
    目录背景介绍脚本程序复杂版本简单版本工作原理背景介绍 有些公司出于安全和保密工作考虑,会通过 Windows 组策略强制所有办公电脑在无操作的情况下 5 分钟或者 10 分钟自动锁屏...
    99+
    2024-04-02
  • 基于WPF制作一个可编程画板
    目录先上一张效果动图本次扩展的主要内容可编程模块的实现原理代码编辑模块的实现代码编辑模块的编译与测试WPF打印控制台数据动态编译模块的输入输出自动生成先上一张效果动图 同样老规矩,...
    99+
    2023-05-18
    WPF制作可编程画板 WPF可编程画板 WPF 画板
  • 基于Java中Scoket编程的示例分析
    这篇文章主要为大家展示了“基于Java中Scoket编程的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“基于Java中Scoket编程的示例分析”这篇文章吧。一,网络编程中两个主要的问题...
    99+
    2023-06-22
  • C++基于socket编程实现聊天室功能
    本文实例为大家分享了C++基于socket编程实现聊天室的具体代码,供大家参考,具体内容如下 服务端 // server.cpp : 此文件包含 "main" 函数。程序执行将在...
    99+
    2024-04-02
  • 基于Python编写一个自动关机程序
    目录1、实现效果2、实现步骤3、全部代码1、实现效果 2、实现步骤 模块导入 import os,sys,time from PyQt5 import QtCore,QtWidge...
    99+
    2024-04-02
  • 基于C语言实现泛型编程详解
    目录心理历程轮子用法大体流程部分源码心理历程 写了一段时间C++后,真心感觉STL里的容器是个好东西。一个容器可以容纳任意类型,容器对外的接口可以操作任意类型的数据,甚至包括自定义类...
    99+
    2024-04-02
  • 基于C++泛型编程职工管理系统
    目录一、泛型编程思想二、单链表是什么1.图示2.链表的节点结构【节点类】3.链表类三、泛型编程核心1.实现数据类2.实现链表类四、运行截图1.主菜单2.查看信息3.更换数据类型4.再...
    99+
    2024-04-02
  • C#实现基于任务的异步编程模式
    目录一.延续任务二.同步上下文三.使用多个异步方法1.按顺序调用异步方法2.使用组合器四.转换异步模式五.错误处理1.异步方法的异常处理2.多个异步方法的异常处理3.使用Aggreg...
    99+
    2024-04-02
  • 使用 Golang 探讨基于方法的编程思维
    面向方法的编程思维是一种将程序设计从对象的角度转向方法的使用的编程范式。在这种编程思维下,重点不再是对象的属性和数据,而是对象的方法和行为。这种方法可以使代码更加模块化、可复用和可维护...
    99+
    2024-02-26
  • 基于Python编写一个微博抽奖小程序
    目录导语开发工具环境搭建先睹为快原理简介导语 带大家写个微博自动抽奖小程序吧,motivation和之前的B站自动抽奖小程序一样: 不想内卷了,整个B站全自动抽奖的小程序吧,万一不小...
    99+
    2024-04-02
  • 基于C++编写一个键盘提示音程序
    目录准备资源播放声音获取键盘按键完整代码首先讲一下思路,这次制作的小黑子相当于键盘提示音,输入J,N,T,M,会发出“鸡你太美”的声音,连续按下JNTM则会发...
    99+
    2023-03-08
    C++实现键盘提示音程序 C++键盘提示音程序 C++键盘提示音
  • Java基于IDEA实现http编程的示例代码
    http开发前言之为什么要有应用层 我们已经学过TCP/IP , 已经知道目前数据能从客户端进程经过路径选择跨网络传送到服务器端进程 [ IP+Port ],可是,仅仅把数据从A点传...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作