Задайте вопросЗадайте вопрос
 

ОтвеченоCheck OS, Check Hotfix, Install if not present

Ответы

  • 22 октября 2008 г. 6:24Salvador Manaois IIIМодераторМедали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     ОтвеченоС кодом
    Hi Mark,

    I modified your script a bit to check for whether the patch is installed instead of checking for the uninstall folder.

    1 Set objShell = CreateObject("WScript.Shell")  
    2 Set objFSO = CreateObject("Scripting.FileSystemObject")  
    3  
    4 strComputer = "." 
    5 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
    6 Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem WHERE Name LIKE '%Microsoft Windows XP%'")  
    7 For Each objItem In colItems  
    8    If objItem.CSDVersion = "Service Pack 3" Then 
    9       If CheckPatch("KB953760")=True then  
    10          Wscript.Echo "Patch found." 
    11       Else 
    12           Wscript.Echo "Patch not found. Installing patch..." 
    13           objShell.Run "\\server\share\WindowsXP-kb953760-x86-ENU.exe /qn", ,TRUE  
    14       End if  
    15    End If 
    16 Next 
    17  
    18 Function CheckPatch(patch)  
    19   Set objSession = CreateObject("Microsoft.Update.Session")  
    20   Set objSearcher = objSession.CreateUpdateSearcher  
    21   Set objResults = objSearcher.Search("Type='Software'")  
    22   Set colUpdates = objResults.Updates  
    23   Found = False 
    24   Result = 0  
    25   For i = 0 to colUpdates.Count - 1  
    26       Result = Instr(colUpdates.Item(i).Title, patch)  
    27        If Result > 0 then  
    28          Found = True 
    29          Exit For 
    30        End if  
    31   Next 
    32   CheckPatch = Found  
    33 End Function 

    Regards,

    Salvador Manaois III
    MCSE MCSA CEH MCITP | Enterprise/Server Admin
    Bytes & Badz : http://badzmanaois.blogspot.com
    • Помечено в качестве ответаMark A. Wilson 22 октября 2008 г. 15:54
    •  

Все ответы

  • 21 октября 2008 г. 18:04nckmrtn Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     Предложенный ответС кодом
    Hey Mark,

    Give this a try:

    Set objShell = CreateObject("WScript.Shell"
    Set objFSO = CreateObject("Scripting.FileSystemObject"
     
    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2"
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem WHERE Name LIKE '%Microsoft Windows XP%'")
    For Each objItem In colItems 
       If objItem.CSDVersion = "Service Pack 3" Then 
          If objFSO.FolderExists("C:\WINDOWS\$NTUninstallKB953760$")=False Then 
             objShell.Run "\\server\share\WindowsXP-kb953760-x86-ENU.exe /qn", ,TRUE 
          End If 
       End If 
    Next 

    -N
    • Измененоnckmrtn 21 октября 2008 г. 18:12
    • Предложено в качестве ответаaboren 22 октября 2008 г. 5:40
    •  
  • 22 октября 2008 г. 5:39aboren Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     
    nckmrtn said:

    Hey Mark,

    Give this a try:

    Set objShell = CreateObject("WScript.Shell"
    Set objFSO = CreateObject("Scripting.FileSystemObject"
     
    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2"
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem WHERE Name LIKE '%Microsoft Windows XP%'")
    For Each objItem In colItems 
       If objItem.CSDVersion = "Service Pack 3" Then' YES XP has SP3, then we check for patch
          If objFSO.FolderExists("C:\WINDOWS\$NTUninstallKB953760$")=False Then'Nope patch is not here, lets install on next line
             objShell.Run "\\server\share\WindowsXP-kb953760-x86-ENU.exe /qn", ,TRUE'Install patch from share
          End If 
       End If 
    Next 

    -N



    Put some small "helpers" in the script wich by itself is doing the job.
    Checks for SP3 & the actual hotfix.
  • 22 октября 2008 г. 6:24Salvador Manaois IIIМодераторМедали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     ОтвеченоС кодом
    Hi Mark,

    I modified your script a bit to check for whether the patch is installed instead of checking for the uninstall folder.

    1 Set objShell = CreateObject("WScript.Shell")  
    2 Set objFSO = CreateObject("Scripting.FileSystemObject")  
    3  
    4 strComputer = "." 
    5 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
    6 Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem WHERE Name LIKE '%Microsoft Windows XP%'")  
    7 For Each objItem In colItems  
    8    If objItem.CSDVersion = "Service Pack 3" Then 
    9       If CheckPatch("KB953760")=True then  
    10          Wscript.Echo "Patch found." 
    11       Else 
    12           Wscript.Echo "Patch not found. Installing patch..." 
    13           objShell.Run "\\server\share\WindowsXP-kb953760-x86-ENU.exe /qn", ,TRUE  
    14       End if  
    15    End If 
    16 Next 
    17  
    18 Function CheckPatch(patch)  
    19   Set objSession = CreateObject("Microsoft.Update.Session")  
    20   Set objSearcher = objSession.CreateUpdateSearcher  
    21   Set objResults = objSearcher.Search("Type='Software'")  
    22   Set colUpdates = objResults.Updates  
    23   Found = False 
    24   Result = 0  
    25   For i = 0 to colUpdates.Count - 1  
    26       Result = Instr(colUpdates.Item(i).Title, patch)  
    27        If Result > 0 then  
    28          Found = True 
    29          Exit For 
    30        End if  
    31   Next 
    32   CheckPatch = Found  
    33 End Function 

    Regards,

    Salvador Manaois III
    MCSE MCSA CEH MCITP | Enterprise/Server Admin
    Bytes & Badz : http://badzmanaois.blogspot.com
    • Помечено в качестве ответаMark A. Wilson 22 октября 2008 г. 15:54
    •  
  • 22 октября 2008 г. 15:55Mark A. Wilson Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     
    Thanks so much for your assistance guys!
  • 24 октября 2008 г. 14:38Edward Hyde Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     
    Any way to run this against remote computers where the person logged on is only in the users group?
  • 24 октября 2008 г. 16:17Salvador Manaois IIIМодераторМедали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     
     Not possible as the script is installing an OS patch; non-admins will not be able to accomplish this task. Use WSUS if you want to install patches on your clients without explicitly granting users admin rights on their machines.

    http://technet.microsoft.com/en-us/wsus/default.aspx

    Regards,

    Salvador Manaois III
    MCSE MCSA CEH MCITP | Enterprise/Server Admin
    Bytes & Badz : http://badzmanaois.blogspot.com