2013-04-09 76 views
1

我有幾個問題,並希望這是正確的地方。試圖運行多個腳本,讓他們都輸出到一個文件,並使用相同的IP地址

基本上我想要做的就是能夠遠程獲取有關域計算機的信息。

我有3個獨立的腳本,給我1(IP配置,補充名稱...),2(安裝軟件)和3(映射驅動器)。

前兩個要求的IP /計算機名和第3次我必須輸入其寫入腳本...我想只需要輸入IP地址一次,有它的所有3

工作

其次,我想輸出文件,這個信息被放入被命名爲安裝的軟件腳本,然後只有其他兩個腳本添加(ammend)到已創建的輸出。

我超新VBS所以任何幫助將是真棒

SCRIPT 1(獲取IP配置)

dim strComputer 'for computer name or IP 
dim colAdapters 'collection of adapters 


Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFile = objFSO.CreateTextFile("output.txt", True) 


strComputer = "" 

'open a dialog box asking for the computer name/IP 
do 
strComputer = inputbox("Please enter a computername/IP, or . for local computer", "Input") 
Loop until strComputer <> "" 'run until a name/IP is entered 


Set objWMIService = GetObject ("winmgmts:" & "!\\" & strComputer & "\root\cimv2") 'open the WMI service on the remote PC 
Set colAdapters = objWMIService.ExecQuery ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True") 

'go through the list of adapters and gather data 
For Each objAdapter in colAdapters 


objFile.Writeline "Host name: " & objAdapter.DNSHostName 
objFile.Writeline "DNS domain: " & objAdapter.DNSDomain 
objFile.Writeline "DNS suffix search list: " & objAdapter.DNSDomainSuffixSearchOrder 
objFile.Writeline "Description: " & objAdapter.Description 
objFile.Writeline "Physical address: " & objAdapter.MACAddress 
objFile.Writeline "DHCP enabled: " & objAdapter.DHCPEnabled 
If Not IsNull(objAdapter.IPAddress) Then 
For i = LBound(objAdapter.IPAddress) To UBound(objAdapter.IPAddress) 
objFile.Writeline "IP address: " & objAdapter.IPAddress(i) 
Next 
End If 
If Not IsNull(objAdapter.IPSubnet) Then 
For i = LBound(objAdapter.IPSubnet) To UBound(objAdapter.IPSubnet) 
objFile.Writeline "Subnet: " & objAdapter.IPSubnet(i) 
Next 
End If 
If Not IsNull(objAdapter.DefaultIPGateway) Then 
For i = LBound(objAdapter.DefaultIPGateway) To UBound(objAdapter.DefaultIPGateway) 
objFile.Writeline "Default gateway: " & objAdapter.DefaultIPGateway(i) 
Next 
End If 
objFile.Writeline "DHCP server: " & objAdapter.DHCPServer 
If Not IsNull(objAdapter.DNSServerSearchOrder) Then 
For i = LBound(objAdapter.DNSServerSearchOrder) To UBound(objAdapter.DNSServerSearchOrder) 
objFile.Writeline "DNS server: " & objAdapter.DNSServerSearchOrder(i) 
Next 
End If 
objFile.Writeline "Primary WINS server: " & objAdapter.WINSPrimaryServer 
objFile.Writeline "Secondary WINS server: " & objAdapter.WINSSecondaryServer 
objFile.Writeline "Lease obtained: " & objAdapter.DHCPLeaseObtained 
objFile.Writeline "Lease expires: " & objAdapter.DHCPLeaseExpires 
Next 

SCRIPT 2(被安裝軟件)

Option Explicit 

Dim sTitle 
sTitle = "InstalledPrograms.vbs by Bill James" 
Dim StrComputer 
strComputer = InputBox("Enter I.P. or name of computer to check for " & _ 
         "installed software (leave blank to check " & _ 
         "local system)." & vbcrlf & vbcrlf & "Remote " & _ 
         "checking only from NT type OS to NT type OS " & _ 
         "with same Admin level UID & PW", sTitle) 
If IsEmpty(strComputer) Then WScript.Quit 
strComputer = Trim(strComputer) 
If strComputer = "" Then strComputer = "." 

'Wscript.Echo GetAddRemove(strComputer) 

Dim sCompName : sCompName = GetProbedID(StrComputer) 

Dim sFileName 
sFileName = sCompName & "_" & GetDTFileName() & "_Software.txt" 

Dim s : s = GetAddRemove(strComputer) 

If WriteFile(s, sFileName) Then 
    'optional prompt for display 
    If MsgBox("Finished processing. Results saved to " & sFileName & _ 
      vbcrlf & vbcrlf & "Do you want to view the results now?", _ 
      4 + 32, sTitle) = 6 Then 
    WScript.CreateObject("WScript.Shell").Run sFileName, 9 
    End If 
End If 

Function GetAddRemove(sComp) 
    'Function credit to Torgeir Bakken 
    Dim cnt, oReg, sBaseKey, iRC, aSubKeys 
    Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE 
    Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 
       sComp & "/root/default:StdRegProv") 
    sBaseKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" 
    iRC = oReg.EnumKey(HKLM, sBaseKey, aSubKeys) 

    Dim sKey, sValue, sTmp, sVersion, sDateValue, sYr, sMth, sDay 

    For Each sKey In aSubKeys 
    iRC = oReg.GetStringValue(HKLM, sBaseKey & sKey, "DisplayName", sValue) 
    If iRC <> 0 Then 
     oReg.GetStringValue HKLM, sBaseKey & sKey, "QuietDisplayName", sValue 
    End If 
    If sValue <> "" Then 
     iRC = oReg.GetStringValue(HKLM, sBaseKey & sKey, _ 
           "DisplayVersion", sVersion) 
     If sVersion <> "" Then 
     sValue = sValue & vbTab & "Ver: " & sVersion 
     Else 
     sValue = sValue & vbTab 
     End If 
     iRC = oReg.GetStringValue(HKLM, sBaseKey & sKey, _ 
           "InstallDate", sDateValue) 
     If sDateValue <> "" Then 
     sYr = Left(sDateValue, 4) 
     sMth = Mid(sDateValue, 5, 2) 
     sDay = Right(sDateValue, 2) 
     'some Registry entries have improper date format 
     On Error Resume Next 
     sDateValue = DateSerial(sYr, sMth, sDay) 
     On Error GoTo 0 
     If sdateValue <> "" Then 
      sValue = sValue & vbTab & "Installed: " & sDateValue 
     End If 
     End If 
     sTmp = sTmp & sValue & vbcrlf 
    cnt = cnt + 1 
    End If 
    Next 
    sTmp = BubbleSort(sTmp) 
    GetAddRemove = "INSTALLED SOFTWARE (" & cnt & ") - " & sCompName & _ 
       " - " & Now() & vbcrlf & vbcrlf & sTmp 
End Function 

Function BubbleSort(sTmp) 
    'cheapo bubble sort 
    Dim aTmp, i, j, temp 
    aTmp = Split(sTmp, vbcrlf) 
    For i = UBound(aTmp) - 1 To 0 Step -1 
    For j = 0 to i - 1 
     If LCase(aTmp(j)) > LCase(aTmp(j+1)) Then 
     temp = aTmp(j + 1) 
     aTmp(j + 1) = aTmp(j) 
     aTmp(j) = temp 
     End if 
    Next 
    Next 
    BubbleSort = Join(aTmp, vbcrlf) 
End Function 

Function GetProbedID(sComp) 
    Dim objWMIService, colItems, objItem 
    Set objWMIService = GetObject("winmgmts:\\" & sComp & "\root\cimv2") 
    Set colItems = objWMIService.ExecQuery("Select SystemName from " & _ 
             "Win32_NetworkAdapter",,48) 
    For Each objItem in colItems 
    GetProbedID = objItem.SystemName 
    Next 
End Function 

Function GetDTFileName() 
    dim sNow, sMth, sDay, sYr, sHr, sMin, sSec 
    sNow = Now 
    sMth = Right("0" & Month(sNow), 2) 
    sDay = Right("0" & Day(sNow), 2) 
    sYr = Right("00" & Year(sNow), 4) 
    sHr = Right("0" & Hour(sNow), 2) 
    sMin = Right("0" & Minute(sNow), 2) 
    sSec = Right("0" & Second(sNow), 2) 
    GetDTFileName = sMth & sDay & sYr & "_" & sHr & sMin & sSec 
End Function 

Function WriteFile(sData, sFileName) 
    Dim fso, OutFile, bWrite 
    bWrite = True 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    On Error Resume Next 
    Set OutFile = fso.OpenTextFile(sFileName, 2, True) 
    'Possibly need a prompt to close the file and one recursion attempt. 
    If Err = 70 Then 
    Wscript.Echo "Could not write to file " & sFileName & ", results " & _ 
       "not saved." & vbcrlf & vbcrlf & "This is probably " & _ 
       "because the file is already open." 
    bWrite = False 
    ElseIf Err Then 
    WScript.Echo err & vbcrlf & err.description 
    bWrite = False 
    End If 
    On Error GoTo 0 
    If bWrite Then 
    OutFile.WriteLine(sData) 
    OutFile.Close 
    End If 
    Set fso = Nothing 
    Set OutFile = Nothing 
    WriteFile = bWrite 
End Function 

SCRIPT 3 (獲取映射驅動器)

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFile = objFSO.CreateTextFile("mappedoutput.txt", True) 
' List Mapped Network Drives 


On Error Resume Next 

strComputer = "." 
Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 

Set colItems = objWMIService.ExecQuery("Select * from Win32_MappedLogicalDisk") 

For Each objItem in colItems 
    objFile.Writeline "Compressed: " & objItem.Compressed 
    objFile.Writeline "Description: " & objItem.Description 
    objFile.Writeline "Device ID: " & objItem.DeviceID 
    objFile.Writeline "File System: " & objItem.FileSystem 
    objFile.Writeline "Free Space: " & objItem.FreeSpace 
    objFile.Writeline "Maximum Component Length: " & objItem.MaximumComponentLength 
    objFile.Writeline "Name: " & objItem.Name 
    objFile.Writeline "Provider Name: " & objItem.ProviderName 
    objFile.Writeline "Session ID: " & objItem.SessionID 
    objFile.Writeline "Size: " & objItem.Size 
    objFile.Writeline "Supports Disk Quotas: " & objItem.SupportsDiskQuotas 
    objFile.Writeline "Supports File-Based Compression: " & _ 
     objItem.SupportsFileBasedCompression 
    objFile.Writeline "Volume Name: " & objItem.VolumeName 
    objFile.Writeline "Volume Serial Number: " & objItem.VolumeSerialNumber 
    objFile.Writeline 
Next 

再次感謝你

+0

我設法創建4個批處理文件自動執行它。我運行這個頂級的1.bat,2.bat中的每一個都是''RemoteIP_Config - 2 v1.1.vbs' exit''start/wait 1.bat start/wait 2.bat start/wait 3 .bat exit' – user968683 2013-04-09 20:27:12

回答

2

你可以把所有的三個腳本作爲一個單一的腳本?在這種情況下,您只需輸入一次IP地址即可。

或者寫另一個腳本,它會詢問IP地址,並通過使用cscript並將IP地址作爲參數傳遞給它們來調用這些腳本。試試這個代碼爲:

strcomputer = inputbox("Enter the IP address") 
set obj1 = createobject("wscript.shell") 
set obj2 = createobject("wscript.shell") 
set obj3 = createobject("wscript.shell") 
pgm1 = "cscript script1.vbs " & strcomputer 
pgm2 = "cscript script2.vbs " & strcomputer 
pgm3 = "cscript script3.vbs " & strcomputer 
obj1.run pgm1,3,true 
obj2.run pgm2,3,true 
obj3.run pgm3,3,true 
set obj1 = nothing 
set obj2 = nothing 
set obj3 = nothing 

在上面的代碼中,script1.vbs,script2.vbs,script3.vbs是你的3個腳本,你正在使用新的腳本執行它們一個接一個。 在script1.vbs,加入這行代碼:

strcomputer = wscript.Arguments.item(0) 

它將存儲你已經從你的新腳本傳遞到script1.vbs的1RST參數,到變量「strComputer的」(在你的情況下, IP地址)。 同樣,在這兩個script2.vbs和script3.vbs還添加語句

strcomputer = wscript.Arguments.item(0) 

關於你的輸出文件,我不知道你是問什麼。也許這可以幫助:

使用下面寫一個文件(覆蓋,如果數據已經存在):

Set fso1 = CreateObject("Scripting.FileSystemObject")    
Set file1 = fso1.OpenTextFile("C:\New\textfile1.txt",2,true) 

使用下面添加數據或附加到文件(未覆蓋):

Set fso1 = CreateObject("Scripting.FileSystemObject")    
Set file1 = fso1.OpenTextFile("C:\New\textfile1.txt",8,true) 

使用下面從文件中讀取:

Set fso1 = CreateObject("Scripting.FileSystemObject")    
Set file1 = fso1.OpenTextFile("C:\New\textfile1.txt",1,true) 
+0

我很樂意把它寫成一個腳本,但我有問題讓它工作。當我將它們加在一起時,它總是運行一個,然後停止,然後 – user968683 2013-04-10 15:34:28

+0

,並非常感謝你填充後的響應,我有映射驅動器腳本運行,但其他兩個似乎沒有做任何事情。我從上面的腳本中設置了所有3個腳本中的所有str代碼。 – user968683 2013-04-10 15:36:15

+0

好吧,現在我有getter和映射rives工作,我不得不把輸入框取出getter腳本。爲IPconfig腳本做同樣的事情是行不通的 – user968683 2013-04-10 16:15:20

相關問題