如何远程检查办公室版本?


2

如果您有一个管理员的场景,并且您必须检查您的办公室版本,那么如何在不去每台PC的情况下管理它,打扰用户并在本地检查它?

有没有办法远程执行此操作?

Answers:


3

我已经基于早期版本的DSCunningham创建了一个vbscript来管理这项工作。

请享用!

'==========================================================================
'
' VBScript Source File 2.0
'
' NAME: PingSweep-OfficeVersion2.vbs
'
' AUTHOR OF THE FIRST VERSION: DSCunningham 08/03/2011
' AUTHOR OF THE SECOND VERSION: Laurent Mander 07/05/2016
'
' COMMENT: 
'   Sets up log file
'   Builds IP range & sweeps range using for next Loop
'   Gets computer name from IP for better logging
'   Gets office (WINWORD.exe) install path from registry
'   Gets office (WINWORD.exe) version number and logs result
' I'm using WINWORD.exe as the basis for determining the office version
' You could easily change it to check for msexcel.exe by changing the registry path and file name.
'
' COMMENT SECOND VERSION:
'   Script works with actual windows and office versions
'   Script doesn't brake up on NON-Windows PCs
'   Script doesn't brake up on "Office not found"
'   Script shows exact internal+external Office verison
'
'   >You have to run the script with network administrator rights
'
'==========================================================================
BaseIP = "192.168.100." 'Set this to match your IP subnet. Don't delete the period at the end.
StartIP = "1"           'Set this to the first IP in the range to scan
EndIP = "254"           'Set this to the last IP in the range to scan
Dim OfficeLog: OfficeLog = "OfficeVersionLog.txt"   'Used to build office log.  Will be created in path where script is run.
Const ForAppending = 8
Const HKEY_LOCAL_MACHINE = &H80000002   'Used for connecting to remote registry to find Outlook install path
Set objFSO = CreateObject("Scripting.FileSystemObject")

'=================================
'Setup log file
'=================================
'Checks for log file.  If it doens't exist, it creates it.  
'Created in whatever directory the script is run from.

If NOT objFSO.FileExists (OfficeLog) Then
    Set checkLog = objFSO.CreateTextFile(OfficeLog)
    checkLog.Close
End If

'Opens log for use
Set objLog = objFSO.OpenTextFile(OfficeLog, ForAppending)

'================================
'Build IP range.  Currently only sweeps class C subnets.
'================================
'For loop to create IP address range
For i = StartIP To EndIP    
IP = BaseIP & i

'================================
'Ping PC before checking for Office
'================================
'Checks the PC to see if it is accessible.  Writes result to log.   
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
    ExecQuery("select * from Win32_PingStatus where address = '"& IP & "'")

    For Each objStatus in objPing       
        If IsNull(objStatus.StatusCode) Or objStatus.StatusCode<>0 Then
            objLog.WriteLine (Date & vbTab & Time & vbTab & IP & vbTab & "No response")
            WScript.Echo Date & vbTab & Time & vbTab & IP & vbTab & "No response"
        ElseIf objStatus.StatusCode=0 Then
        '****************
        'This section captures the PC name and writes it to the log
        ' in addition to the IP address for more useful logging.
        '****************
            On Error Resume Next
            Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & IP & "\root\cimv2")
            If Err = 0 Then
                Set colQry = objWMIService.ExecQuery("SELECT Name FROM Win32_ComputerSystem")
                For Each Name In colQry
                PCName = Name.name
        '****************
        'End PC name capture
        '****************
            'objLog.WriteLine (Date & vbTab & Time & vbTab & IP & vbTab & PCName & vbTab & "PC responded to connection")
            'WScript.Echo Date & vbTab & Time & vbTab & IP & vbTab & PCName & vbTab & "PC responded to connection"


'================================
'Check Registry to find install path of office
'================================
                'Access remote registry and read a string (REG_SZ) value.
                'Use to check registry for the install path of Outlook.exe  
                Dim strKeyPath      'everything after the main key IE:  KHEY_LOCAL_MACHINE
                Dim strValueName    'The name of the actual value within a key that you want to read
                Dim strOutlookPath  'Output of path from registry

                Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & IP & "\root\default:StdRegProv") 
                'strKeyPath is everything after the main key IE:  KHEY_LOCAL_MACHINE
                strKeyPath = "Software\Microsoft\Windows\Currentversion\App Paths\OUTLOOK.EXE"  
                'strValueName is the name of the actual value within a key that you want to read
                strValueName = "Path"       
                objReg.getStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strOutlookPath

'================================
'Get Office version
'================================

                IF strOutlookPath <> "" THEN

                    getFile=strOutlookPath & "WINWORD.EXE"
                    getFile=Replace(getFile,":","$")
                    getFile = "\\" & IP & "\" & getFile

                    OfficeVersion = objFSO.GetFileVersion(getFile)

                        Select Case left(OfficeVersion,2)
                            Case "9."
                                OfficeExternalVersion = "(Office 2000)"
                            Case "10"       
                                OfficeExternalVersion = "(Office XP)"
                            Case "11"
                                OfficeExternalVersion = "(Office 2003)"
                            Case "12"
                                OfficeExternalVersion = "(Office 2007)"
                            Case "14"
                                OfficeExternalVersion = "(Office 2010)"
                            Case "15"
                                OfficeExternalVersion = "(Office 2013)"
                            Case "16"
                                OfficeExternalVersion = "(Office 2016)"
                        End Select

                    objLog.WriteLine (Date & vbTab & Time & vbTab & IP & vbTab & PCName & vbTab & "Office version is: " & vbTab & OfficeVersion & vbTab & OfficeExternalVersion)
                    WScript.Echo Date & vbTab & Time & vbTab & IP & vbTab & PCName & vbTab & "Office version is: " & vbTab & OfficeVersion & vbTab & OfficeExternalVersion
                ELSE            
                    objLog.WriteLine (Date & vbTab & Time & vbTab & IP & vbTab & PCName & vbTab & "Office not installed")
                    WScript.Echo Date & vbTab & Time & vbTab & IP & vbTab & PCName & vbTab & "Office not installed"
                END IF
                NEXT
            ELSE
            objLog.WriteLine (Date & vbTab & Time & vbTab & IP & vbTab & "No Windows-Domain PC")
            WScript.Echo Date & vbTab & Time & vbTab & IP & vbTab & "No Windows-Domain PC"
            END IF

        END IF
        NEXT
NEXT

WScript.Echo "Script Complete"

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.