2013-07-13 222 views
0

我試圖用PStool爲進一步的服務器managemnt編寫一些代碼,但是我怎麼能在很多服務器上自動執行?這裏是我的代碼來處理一臺服務器:管理服務器腳本

' list reg key value 
    psexec \\<<sever name>> -u <<userName>> -p <<password>> reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl > <<server Name>>_regedit.txt 
    ' list network information 
    psexec \\<<sever name>> -u <<userName>> -p <<password>> ipconfig /all 
    ' list services.msc 
    psservice \\<<server name>> -u <<username>> -p <<password>> query > <<serverName>>_service.txt 
    ' list the hotfix 
    psinfo -h \\<<servername>> -u <<adminUsername>> -p <<adminPassword>> > <<serverName>>_hotfix.txt 
    ' list the installed software 
    psinfo -s \\<<servername>> -u <<adminUsername>> -p <<adminPassword>> > <<serverName>>_Software.txt 

我怎樣才能把它們添加到.VBS並執行自動的服務器列表文件(CSV或TXT)?

請幫忙!

回答

2

而不是PsTools你會在VBScript中使用WMI。基本例如:

server = "hostname" 

Set wmi = GetObject("winmgmts://" & server & "/root/cimv2") 
For Each obj In wmi.ExecQuery("SELECT * FROM wmi_class") 
    WScript.Echo obj.property 
Next 

更換hostname與實際主機名,wmi_class與WMI類的名稱,並property與該類的實際屬性的名稱。相關類你:

在某些情況下,你可能需要使用WHERE子句限制查詢返回的結果:

SELECT * FROM wmi_class WHERE property = 'value' 

有關WQL查詢的更多信息,請參見herehere

您還可以使用WMI到work on the registry。在您的特定情況下,您將需要EnumValues方法枚舉註冊表項的值,然後使用相應的getter方法查詢值:

Const HKLM = &H80000002 

server = "hostname" 
keyPath = "SYSTEM\CurrentControlSet\Control\CrashControl" 

Set reg = GetObject("winmgmts:{impersonationLevel=impersonate}!//" _ 
    & server & "/root/default:StdRegProv") 
reg.EnumValues HKLM, keyPath, valueNames, valueTypes 
For i = 0 To UBound(valueNames) 
    Select Case valueTypes(i) 
    Case REG_DWORD 
     reg.GetDWORDValue HKLM, keyPath, valueNames(i), value 
     WScript.Echo value 
    Case ... 
     ... 
    End Select 
Next 

注意,不像以前你使用的命名空間/root/default:StdRegProv這裏。

從CSV中讀取服務器名稱可以使用FileSystemObject方法完成。對於這樣的結構的CSV:

hostname,address,... 
host_A,10.23.42.1,... 
host_B,10.23.42.2,... 
... 

你會做這樣的事情:

Set fso = CreateObject("Scripting.FileSystemObject") 

Set f = fso.OpenTextFile("C:\path\to\your.csv") 
f.SkipLine 'skip header line 
Do Until f.AtEndOfStream 
    server = Split(f.ReadLine)(0) 
    ... 
Loop 
f.Close 

注意,如果CSV是Unicode格式,你必須改線

Set f = fso.OpenTextFile("C:\path\to\your.csv") 

到這一點:

Set f = fso.OpenTextFile("C:\path\to\your.csv", 1, False, True)