在玩完脚本后发现本帖昨天,我发现该脚本完全符合我的要求。但是,我需要在我们网络上的远程系统上运行这些检查。我花了几个小时修改脚本,但无法让它在针对指定计算机的检查上运行。我对脚本编写还很陌生,所以我可能没有看到明显的错误。有人可以帮忙吗?任何帮助都将不胜感激。
运行时,脚本不会因任何错误而中断。它会提示输入系统名称,这是有意为之,如果名称不正确或系统不在线,则会中断。如果指定的机器在线,脚本将继续回显值。但是,返回的值是本地系统的值,而不是远程系统的值。
strInput = UserInput( "Enter System Name:" )
WScript.Echo "You entered: " & strInput
Function UserInput( myPrompt )
If UCase( Right( WScript.FullName, 12 ) ) = "\CSCRIPT.EXE" Then
WScript.StdOut.Write myPrompt & " "
UserInput = WScript.StdIn.ReadLine
Else
UserInput = InputBox( myPrompt )
End If
End Function
strComputer = strInput
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
'Option Explicit
FCS_REGKEY_ROOT = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Antimalware"
Dim SCAN_KEY, SIGNATUREUPDATES_KEY
Dim AV_VERSION_VALUE, AS_VERSION_VALUE, ENGINE_VERSION_VALUE, AV_DATE, AS_DATE
Dim LAST_SCAN_TIME, LAST_SCAN_TYPE, INSTALL_PATH_VALUE
SCAN_KEY=FCS_REGKEY_ROOT & "\Scan"
SIGNATUREUPDATES_KEY = FCS_REGKEY_ROOT & "\Signature Updates"
INSTALL_PATH_VALUE= FCS_REGKEY_ROOT & "\InstallLocation"
AV_VERSION_VALUE= SIGNATUREUPDATES_KEY &"\AVSignatureVersion"
AS_VERSION_VALUE= SIGNATUREUPDATES_KEY &"\ASSignatureVersion"
ENGINE_VERSION_VALUE= SIGNATUREUPDATES_KEY &"\EngineVersion"
AV_DATE= SIGNATUREUPDATES_KEY &"\AVSignatureApplied"
AS_DATE= SIGNATUREUPDATES_KEY &"\ASSignatureApplied"
LAST_SCAN_TIME= SCAN_KEY & "\LastScanRun"
LAST_SCAN_TYPE= SCAN_KEY & "\LastScanType"
'************ MAIN ************
Dim AV_Version, AS_Version, EngineVersion, ProductVersion
Dim AV_BuildDate, AS_BuildDate, LastScanTime, LastScanType
Dim objShell
set objShell = CreateObject("WScript.Shell")
'============ Get current info ============
AV_Version = objShell.RegRead(AV_VERSION_VALUE)
AS_Version = objShell.RegRead(AS_VERSION_VALUE)
EngineVersion = objShell.RegRead(ENGINE_VERSION_VALUE)
AV_BuildDate = BinaryToDate( objShell.RegRead(AV_DATE) )
AS_BuildDate = BinaryToDate( objShell.RegRead(AS_DATE) )
ProductVersion = GetProductVersion(INSTALL_PATH_VALUE)
LastScanTime = BinaryToDate( objShell.RegRead(LAST_SCAN_TIME) )
LastScanType = GetScanType( objShell.RegRead(LAST_SCAN_TYPE) )
'============ Display summary info ============
WScript.echo "Microsoft Forefront Client Security version: " & ProductVersion
WScript.echo "Engine version: " & EngineVersion
WScript.echo "Antivirus Definition: Version " & AV_Version & " created on " & AV_BuildDate
WScript.echo "Antispyware Definition: Version " & AS_Version & " created on " & AS_BuildDate
WScript.echo "Last scan: " & LastScanTime & " (" & LastScanType & ")"
'************ END MAIN ************
'===============================================================
'Function BinaryToDate will covert a binary DATE_TIME structure into a Variant date set to the local time
' Parameter: bArray - a VARIANT array of bytes
' Return: a VARIANT date
Function BinaryToDate(bArray)
dim Seconds,Days,dateTime
Set dateTime = CreateObject("WbemScripting.SWbemDateTime")
Seconds = bArray(7)*(2^56) + bArray(6)*(2^48) + bArray(5)*(2^40) + bArray(4)*(2^32) _
+ bArray(3)*(2^24) + bArray(2)*(2^16) + bArray(1)*(2^8) + bArray(0)
Days = Seconds/(1E7*86400)
dateTime.SetVarDate CDate(DateSerial(1601, 1, 1) + Days ), false
BinaryToDate = dateTime.GetVarDate ()
End Function
'===============================================================
'Function GetProductVersion will query a registry key for the file location and then return the version from the filesystem
' Parameter: strRegPath - path to the registry pointing to the installation location
' Return: a VARIANT string containing the product version
Function GetProductVersion(regPath)
const FILE_TO_CHECK = "\msmpeng.exe"
dim strFilePath, objFSO
strFilePath = objShell.RegRead(regPath) & FILE_TO_CHECK
Set objFSO = CreateObject("Scripting.FileSystemObject")
GetProductVersion = objFSO.GetFileVersion(strFilePath)
Set objFSO = Nothing
End Function
'===============================================================
'Function GetScanType will return a string with the scan type that corresponds to the enum
' Parameter: iScanType - type of scan
' Return: a VARIANT string containing text type of scan
Function GetScanType(iScanType)
Select case(iScanType)
Case 1 : GetScanType= "Quick Scan"
Case 2 : GetScanType= "Full Scan"
Case Else GetScanType= "Invalid Scan type"
End Select
End Function