Board logo

标题: [技术讨论] vbs如何查询服务器上指定txt文本里是否有本机的计算机名和系统产品识别码,没有则添加 [打印本页]

作者: qqqkoko123    时间: 2017-5-1 17:28     标题: vbs如何查询服务器上指定txt文本里是否有本机的计算机名和系统产品识别码,没有则添加

本帖最后由 pcl_test 于 2017-5-1 18:43 编辑

求大神一起讨论vbs如何才能实现如下功能
vbs要实现如下功能:
1,获取本机序列号
2,查询服务器上的findbyname.txt文本,输出计算机名
3,如果findbyname.txt文本中不包含此计算机名和序列号就按“计算机名 序列号”的格式写入findbyname.txt文本中
本人写了如下代码,但是第2个功能无法正常实现,请大神看看究竟哪里出了问题,万分感谢!
  1.    Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
  2.    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_computersystemproduct")
  3.    For Each objItem In colItems
  4.           serialnumber = objItem.identifyingnumber
  5.    Next
  6. strComputer = "."
  7. Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
  8. Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
  9. For Each objComputer in colComputers
  10. strComputerName = objComputer.Name
  11. Exit For
  12. Next
  13. MsgBox (strComputerName)
  14. MsgBox (serialnumber)
  15. Dim strFile
  16. strFile = "findbyname.txt"
  17. Dim fso, objFile, arr, strContents, blnFound
  18. Set fso = CreateObject("Scripting.FileSystemObject")
  19. Set objFile = fso.OpenTextFile(strFile, 1)
  20. strContents = objFile.ReadAll
  21. blfind = False
  22.   If InStr(strContents, serialnumber) Then
  23.          blfind = True
  24.     MsgBox ("找到主机名!")
  25.   While   Not  objFile.AtEndOfStream
  26.     arr = Split(objFile.ReadLine, " ")
  27.     If UBound(arr) > 0 Then
  28.         If arr(1) = serialnumber Then MsgBox arr(0)
  29.          End If
  30.          wend
  31.      else
  32.          MsgBox ("未找到主机名!")
  33.     Set f = fso.OpenTextFile(strFile, 8)
  34.     f.WriteLine (strComputerName & " " & serialnumber)
  35.      End If
  36. objFile.Close()
  37. Set objFile = Nothing : Set fso = Nothing
复制代码

作者: pcl_test    时间: 2017-5-2 09:52

本帖最后由 pcl_test 于 2017-5-2 09:54 编辑
  1. Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
  2. strFile = "findbyname.txt"
  3. Set colItems = objWMIService.ExecQuery("Select * From Win32_ComputerSystemProduct")
  4. For Each objItem In colItems
  5.     serialnumber = objItem.IdentifyingNumber
  6. Next
  7. Set colItems = objWMIService.ExecQuery("Select * From Win32_ComputerSystem")
  8. For Each objItem In colItems
  9.     strComputerName = objItem.Name
  10. Next
  11. Set fso = CreateObject("Scripting.FileSystemObject")
  12. If Not fso.FileExists(strFile) Then
  13.     fso.CreateTextFile(strFile).WriteLine strComputerName & " " & serialnumber
  14. Else
  15.     If fso.GetFile(strFile).Size =0 Then
  16.         fso.OpenTextFile(strFile, 2).WriteLine strComputerName & " " & serialnumber
  17.     Else
  18.         Set objFile = fso.OpenTextFile(strFile, 1)
  19.         Do While objFile.AtEndOfStream<>true
  20.             strLine = Split(Trim(objFile.ReadLine)," ")
  21.             If LCase(strLine(0)) = LCase(strComputerName) Then
  22.                 flag = true
  23.                 Exit Do
  24.             End If
  25.         Loop
  26.         objFile.Close
  27.         If flag Then
  28.             Msgbox "Exists!"
  29.         Else
  30.             fso.OpenTextFile(strFile, 8).WriteLine strComputerName & " " & serialnumber
  31.         End If
  32.     End If
  33. End If
复制代码

作者: qqqkoko123    时间: 2017-5-2 11:09

多谢大神指导,另外,经大神指导,用bat更加简单:
  1. @echo off
  2. for /f %%a in ('wmic path Win32_computersystemproduct get identifyingnumber /value^|find "="') do set %%a
  3. find /i "%computername%" "findbyname.txt">nul && (echo 计算机名已找到!
  4. echo 计算机名是%computername%)||(echo 计算机名未找到!
  5. >>"findbyname.txt" echo %computername% %identifyingnumber%)
  6. pause
复制代码

作者: qqqkoko123    时间: 2017-5-2 11:19

另外,自己写的代码问题出在第27行,把第27行内容改为:
  1. While objFile.AtEndOfStream<>true
复制代码
这样就可以了!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2