管理服务器脚本

时间:2013-07-13 07:03:14

标签: vbscript inventory-management

我尝试使用PStool为进一步的服务器管理编写一些代码,但是如何在很多服务器中自动完成?这是我的代码只处理一个服务器:

    ' 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)?

请帮忙!

1 个答案:

答案 0 :(得分:2)

您可以在VBScript中使用WMI而不是PsTools。基本示例:

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之前不同。

可以使用FileSystemObject方法从CSV读取服务器名称。对于具有以下结构的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)