2014-05-20 93 views
0

我有一个VB脚本发送到服务器字符串,并检查是否有任何挂起的Windows更新。它完美的作品。唯一的问题是运行我必须输入的脚本: cscript pending.vbs server01 server02 server03 server04 etc ..我有超过300个服务器我想运行这个。我需要能够使用服务器名称更新文本文件,而不是手动输入。我发布了下面的脚本: 我不是一个程序员,但我明白一些。需要从文本文件中读取的VB脚本

谢谢!

'# 
'# ServerPendingUpdates.vbs 
'# 
'# Usage: cscript ServerPendingUpdates.vbs {servername} {servername} {servername} {servername} 
'# If no {servername} specified then 'localhost' assumed 
'# 
'# To do: Error handling 
'# 
Option Explicit 
Dim strServer  : strServer   = GetArgValue(0,"localhost") 


'# 
'# Loop through the input parameters for each server 
'# 
Dim i 
For i = 0 To WScript.Arguments.Count - 1 
    CheckServerUpdateStatus GetArgValue(i,"localhost") 'strServer 
Next 

WScript.Quit(0) 

Function CheckServerUpdateStatus(ByVal strServer) 

    WScript.Echo vbCRLF & "Connecting to " & strServer & " to check software update status..." 

    Dim blnRebootRequired : blnRebootRequired  = False 
    Dim blnRebootPending : blnRebootPending  = False 
    Dim objSession  : Set objSession = CreateObject("Microsoft.Update.Session", strServer) 
    Dim objUpdateSearcher  : Set objUpdateSearcher = objSession.CreateUpdateSearcher 
    Dim objSearchResult : Set objSearchResult  = objUpdateSearcher.Search(" IsAssigned=1 and IsHidden=0 and Type='Software'") 

    '# 
    '# 
    '# 
    Dim i, objUpdate 
    Dim intPendingInstalls : intPendingInstalls  = 0 

    For i = 0 To objSearchResult.Updates.Count-1 
     Set objUpdate = objSearchResult.Updates.Item(I) 

     If objUpdate.IsInstalled Then 
      If objUpdate.RebootRequired Then 
       blnRebootPending  = True 
      End If 
     Else 
      intPendingInstalls = intPendingInstalls + 1 
      'If objUpdate.RebootRequired Then '### This property is FALSE before installation and only set to TRUE after installation to indicate that this patch forced a reboot. 
      If objUpdate.InstallationBehavior.RebootBehavior <> 0 Then 
       '# http://msdn.microsoft.com/en-us/library/aa386064%28v=VS.85%29.aspx 
       '# InstallationBehavior.RebootBehavior = 0 Never reboot 
       '# InstallationBehavior.RebootBehavior = 1 Must reboot 
       '# InstallationBehavior.RebootBehavior = 2 Can request reboot 
       blnRebootRequired  = True 
      End If 

     End If 
    Next 

    WScript.Echo strServer & " has " & intPendingInstalls & " updates pending installation" 

    If blnRebootRequired Then 
     WScript.Echo strServer & " WILL need to be rebooted to complete the installation of these updates." 
    Else 
     WScript.Echo strServer & " WILL NOT require a reboot to install these updates." 
    End If 


    '# 
    '# 
    '# 
    If blnRebootPending Then 
     WScript.Echo strServer & " is waiting for a REBOOT to complete a previous installation." 
    End If 
End Function 



'# 
'# 
'# 
Function GetArgValue(intArgItem, strDefault) 
    If WScript.Arguments.Count > intArgItem Then 
     GetArgValue = WScript.Arguments.Item(intArgItem) 
    Else 
     GetArgValue = strDefault 
    End If 
End Function 
+0

可能重复http://stackoverflow.com/questions/21654524/vbscript-code-从文本文件避免手动努力) –

回答

0

您可以使用VBS的ASDI对象查询所有域:

Set DomObj = GetObject("WinNT://" & strDomain) 
DomObj.Filter = Array("computer") 

将输出一个数组(DomObj)

或使用LDAP:

Set objCommand = CreateObject("ADODB.Command") 
Set objConnection = CreateObject("ADODB.Connection") 
objConnection.Provider = "ADsDSOObject" 
objConnection.Open "Active Directory Provider" 
objCommand.ActiveConnection = objConnection 
strQuery = "<LDAP://" & strDNSDomain & "> (objectCategory=computer);distinguishedName,operatingSystem;subtree" 

来源: http://www.scriptlook.com/list-servers-domain/ & http://www.scriptlook.com/check-services-every-server-domain/

的[VBScript代码来读取文本文件避免了手工输入的努力(
0

只需创建一个带有服务器列表的文本文件,每行一个。 打开文件(OpenTextFile)并逐行阅读。看到这些链接以供参考

http://ss64.com/vb/filesystemobject.html

FileSystemObject Object

path = "serverlist.txt" 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFile = objFSO.OpenTextFile(path, 1) 
Do Until objFile.AtEndOfStream 
    CheckServerUpdateStatus(objFile.ReadLine) 
Loop 
+0

这是要在脚本中的一段吗? – ChadKFranks

+0

是的,它可以代替'Dim i'和'Next'之间在开始附近的部分 – aland

+0

我在你告诉我的地方添加了代码,并且我得到了一个关于'路径'未定义的错误: Dim i path = “machines.txt” 设置objFSO =的CreateObject( “Scripting.FileSystemObject的”) 集OBJFILE = objFSO.OpenTextFile(路径,1) 做,直到objFile.AtEndOfStream CheckServerUpdateStatus(objFile.ReadLine) 环路 – ChadKFranks