<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>PatchAholic...The WSUS Blog! : WSUS Scripts &amp;amp; Tools Repository</title><link>http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx</link><description>Tags: WSUS Scripts &amp;amp; Tools Repository</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Extract computer hardware information from WSUS</title><link>http://msmvps.com/blogs/athif/archive/2006/12/06/extract-computer-hardware-information-from-wsus.aspx</link><pubDate>Wed, 06 Dec 2006 07:37:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:385352</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=385352</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/12/06/extract-computer-hardware-information-from-wsus.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-FAMILY:Verdana;"&gt;A question was asked in the WSUS Mailing List (hosted by Shavlik Technologies on &lt;A href="http://www.patchmanagement.org/"&gt;www.patchmanagement.org&lt;/A&gt;) - &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-FAMILY:Verdana;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-FAMILY:Verdana;"&gt;&lt;STRONG&gt;I am using WSUS 2.0 and I was wondering if there was a way to extract the computer hardware information it collects?&lt;o:p&gt;&lt;/o:p&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-FAMILY:Verdana;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-FAMILY:Verdana;"&gt;Oh yes, this is possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-FAMILY:Verdana;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-FAMILY:Verdana;"&gt;You can extract computer hardware data in table 'dbo.tbComputerTarget' in SUS database (SUSDB). You can query for the following information;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-FAMILY:Verdana;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-FAMILY:Verdana;"&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="COLOR:blue;FONT-FAMILY:'Courier New';"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="COLOR:blue;FONT-FAMILY:'Courier New';"&gt;TargetID&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ComputerID&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;SID&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;LastSyncTime LastReportedStatusTime&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;LastReportedRebootTime&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IPAddress&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;FullDomainName&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;OSMajorVersion&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;OSMinorVersion&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;OSBuildNumber&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;OSServicePackMajorNumber&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;OSServicePackMinorNumber&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;OSLocale&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ComputerMake&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ComputerModel&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;BiosVersion&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;BiosName&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;BiosReleaseDate &lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;ProcessorArchitecture&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ClientGuid&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;RequestedTargetGroupName IsRegistered&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-FAMILY:Verdana;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-FAMILY:Verdana;"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-FAMILY:Verdana;"&gt;For instance, you can query it directly using SQL Query Analyzer or OSQL; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-FAMILY:Verdana;"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-FAMILY:Verdana;"&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Verdana;"&gt;&lt;SPAN style="COLOR:blue;FONT-FAMILY:'Courier New';"&gt;USE SUSDB &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="COLOR:blue;FONT-FAMILY:'Courier New';"&gt;SELECT&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;FullDomainName, IPAddress, ComputerMake, ComputerModel, BiosName, BiosVersion, OSMajorVersion, OSServicePackMajorNumber &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="COLOR:blue;FONT-FAMILY:'Courier New';"&gt;FROM&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;tbComputerTarget&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="COLOR:blue;FONT-FAMILY:'Courier New';"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;FONT-FAMILY:'Courier New';"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-FAMILY:Verdana;mso-bidi-font-family:'Courier New';"&gt;&lt;FONT color=#000000&gt;Hope that helps! Happy patching.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-FAMILY:Verdana;mso-bidi-font-family:'Courier New';"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=385352" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>Disable the SSL warning in the To Do List</title><link>http://msmvps.com/blogs/athif/archive/2006/06/26/102858.aspx</link><pubDate>Mon, 26 Jun 2006 12:57:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:102858</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=102858</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/06/26/102858.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Many a times folks in &lt;A href="http://groups.google.com/group/microsoft.public.windows.server.update_services"&gt;WSUS&amp;nbsp;newsgroup&lt;/A&gt; want to know if - &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=4&gt;&lt;STRONG&gt;Is there a way to disable the SSL warning in the To-Do list in WSUSAdmin Console?&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV class="SectionHeader B"&gt;&lt;IMG src="http://sadadsms-mn:8530/WsusAdmin/Common/Images/IconChecklistTransparent16.gif" align=absMiddle&gt;&lt;STRONG&gt;To Do List&lt;/STRONG&gt;&lt;/DIV&gt;
&lt;DIV class="SectionHeader B"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=SectionBodyWithBorder&gt;
&lt;DIV class=Label&gt;&lt;A class=B&gt;&lt;FONT face=Arial size=2&gt;&lt;IMG src="http://sadadsms-mn:8530/WsusAdmin/Common/Images/Warning.gif" align=absMiddle&gt;&lt;STRONG&gt;&lt;FONT face="Times New Roman" size=3&gt;Use Secure Sockets Layer (SSL)&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV class=Label&gt;&lt;BR&gt;&lt;FONT size=2&gt;WSUS has detected that you are not using Secure Sockets Layer (SSL). Microsoft recommends using SSL to secure administration and client to server communications for better security. For more information, see &lt;/FONT&gt;&lt;A class=Normal&gt;&lt;FONT size=2&gt;Using Secure Sockets Layer (SSL)&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt; &lt;/DIV&gt;
&lt;DIV class=Label&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=Label&gt;&lt;FONT face=Verdana size=2&gt;I used to answer that as - "That is not documented anywhere!!. We will have to live with that". But, thanks to Josh (poster in &lt;A href="http://groups.google.com/group/microsoft.public.windows.server.update_services"&gt;NG&lt;/A&gt;) for this cheeky workaround.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class=Label&gt;&amp;nbsp;&lt;/DIV&gt;&lt;FONT face=Verdana size=4&gt;&lt;STRONG&gt;WORKAROUND&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Make a backup of "&lt;FONT face="Courier New" color=#0000ff&gt;C:\program files\Update Services\administration\home\welcome.aspx&lt;/FONT&gt;" file.&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Then open the file in notepad and find the last section at the bottom that starts like this: &lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;FONT face="Courier New" color=#0000ff&gt;&amp;lt;td id="tskNotUsingSSL" class="Tasks" style="display: none;"&amp;gt;&lt;/FONT&gt; &lt;BR&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Now you can't delete that line, but delete everything between the &amp;lt;div&amp;gt; and &amp;lt;/div&amp;gt; right below that line -&amp;nbsp;Which means you have to delete the following text between &amp;lt;div&amp;gt; and &amp;lt;/div&amp;gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Verdana size=2&gt;&lt;FONT face="Courier New" color=#0000ff&gt;
&lt;DIV class=MsoNormal align=center&gt;&lt;SPAN&gt;
&lt;HR align=center&gt;
&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&amp;lt;div&amp;gt; &lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;a href="" onclick="ShowHelp('utilizing_SSL.htm');return false;" &lt;BR&gt;class="B"&amp;gt;&amp;lt;img src="&amp;lt;%= Constants.VirtualRoot %&amp;gt;/Common/Images/Warning.gif" &lt;BR&gt;align="absmiddle" /&amp;gt;&amp;lt;%= Resources.GetString("L_HomeNotUsingSSLTitle_Text") &lt;BR&gt;%&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/br&amp;gt; &lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;%= &lt;BR&gt;String.Format(Resources.GetString("L_HomeNotUsingSSLDescription_Text"), &lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "&amp;lt;a href=\"\" onclick=\"ShowHelp('utilizing_SSL.htm ');return &lt;BR&gt;false;\" class=\"Normal\"&amp;gt;" + &lt;BR&gt;Resources.GetString("L_HomeNotUsingSSLHelpLink_Text") + "&amp;lt;/a&amp;gt;") %&amp;gt; &lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;br /&amp;gt; &lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/div&amp;gt;&lt;/FONT&gt; &lt;BR&gt;&lt;SPAN&gt;
&lt;HR align=center&gt;
&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Save the file and Voila! Happy Patching :-).&lt;/P&gt;&lt;/FONT&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=102858" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>Un-hide hidden updates</title><link>http://msmvps.com/blogs/athif/archive/2006/06/26/102851.aspx</link><pubDate>Mon, 26 Jun 2006 09:53:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:102851</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=102851</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/06/26/102851.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;lf the logged in user is part of Local Administrators group, then he can use the custom install option to unselect the updates which will be eventually hidden. These updates will not be offered by the WUA at the next detection/scheduled installation time. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Scripting Guru Torgeir Bakken has posted an excellent .vbs script to unhide those hidden updates.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Verdana color=#c88900 size=2&gt;According to Torgeir Bakken (MVP)&lt;/FONT&gt;&lt;/STRONG&gt; 
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;If you are afraid that some users will hide some updates using the custom install option, here is a&amp;nbsp;counter-measure you can use if the computers are in an Active Directory domain. &lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Use a script that unhides all hidden updates every time the computer starts up. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;You could put the vbscript below in a computer startup script (with a GPO) that runs as part of the boot up process (before the user logs in). &amp;nbsp;It runs under the system context and has admin rights.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;--------------------8&amp;lt;---------------------- &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;On Error Resume Next &lt;BR&gt;Dim oSearcher, oSearchResult, i, oUpdate &lt;/FONT&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Set oSearcher = CreateObject("Microsoft.Update.Searcher") &lt;/FONT&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;' use locally cached information &lt;BR&gt;oSearcher.Online = False &lt;/FONT&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;' find updates that are hidden &lt;BR&gt;Set oSearchResult = oSearcher.Search("IsHidden=1") &lt;/FONT&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;If Err.Number = 0 Then &lt;BR&gt;&amp;nbsp;&amp;nbsp; If oSearchResult.Updates.Count &amp;gt; 0 Then &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For i = 0 to oSearchResult.Updates.Count - 1 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set oUpdate = oSearchResult.Updates(i) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' unhide the update &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oUpdate.IsHidden = False &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next &lt;BR&gt;&amp;nbsp;&amp;nbsp; End If &lt;BR&gt;End If &lt;/FONT&gt;
&lt;P&gt;'--------------------8&amp;lt;---------------------- &lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=4&gt;&lt;STRONG&gt;Tip:&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;IF you configure the deadline whilst approving an update then it will restrict local Administrator from being able to unselect or hide updates.&lt;/FONT&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=102851" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>Windows Server Update Services add-ons -- by Steven Manross</title><link>http://msmvps.com/blogs/athif/archive/2006/06/26/102820.aspx</link><pubDate>Mon, 26 Jun 2006 08:39:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:102820</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=102820</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/06/26/102820.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;A href="http://www.manross.net/links.html"&gt;Steven Manross&lt;/A&gt; has created Windows Server Update Services add-ons in the form of an SQL stored procedure and .vbs / Perl scripts to determine if computers currently show as needing updates. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The SQL stored procedure (&lt;A href="http://www.manross.net/wsus/reporting/spSRMCountComputersNeedingUpdates.sql.txt"&gt;spSRMCountComputersNeedingUpdates.sql&lt;/A&gt;) is used in conjunction with the &lt;A href="http://www.manross.net/wsus/reporting/wsusreport.vbs.txt"&gt;WSUSReport.vbs&lt;/A&gt; or (&lt;A href="http://www.manross.net/wsus/reporting/wsusreport.pl.txt"&gt;WSUSReport.pl&lt;/A&gt;) scripts to automatically notify an admin via email that there are computers needing Windows Security-related updates.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;In step 1, let’s add the sql stored procedure on WSUS Database Server and in step 2 we will run the .vbs script scripts to automatically notify WSUS Administrator via email that there are computers needing updates.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=4&gt;&lt;STRONG&gt;SAMPLE OUTPUT AS SEEN IN EMAIL:&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Verdana size=2&gt;Subject: WSUS: There are computers needing updates&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;
&lt;TABLE&gt;

&lt;TR&gt;
&lt;TD&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;&lt;B&gt;Type:&lt;/B&gt; Software&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;&lt;B&gt;KB Article:&lt;/B&gt; 816093&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;&lt;B&gt;Bulletin:&lt;/B&gt; MS03-011&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD colSpan=3&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;&lt;B&gt;Title:&lt;/B&gt; 816093: Security Update Microsoft Virtual Machine (Microsoft VM)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD colSpan=3&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;&lt;B&gt;Description:&lt;/B&gt; This update helps resolve a vulnerability in the Microsoft virtual machine. After you install this item, you may have to restart your computer. Once you have installed this item, it cannot be removed.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD colSpan=3&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;&lt;B&gt;More Information:&lt;/B&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;A title=http://go.microsoft.com/fwlink/?LinkId=14964 href="http://go.microsoft.com/fwlink/?LinkId=14964"&gt;&lt;FONT face=Arial size=2&gt;http://go.microsoft.com/fwlink/?LinkId=14964&lt;/FONT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD colSpan=3&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;&lt;B&gt;Server Name(s):&lt;/B&gt; computer1.domain.com,computer2.domain.com,computer3.domain.com&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=4&gt;&lt;STRONG&gt;PRE-REQUISITES:&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The .vbs code below requires Outlook CDO components to be installed or some other application that installs the CDO.Message object from the computer running WSUSReport.vbs.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=4&gt;&lt;STRONG&gt;STEP 1:&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Let’s start by adding the following code as a stored procedure (spSRMCountComputersNeedingUpdates.sql);&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Verdana size=2&gt;
&lt;UL&gt;
&lt;LI class=MsoNormal&gt;&lt;SPAN&gt;In &lt;B&gt;SQL Enterprise Manager&lt;/B&gt; under “&lt;/SPAN&gt;&lt;SPAN&gt;instancename\Databases\SUSDB\&lt;B&gt;Stored Procedures&lt;/B&gt;&lt;/SPAN&gt;&lt;SPAN&gt;”.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt; 
&lt;LI class=MsoNormal&gt;&lt;SPAN&gt;Right click on the &lt;B&gt;Stored Procedure&lt;/B&gt; – click on &lt;B&gt;New &lt;U&gt;S&lt;/U&gt;tored Procedure&lt;/B&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt; 
&lt;LI class=MsoNormal&gt;&lt;SPAN&gt;Paste the code below – click on &lt;B&gt;&lt;U&gt;C&lt;/U&gt;heck Syntax&lt;/B&gt; and make sure it is &lt;B&gt;successful&lt;/B&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;STRONG&gt;spSRMCountComputersNeedingUpdates.sql:-&lt;/STRONG&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV class=MsoNormal align=center&gt;
&lt;HR align=center&gt;
&lt;/DIV&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;CREATE PROCEDURE [dbo].[spSRMCountComputersNeedingUpdates]&amp;nbsp; AS&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;declare @computersNeedingUpdates int&lt;BR&gt;declare @updatesNeededByComputers int&lt;BR&gt;&amp;nbsp; SELECT @computersNeedingUpdates = COUNT(DISTINCT(C.TargetID)),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @updatesNeededByComputers = COUNT(DISTINCT(U.LocalUpdateID))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM tbUpdate AS U&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbUpdateStatusPerComputer AS S WITH (INDEX (nc3UpdateStatusPerComputer)) ON U.UpdateID=S.UpdateID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbComputerTarget AS C ON C.TargetID = S.TargetID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE S.SummarizationState IN (2,3,6)&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND EXISTS (SELECT * FROM dbo.tbDeployment AS D &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbRevision AS Re ON Re.RevisionID=D.RevisionID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbTargetGroup AS tg ON tg.TargetGroupID = D.TargetGroupID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE Re.LocalUpdateID=U.LocalUpdateID AND&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D.ActionID IN (0,2) AND&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tg.Name &amp;lt;&amp;gt; 'All Computers'&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;select @computersNeedingUpdates as computersNeedingUpdates,@updatesNeededByComputers as updatesNeededByComputers&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;IF @computersNeedingUpdates &amp;gt; 0&lt;BR&gt;&amp;nbsp; BEGIN&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT U.LocalUpdateID,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C.FullDomainName as FullDomainName&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM tbUpdate AS U&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbPreComputedLocalizedProperty AS PCLP&amp;nbsp; ON PCLP.UpdateID=U.UpdateID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbLanguage as L on L.ShortLanguage = PCLP.ShortLanguage&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbLanguageInSubscription as LIS on LIS.LanguageID = L.LanguageID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbUpdateType AS UT&amp;nbsp; ON UT.UpdateTypeID=U.UpdateTypeID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbUpdateStatusPerComputer AS S ON U.UpdateID=S.UpdateID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbComputerTarget AS C ON C.TargetID = S.TargetID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbTargetInTargetGroup AS TITG ON TITG.TargetID = C.TargetID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbTargetGroup AS TG ON TG.TargetGroupID = TITG.TargetGroupID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbRevision AS Re ON Re.LocalUpdateID = U.LocalUpdateID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LEFT JOIN dbo.tbKBArticleForRevision AS KB ON KB.RevisionID = RE.RevisionID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LEFT JOIN dbo.tbSecurityBulletinForRevision AS SB ON SB.RevisionID = RE.RevisionID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbMoreInfoURLForRevision AS MI ON MI.RevisionID = RE.RevisionID and MI.ShortLanguage = L.ShortLanguage&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE S.SummarizationState IN (2,3,6)&amp;nbsp; AND&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EXISTS (SELECT * FROM dbo.tbDeployment AS D &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbRevision AS Re ON Re.RevisionID=D.RevisionID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbTargetGroup AS tg ON tg.TargetGroupID = D.TargetGroupID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE Re.LocalUpdateID=U.LocalUpdateID AND&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D.ActionID IN (0,2) AND&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tg.Name &amp;lt;&amp;gt; 'All Computers'&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT U.LocalUpdateID,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UT.Name as UpdateTypeName,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KB.KBArticleID,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case when SB.SecurityBulletinID IS NULL Then 'None' Else convert(varchar(15),SB.SecurityBulletinID) End as SecurityBulletinID,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MI.MoreInfoURL as MoreInfoURL,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PCLP.Title as UpdateTitle,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PCLP.Description as UpdateDescription&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM tbUpdate AS U&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbPreComputedLocalizedProperty AS PCLP&amp;nbsp; ON PCLP.UpdateID=U.UpdateID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbLanguage as L on L.ShortLanguage = PCLP.ShortLanguage&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbLanguageInSubscription as LIS on LIS.LanguageID = L.LanguageID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbUpdateType AS UT&amp;nbsp; ON UT.UpdateTypeID=U.UpdateTypeID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbUpdateStatusPerComputer AS S ON U.UpdateID=S.UpdateID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbComputerTarget AS C ON C.TargetID = S.TargetID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbTargetInTargetGroup AS TITG ON TITG.TargetID = C.TargetID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbTargetGroup AS TG ON TG.TargetGroupID = TITG.TargetGroupID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbRevision AS Re ON Re.LocalUpdateID = U.LocalUpdateID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LEFT JOIN dbo.tbKBArticleForRevision AS KB ON KB.RevisionID = RE.RevisionID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LEFT JOIN dbo.tbSecurityBulletinForRevision AS SB ON SB.RevisionID = RE.RevisionID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbMoreInfoURLForRevision AS MI ON MI.RevisionID = RE.RevisionID and MI.ShortLanguage = L.ShortLanguage&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE S.SummarizationState IN (2,3,6)&amp;nbsp; AND&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EXISTS (SELECT * FROM dbo.tbDeployment AS D &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbRevision AS Re ON Re.RevisionID=D.RevisionID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN dbo.tbTargetGroup AS tg ON tg.TargetGroupID = D.TargetGroupID&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE Re.LocalUpdateID=U.LocalUpdateID AND&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D.ActionID IN (0,2) AND&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tg.Name &amp;lt;&amp;gt; 'All Computers'&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GROUP BY U.LocalUpdateID,UT.Name,KB.KBArticleID,SB.SecurityBulletinID,MI.MoreInfoURL,PCLP.Title,PCLP.Description&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp; END&lt;BR&gt;--ENDIF&lt;BR&gt;RETURN 1&lt;BR&gt;GO&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV class=MsoNormal align=center&gt;
&lt;HR align=center&gt;
&lt;/DIV&gt;
&lt;P&gt;&lt;FONT face=Verdana size=4&gt;&lt;STRONG&gt;STEP 2:&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Now save the following .vbs code as WSUSReport.vbs for computers needing updates using the stored procedure above. The following code requires Outlook CDO components to be installed or some other application that installs the CDO.Message object from the computer running WSUSReport.vbs.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;STRONG&gt;WSUSReport.vbs:-&lt;/STRONG&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;DIV class=MsoNormal align=center&gt;
&lt;HR align=center&gt;
&lt;/DIV&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'On Error Resume Next&lt;BR&gt;Const adCmdStoredProc = 4&lt;BR&gt;Const adUseClient = 3&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'Requires the Outlook CDO components to be installed or some other application that installs the CDO.Message object.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;smtp_mail_from = "Some Friendly Name &amp;lt;&lt;/FONT&gt;&lt;A href="mailto:someaddress@somesite.org"&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;someaddress@somesite.org&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;gt;"&lt;BR&gt;smtp_mail_to = "Recipient Name &amp;lt;&lt;/FONT&gt;&lt;A href="mailto:recipient@somesite.org"&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;recipient@somesite.org&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;gt;"&lt;BR&gt;smtp_server = "somesmtpserver.somesite.org"&lt;BR&gt;smtp_port = "25"&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;db = "SUSDB"&lt;BR&gt;appname = "SUSDB Mailer"&lt;BR&gt;db_server = "YOUR-DB-SERVER"&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Set Conn = CreateObject("ADODB.Connection")&lt;BR&gt;if Err.Number &amp;lt;&amp;gt; 0 Then&lt;BR&gt;&amp;nbsp; WScript.Echo "Failed creating ADODB.Connection object -&amp;gt; " &amp;amp; Err.Description&lt;BR&gt;&amp;nbsp; WScript.Quit(0)&lt;BR&gt;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Conn.ConnectionTimeout = 15&lt;BR&gt;Conn.CursorLocation = adUseClient&lt;BR&gt;Conn.Open = "DRIVER={SQL Server};SERVER=" &amp;amp; db_server &amp;amp; ";APP=" &amp;amp; appname &amp;amp; ";DATABASE=" &amp;amp; db &amp;amp; ";Trusted_Connection=yes;"&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;if Err.Number &amp;lt;&amp;gt; 0 Then&lt;BR&gt;&amp;nbsp; WScript.Echo "Failed opening ADODB.Connection object with DB info-&amp;gt; " &amp;amp; Err.Description&lt;BR&gt;&amp;nbsp; WScript.Quit(0)&lt;BR&gt;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Set Cmd = CreateObject("ADODB.Command")&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;if Err.Number &amp;lt;&amp;gt; 0 Then&lt;BR&gt;&amp;nbsp; WScript.Echo "Failed creating ADODB.Command object -&amp;gt; " &amp;amp; Err.Description&lt;BR&gt;&amp;nbsp; WScript.Quit(0)&lt;BR&gt;End If&lt;BR&gt;Cmd.CommandText = "spSRMCountComputersNeedingUpdates"&lt;BR&gt;Cmd.CommandType = adCmdStoredProc&lt;BR&gt;Cmd.ActiveConnection = Conn&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Cmd.Prepared = 1&lt;BR&gt;Cmd.CommandTimeout = 15&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Set RS = Cmd.Execute&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;if Err.Number &amp;lt;&amp;gt; 0 Then&lt;BR&gt;&amp;nbsp; WScript.Echo "Failed opening ADODB.Recordset object for Command -&amp;gt; " &amp;amp; Err.Description&lt;BR&gt;&amp;nbsp; WScript.Quit(0)&lt;BR&gt;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;rs_count = RS.RecordCount&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Dim string&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;string = "&amp;lt;HTML&amp;gt;&amp;lt;BODY&amp;gt;" &amp;amp; vbCrlf&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;if RS.Fields(0) &amp;gt; 0 Then &lt;BR&gt;&amp;nbsp; WScript.Echo "Count = " &amp;amp; RS.Fields(0).Value&lt;BR&gt;&amp;nbsp; Set RSUpdates = RS.NextRecordSet&lt;BR&gt;&amp;nbsp; Set RSData = RS.NextRecordSet&lt;BR&gt;Else &lt;BR&gt;&amp;nbsp; WScript.Echo "No updates.&amp;nbsp; Quitting successfully"&lt;BR&gt;&amp;nbsp; WScript.Quit(1)&lt;BR&gt;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'Loop through all the computers that need updates&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp; Dim Updates&lt;BR&gt;&amp;nbsp; Dim Computers&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; Dim vContainer&lt;BR&gt;&amp;nbsp; ' Create the dictionary instances.&lt;BR&gt;&amp;nbsp; Set Updates = CreateObject ("Scripting.Dictionary")&lt;BR&gt;&amp;nbsp; Updates.CompareMode = StringCompare&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;x = 0&lt;BR&gt;while (RSUpdates.EOF &amp;lt;&amp;gt; True)&lt;BR&gt;&amp;nbsp; if Not Updates.Exists(RSUpdates.Fields("LocalUpdateID").Value) Then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Updates.Add RSUpdates.Fields("LocalUpdateID").Value, RSUpdates.Fields("FullDomainName").Value&lt;BR&gt;&amp;nbsp; Else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Updates.Item(RSUpdates.Fields("LocalUpdateID").Value) = Updates.Item(RSUpdates.Fields("LocalUpdateID").Value) &amp;amp; "," &amp;amp; RSUpdates.Fields("FullDomainName").Value&lt;BR&gt;&amp;nbsp; End If&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; RSUpdates.MoveNext&lt;BR&gt;Wend&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;while (RSData.EOF &amp;lt;&amp;gt; True)&lt;BR&gt;&amp;nbsp; strUpdateID = RSData.Fields("LocalUpdateID").Value&lt;BR&gt;&amp;nbsp; strSrv = Updates.Item(strUpdateID)&lt;BR&gt;&amp;nbsp; strUpdateType = RSData.Fields("UpdateTypeName").Value&lt;BR&gt;&amp;nbsp; strKBID = RSData.Fields("KBArticleID").Value&lt;BR&gt;&amp;nbsp; strBulletinID = RSData.Fields("SecurityBulletinID").Value&lt;BR&gt;&amp;nbsp; strInfoURL = RSData.Fields("MoreInfoURL").Value&lt;BR&gt;&amp;nbsp; strUpdateTitle = RSData.Fields("UpdateTitle").Value&lt;BR&gt;&amp;nbsp; strUpdateDesc = RSData.Fields("UpdateDescription").Value&lt;BR&gt;&amp;nbsp; string = string &amp;amp; "&amp;lt;TABLE border = 1&amp;gt;" &amp;amp; vbCrlf &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;&amp;lt;b&amp;gt;Type:&amp;lt;/B&amp;gt; " &amp;amp; strUpdateType &amp;amp; "&amp;lt;/TD&amp;gt;&amp;lt;TD&amp;gt;&amp;lt;B&amp;gt;KB Article:&amp;lt;/B&amp;gt; " &amp;amp; strKBID &amp;amp; "&amp;lt;/TD&amp;gt;&amp;lt;TD&amp;gt;&amp;lt;B&amp;gt;Bulletin:&amp;lt;/B&amp;gt; " &amp;amp; strBulletinID &amp;amp; "&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;" &amp;amp; vbCrlf &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;TR&amp;gt;&amp;lt;TD colspan = 3&amp;gt;&amp;lt;B&amp;gt;Title:&amp;lt;/B&amp;gt; " &amp;amp; strUpdateTitle &amp;amp; "&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;" &amp;amp; vbCrlf &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;TR&amp;gt;&amp;lt;TD colspan = 3&amp;gt;&amp;lt;B&amp;gt;Description:&amp;lt;/B&amp;gt; " &amp;amp; strUpdateDesc &amp;amp; "&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;" &amp;amp; vbCrlf &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;TR&amp;gt;&amp;lt;TD colspan = 3&amp;gt;&amp;lt;B&amp;gt;More Information:&amp;lt;/B&amp;gt; &amp;lt;A href=" &amp;amp; strInfoURL &amp;amp; "&amp;gt;" &amp;amp; strInfoURL &amp;amp; "&amp;lt;/A&amp;gt;&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;" &amp;amp; vbCrlf &amp;amp; _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;TR&amp;gt;&amp;lt;TD colspan = 3&amp;gt;&amp;lt;B&amp;gt;Server Name(s):&amp;lt;/B&amp;gt; " &amp;amp; strSrv &amp;amp; "&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&amp;lt;/TABLE&amp;gt;" &amp;amp; vbCrlf&lt;BR&gt;&amp;nbsp; RSData.MoveNext&lt;BR&gt;Wend&lt;BR&gt;string = string &amp;amp; "&amp;lt;/BODY&amp;gt;&amp;lt;/HTML&amp;gt;"&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Set cdoMessage = CreateObject("CDO.Message")&lt;BR&gt;cdoMessage.Subject = "WSUS: There are computers needing updates"&lt;BR&gt;cdoMessage.From = smtp_mail_from&lt;BR&gt;cdoMessage.To = smtp_mail_to&lt;BR&gt;cdoMessage.HTMLBody = string&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;cdoMessage.Configuration.Fields.Item("&lt;/FONT&gt;&lt;A href="http://schemas.microsoft.com/cdo/configuration/sendusing"&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;http://schemas.microsoft.com/cdo/configuration/sendusing&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;") = 2 &lt;BR&gt;cdoMessage.Configuration.Fields.Item("&lt;/FONT&gt;&lt;A href="http://schemas.microsoft.com/cdo/configuration/smtpserver"&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;http://schemas.microsoft.com/cdo/configuration/smtpserver&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;") = smtp_server&lt;BR&gt;cdoMessage.Configuration.Fields.Item("&lt;/FONT&gt;&lt;A href="http://schemas.microsoft.com/cdo/configuration/smtpserverport"&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;http://schemas.microsoft.com/cdo/configuration/smtpserverport&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;") = smtp_port &lt;BR&gt;cdoMessage.Configuration.Fields.Update&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;cdoMessage.Send&lt;BR&gt;If Err.Number = 0 Then&lt;BR&gt;&amp;nbsp; WScript.Echo "Success"&lt;BR&gt;&amp;nbsp; WScript.Quit(1)&lt;BR&gt;Else &lt;BR&gt;&amp;nbsp; WScript.Echo "Error sending CDO Message: " &amp;amp; Err.Description&lt;BR&gt;&amp;nbsp; WScript.Quit(0)&lt;BR&gt;End If&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;
&lt;DIV class=MsoNormal align=center&gt;
&lt;HR align=center&gt;
&lt;/DIV&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT face=Verdana size=4&gt;MORE INFORMATION&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;FONT face=Verdana size=2&gt;
&lt;UL&gt;
&lt;LI class=MsoNormal&gt;&lt;SPAN&gt;&lt;A href="http://www.manross.net/wsus/reporting/spSRMCountComputersNeedingUpdates.sql.txt"&gt;SQL Procedure counting the number of computers needing updates&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt; 
&lt;LI class=MsoNormal&gt;&lt;SPAN&gt;&lt;A href="http://www.manross.net/wsus/reporting/wsusreport.pl.txt"&gt;WSUS Report - sends email to specified users when there are computers needing updates (utilizes the procedure above) -- Perl Script&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt; 
&lt;LI class=MsoNormal&gt;&lt;SPAN&gt;&lt;A href="http://www.manross.net/wsus/reporting/wsusreport.vbs.txt"&gt;WSUS Report - sends email to specified users when there are computers needing updates (utilizes the procedure above) -- -- VB Script&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Kudos to Steven - &lt;/FONT&gt;&lt;A href="http://www.manross.net/links.html"&gt;&lt;FONT face=Verdana size=2&gt;http://www.manross.net/links.html&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=102820" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>Checking the Version of Windows Installer</title><link>http://msmvps.com/blogs/athif/archive/2006/06/03/99125.aspx</link><pubDate>Sat, 03 Jun 2006 12:55:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:99125</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=99125</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/06/03/99125.aspx#comments</comments><description>&lt;P&gt;&lt;A id=_ctl0____ctl0____ctl2___BlogTitle HREF="/blogs/ad/archive/2006/05/30/98336.aspx"&gt;&lt;FONT face=Verdana color=#0000ff size=2&gt;Brian McCann&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; wants to know a better way to Check the Version of Windows Installer. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;According to &lt;A href="http://blogs.msdn.com/windows_installer_team/archive/2005/08/05/448386.aspx"&gt;Windows Installer Team blog&lt;/A&gt;, "If you want to check the version of the Windows Installer on your system, check the version of MSI.DLL in the Windows\System32 folder. If the version is 3.1.4000.2435, you have the latest version. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;One common point of confusion is that even if you have the latest version of Windows Installer 3.1 on your system and you type in &lt;EM&gt;msiexec.exe /?&lt;/EM&gt; from a command-window, you will still be told that you are on version 3.1.4000.1823 or 3.1.4000.1830. This is because &lt;EM&gt;msiexec.exe /?&lt;/EM&gt; will only give you the version of msiexec on the system -- not the other Windows Installer-related dll's. (The version of msiexec was not updated to 3.1.4000.2435 with the (v2) redistributable, just msi.dll was updated.)"&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Luckily, I found a &lt;A href="http://groups.google.com/group/microsoft.public.scripting.vbscript/browse_thread/thread/2698667bed1fc945/972fde8bfa8228ce?lnk=st&amp;amp;q=&amp;amp;rnum=2&amp;amp;hl=en#972fde8bfa8228ce"&gt;neat .vbs browser hosted script&lt;/A&gt; by &lt;STRONG&gt;&lt;FONT color=#790619&gt;Michael Harris \(MVP Scripting\)&lt;/FONT&gt;&lt;/STRONG&gt;. Save the following code as .htm&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;FONT face="Courier New" color=#0000ff&gt;&amp;lt;html&amp;gt; &lt;BR&gt;&amp;lt;head&amp;gt; &lt;BR&gt;&amp;lt;script language="vbscript"&amp;gt; &lt;BR&gt;sub document_onclick() &lt;BR&gt;set installer = createobject("windowsinstaller.installer") &lt;BR&gt;msgbox installer.version &lt;BR&gt;end sub &lt;BR&gt;&amp;lt;/script&amp;gt; &lt;BR&gt;&amp;lt;/head&amp;gt; &lt;BR&gt;&amp;lt;body&amp;gt; &lt;BR&gt;&lt;STRONG&gt;Click me for Windows Installer version...&lt;/STRONG&gt; &lt;BR&gt;&amp;lt;/body&amp;gt; &lt;BR&gt;&amp;lt;/html&amp;gt;&lt;/FONT&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;and you are done:-). Note that the "windowsinstaller.installer" object is not marked safe for scripting in IE browser hosted script... Double click the saved htm file and then you need to click the information bar to allow the blocked ActiveX control in IE&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;If the machine is configured for automatic updates using WSUS then it will update the installer automatically as mandatory WSUS update :-).&lt;/P&gt;&lt;/FONT&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=99125" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>VBScript to check if the new AU Client (WUA) is needed and installing it accordingly</title><link>http://msmvps.com/blogs/athif/archive/2006/05/17/95463.aspx</link><pubDate>Wed, 17 May 2006 14:06:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:95463</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=95463</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/05/17/95463.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The VBScript code below from Scripting Guru &lt;STRONG&gt;&lt;FONT color=#790619&gt;Torgeir Bakken (MVP) &lt;/FONT&gt;&lt;/STRONG&gt;checks if the new AU client is needed on the computer, and runs &lt;FONT color=#0000ff&gt;WindowsUpdateAgent20-x86.exe&lt;/FONT&gt; if required in silent mode. Thanks Torgeir.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;IMG class=note src="http://msdn.microsoft.com/library/en-us/xmlsdk/local/note.gif"&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;NOTES:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Adjust path in the sExePath variable. &lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;If the users are local administrators, you can run the script as part of a logon script. &lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Alternatively, if the computers are in an Active Directory domain, you can do it in a computer startup script (with a GPO) that runs as part of the boot up process (before the user logs in). It runs under the system context and has admin rights. &lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The script uses the &lt;FONT color=#0000ff&gt;IWindowsUpdateAgentInfo::GetInfo&lt;/FONT&gt; method instead of checking the version of the file wuaueng.dll. Also, if the interface does not exist because the AU client is to old, the script will install the client. &lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;The script below uses both methods to check for an already up to date version.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;'--------------------8&amp;lt;---------------------- &lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff&gt;Option Explicit &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Verdana size=2&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff&gt;Dim strExePath, bolUpdateNeeded, objAgentInfo &lt;BR&gt;Dim intMajorVersion, objShell &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff&gt;' prefix with an UNC path if necessary &lt;BR&gt;strExePath = "WindowsUpdateAgent20-x86.exe" &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff&gt;bolUpdateNeeded = True&amp;nbsp;&amp;nbsp; ' init value, do not touch &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff&gt;On Error Resume Next &lt;BR&gt;Set objAgentInfo = CreateObject("Microsoft.Update.AgentInfo") &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff&gt;If Err.Number = 0 Then &lt;BR&gt;&amp;nbsp;&amp;nbsp; ' object exists, now check if ApiMajorVersion is 3 or higher &lt;BR&gt;&amp;nbsp;&amp;nbsp; intMajorVersion = 0&amp;nbsp;&amp;nbsp; ' init value &lt;BR&gt;&amp;nbsp;&amp;nbsp; intMajorVersion = objAgentInfo.GetInfo("ApiMajorVersion") &lt;BR&gt;&amp;nbsp;&amp;nbsp; If intMajorVersion &amp;gt;= 3 Then &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bolUpdateNeeded = False &lt;BR&gt;&amp;nbsp;&amp;nbsp; End If &lt;BR&gt;End If &lt;BR&gt;On Error Goto 0 &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff&gt;If bolUpdateNeeded Then &lt;BR&gt;&amp;nbsp;&amp;nbsp; Set objShell = CreateObject("WScript.Shell") &lt;BR&gt;&amp;nbsp;&amp;nbsp; ' install the AU client &lt;BR&gt;&amp;nbsp;&amp;nbsp; objShell.Run strExePath &amp;amp; " /quiet /norestart", 1, True &lt;BR&gt;End If &lt;BR&gt;&lt;/FONT&gt;'--------------------8&amp;lt;---------------------- &lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=4&gt;&lt;STRONG&gt;MORE INFORMATION&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Determining the Current Version of WUA &lt;BR&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/wua_sdk/wua/determining_the_current_version_of_wua.asp?frame=true"&gt;http://msdn.microsoft.com/library/en-us/wua_sdk/wua/determining_the_current_version_of_wua.asp?frame=true&lt;/A&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Re-installing Windows Update Agent (WUA)&lt;BR&gt;&lt;a href="http://msmvps.com/blogs/athif/archive/2006/04/05/Re_Installing_WUA.aspx"&gt;http://msmvps.com/blogs/athif/archive/2006/04/05/Re_Installing_WUA.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Automatic Update Client Versions History&lt;BR&gt;&lt;a href="http://msmvps.com/blogs/athif/archive/2005/06/15/Automatic_Update_Client_Versions_History.aspx"&gt;http://msmvps.com/blogs/athif/archive/2005/06/15/Automatic_Update_Client_Versions_History.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;For x86-based computers (WindowsUpdateAgent20-x86.exe) &lt;BR&gt;&lt;A href="http://go.microsoft.com/fwlink/?LinkId=43264"&gt;http://go.microsoft.com/fwlink/?LinkId=43264&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;For x64-based computers (WindowsUpdateAgent20-x64.exe): &lt;BR&gt;&lt;A href="http://go.microsoft.com/fwlink/?LinkId=43265"&gt;http://go.microsoft.com/fwlink/?LinkId=43265&lt;/A&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=95463" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>WSUS Client Report Script by -- Rob Dunn</title><link>http://msmvps.com/blogs/athif/archive/2006/05/17/95443.aspx</link><pubDate>Wed, 17 May 2006 12:05:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:95443</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=95443</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/05/17/95443.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;So, if you are looking for a&amp;nbsp;report&amp;nbsp;of&amp;nbsp;some/specific or all&amp;nbsp;WSUS Clients, then you might want to check out &lt;A href="http://vbshf.com"&gt;Rob Dunn&lt;/A&gt;'s script&amp;nbsp;'&lt;A href="http://www.vbshf.com/vbshf/forum/forums/get-attachment.asp?attachmentid=125"&gt;WSUS_Client_Report.vbs&lt;/A&gt;'.&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;This is really great. For instance, If I want to view a report of&amp;nbsp;all WSUS Client computers in my Active Directory domain, then I can just enter any common letter such as "A" or "&lt;STRONG&gt;.&lt;/STRONG&gt;" or "com" or "Domain-Name" in the input box&amp;nbsp;and hit OK. Voila! You will see a report of all WSUS Client computers. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;This is very sweet. Thanks Rob!&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;IMG class=note src="http://msdn.microsoft.com/library/en-us/xmlsdk/local/note.gif"&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;NOTES:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;You must be in the WSUS administrator's group to see the report, and if you are running this against a remote SQL box, you must be an admin to get to the database. You will need to change the connection string if you only have access to the SUSDB instance on the SQL server. &lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Edit strWSUSDBServer = "Your-WSUS-Server" / "Your-WSUS-Server:8530" &lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Edit strWSUSServer = "Your-WSUS-Server" / "Your-WSUS-Server:8530" &lt;BR&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;' -------------------START SCRIPT------------------&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'Input name of computer and link directly to that computers' WSUS report.&lt;BR&gt;'&lt;BR&gt;'You must be in the WSUS admins group on the server you are querying against&lt;BR&gt;'You must have access to the database to perform queries&lt;BR&gt;'&lt;BR&gt;'An html page will be generated with a list of computers that matched the &lt;BR&gt;' search criteria you specified.&lt;BR&gt;Const ForWriting = 2&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Dim strComputerID, t, strComputerIDArray&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'Your WSUS server.&amp;nbsp; If you are running remote SQL, enter your SQL server name&lt;BR&gt;' here instead.&lt;BR&gt;strWSUSDBServer = "sadadsms-mn" &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'Your WSUS server - i.e. where you run the administration from.&amp;nbsp; If you are &lt;BR&gt;' not running remote SQL, then this variable should be the same as the variable&lt;BR&gt;' above.&lt;BR&gt;strWSUSServer = "sadadsms-mn:8530"&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'Set some font settings for our HTML page.&lt;BR&gt;fface = "arial"&lt;BR&gt;fcolor = "black"&lt;BR&gt;fsize = "2"&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Set myconn = CreateObject("adodb.connection")&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;strComputer = InputBox("Enter the search criteria for the computer name you wish to " _&lt;BR&gt;&amp;nbsp;&amp;amp; "retreive statitistics for:","Enter computer name search text")&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'If nothing was entered, then quit.&lt;BR&gt;If strComputer = "" Then wscript.quit&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'set up the connection string.&amp;nbsp; This is using Windows NT authentication&lt;BR&gt;' noted by Integrated Security=SSPI.&lt;BR&gt;connection = "Provider=SQLOLEDB;" &amp;amp; _ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Data Source=" &amp;amp; strWSUSDBServer &amp;amp; ";" &amp;amp; _ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Initial Catalog=SUSDB;" &amp;amp; _ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Integrated Security=SSPI" &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'Open the connection to the database.&lt;BR&gt;myconn.open (connection)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'Set some objects.&lt;BR&gt;Set WshShell = WScript.CreateObject("WScript.Shell")&lt;BR&gt;Set WshSysEnv = WshShell.Environment("PROCESS")&lt;BR&gt;Set ws = wscript.CreateObject("Scripting.FileSystemObject")&lt;BR&gt;Set result = CreateObject("adodb.recordset")&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'Define our temporary report index file.&lt;BR&gt;tempfile = WshSysEnv("TEMP") &amp;amp; "\" &amp;amp; "WSUS_Computer_Report.htm"&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'Open the file for writing.&lt;BR&gt;Set t = ws.OpenTextFile (tempfile, ForWriting, True)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'Generate the HTML &lt;BR&gt;Call setupHTM("begin")&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'Create a SQL string that would bring back the results where the fulldomainname field has any instance&lt;BR&gt;' of the strcomputer text in it.&lt;BR&gt;SQL = "SELECT computerID,FullDomainName from tbComputerTarget WHERE FullDomainName LIKE '%" &amp;amp; strComputer &amp;amp; "%'"&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'Run the query.&lt;BR&gt;Call GetComputerInfo&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'Close the HTML&lt;BR&gt;Call SetupHTM("end")&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'If no search results were found, produce a msgbox and exit.&lt;BR&gt;If strComputerID = "" Then &lt;BR&gt;&amp;nbsp;msgbox "No computers with %" &amp;amp; strComputer &amp;amp; "% in the computer name field does not appear in the WSUS database specified on " _&lt;BR&gt;&amp;nbsp; &amp;amp; "the server " &amp;amp; strWSUSServer &amp;amp; "."&lt;BR&gt;&amp;nbsp;wscript.quit&lt;BR&gt;Else&lt;BR&gt;&amp;nbsp;'otherwise, open up the html page.&lt;BR&gt;&amp;nbsp;Set oShell = CreateObject("WScript.Shell")&lt;BR&gt;&amp;nbsp;oShell.Run tempfile,1,false&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Sub GetComputerInfo&lt;BR&gt;&amp;nbsp; set result = myconn.execute(SQL)&lt;BR&gt;&amp;nbsp; &amp;nbsp;if not result.EOF then&lt;BR&gt;&amp;nbsp;&amp;nbsp;While not result.EOF&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Put the field results for ComputerID into the strComputerID variable&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;strComputerID = result("ComputerID")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Put the field results for FullDomainName into the strComputer variable&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;strComputer = result("FullDomainName")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Write the hyperlink into a table row in the html file.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;t.writeline("&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;font face='" &amp;amp; fface &amp;amp; "' color='" _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp; fcolor &amp;amp; "' size='" &amp;amp; fsize &amp;amp; "'&amp;gt;&amp;lt;a href='http://" &amp;amp; strWSUSServer _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp; "/WsusAdmin/Reporting/ComputerDetailsReport.aspx?computerId=" &amp;amp; strComputerID &amp;amp; "'&amp;gt;" _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp; strComputer &amp;amp; "&amp;lt;/a&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Move to the next record.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;result.movenext()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;Wend&lt;BR&gt;&amp;nbsp;Else&amp;nbsp;&lt;BR&gt;&amp;nbsp;End If&lt;BR&gt;End Sub&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Function SetupHTM(strVar)&lt;BR&gt;&amp;nbsp;'If this is the beginning of the file, set up the head, title, and table for the page.&lt;BR&gt;&amp;nbsp;If LCase(strVar) = "begin" Then &lt;BR&gt;&amp;nbsp;&amp;nbsp;t.writeline ("&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt; WSUS Search Results &amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;")&lt;BR&gt;&amp;nbsp;&amp;nbsp;t.writeline ("&amp;lt;font face='" &amp;amp; fface &amp;amp; "' color='" &amp;amp; fcolor &amp;amp; "'&amp;gt;&amp;lt;strong&amp;gt;" _&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;amp; " Click on a computername to view the WSUS client report.&amp;lt;/strong&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;table&amp;gt;")&lt;BR&gt;&amp;nbsp;ElseIf LCase(strVar) = "end" Then&lt;BR&gt;&amp;nbsp;&amp;nbsp;'if this is the end of the file, close out the table and html code.&amp;nbsp; Then close the&lt;BR&gt;&amp;nbsp;&amp;nbsp;' file entirely.&lt;BR&gt;&amp;nbsp;&amp;nbsp;t.writeline ("&amp;lt;/table&amp;gt;&amp;lt;/html&amp;gt;")&lt;BR&gt;&amp;nbsp;&amp;nbsp;t.close&lt;BR&gt;&amp;nbsp;End If&lt;BR&gt;End Function&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;' --------------------END SCRIPT-------------------&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=4&gt;&lt;STRONG&gt;MORE INFORMATION&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Shortcut to particular WSUS client report&lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://www.vbshf.com/vbshf/forum/forums/thread-view.asp?tid=206&amp;amp;posts=1&amp;amp;start=1"&gt;&lt;FONT face=Verdana size=2&gt;http://www.vbshf.com/vbshf/forum/forums/thread-view.asp?tid=206&amp;amp;posts=1&amp;amp;start=1&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=95443" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>WUAUCLT /detectnow - VBS and GUI methods</title><link>http://msmvps.com/blogs/athif/archive/2006/05/15/95060.aspx</link><pubDate>Mon, 15 May 2006 13:15:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:95060</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=95060</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/05/15/95060.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;So, how do you force the update detection? In this blog entry, let's take a look at some of the techniques.&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;A href="http://www.vbshf.com"&gt;Rob Dunn [WSUS MVP]&lt;/A&gt;&amp;nbsp;has created this simple script to force remote computer to perform wuauclt.exe /detectnow&amp;nbsp;using object methods. That's cool Rob -&amp;nbsp;Thanks again.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;' ---------------START CODE---------------&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;FONT color=#0000ff&gt;strComputer = inputbox("Enter a computer name to run WUA detectnow","Invoke detectnow") &lt;BR&gt;if strComputer = "" then wscript.quit &lt;BR&gt;on error goto 0 &lt;BR&gt;Set autoUpdateClient = CreateObject("Microsoft.Update.AutoUpdate",strComputer) &lt;BR&gt;AutoUpdateClient.detectnow() &lt;BR&gt;wscript.echo "All done."&lt;/FONT&gt;&lt;BR&gt;' ----------------END CODE-----------------&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;For all GUI fans, take a look at &lt;A href="http://translate.google.com/translate?hl=en&amp;amp;sl=de&amp;amp;u=http://www.wsus.de/&amp;amp;prev=/search%3Fq%3Dwsus.de%26hl%3Den%26lr%3D%26safe%3Dactive"&gt;WSUS - DETECTNOW 2.0&lt;/A&gt; from WSUS.de. With this GUI Tool, you can trigger detection for approved updates and can reset SusClientId too. &lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Verdana size=4&gt;&lt;STRONG&gt;MORE INFORMATION&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Force remote computer to perform wuauclt.exe /detectnow (WSUS) - using object methods&lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://www.vbshf.com/vbshf/forum/forums/thread-view.asp?tid=242"&gt;&lt;FONT face=Verdana size=2&gt;http://www.vbshf.com/vbshf/forum/forums/thread-view.asp?tid=242&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Execute a Windows Update Detect Cycle on a Remote Computer&lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://www.microsoft.com/technet/scriptcenter/csc/scripts/software/update/cscsw026.mspx"&gt;&lt;FONT face=Verdana size=2&gt;http://www.microsoft.com/technet/scriptcenter/csc/scripts/software/update/cscsw026.mspx&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;WSUS - DETECTNOW 2.0&lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://downloads.wsus.de/wsus_detect_now/WSUS_detect_now_2.0_eng.exe"&gt;&lt;FONT face=Verdana size=2&gt;http://downloads.wsus.de/wsus_detect_now/WSUS_detect_now_2.0_eng.exe&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;&lt;BR&gt;&lt;A href="http://downloads.wsus.de/wsus_detect_now/WSUS_detect_now_2.0_ger.exe"&gt;&lt;FONT face=Verdana size=2&gt;http://downloads.wsus.de/wsus_detect_now/WSUS_detect_now_2.0_ger.exe&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Quick AU Client Detection &amp;amp; Installation with Windows Server Updates Services, WSUS&lt;BR&gt;&lt;/FONT&gt;&lt;a href="http://msmvps.com/blogs/athif/archive/2005/06/29/56200.aspx"&gt;&lt;FONT face=Verdana size=2&gt;http://msmvps.com/blogs/athif/archive/2005/06/29/56200.aspx&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;WSUS: Script to Force the Update Detection from Automatic Update Client (WUA) for updates on WSUS Server&lt;BR&gt;&lt;/FONT&gt;&lt;a href="http://msmvps.com/blogs/athif/articles/66375.aspx"&gt;&lt;FONT face=Verdana size=2&gt;http://msmvps.com/blogs/athif/articles/66375.aspx&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Windows Update Agent force script, email results version 2.15 by -- Rob Dunn[WSUS MVP]&lt;BR&gt;&lt;/FONT&gt;&lt;a href="http://msmvps.com/blogs/athif/archive/2006/05/09/94089.aspx"&gt;&lt;FONT face=Verdana size=2&gt;http://msmvps.com/blogs/athif/archive/2006/05/09/94089.aspx&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=95060" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>Script to Check WSUS Client / Windows Update Agent (WUA) Settings</title><link>http://msmvps.com/blogs/athif/archive/2006/05/15/95058.aspx</link><pubDate>Mon, 15 May 2006 12:31:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:95058</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=95058</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/05/15/95058.aspx#comments</comments><description>&lt;P&gt;&lt;A href="http://www.wsus.de/"&gt;&lt;FONT face=Verdana size=2&gt;WSUS.de&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; is yet another WSUS Community Web-Site. This site is hosted in German language and I have used &lt;A href="http://www.google.com/intl/en_ALL/help/faq_translation.html"&gt;Google Translation&lt;/A&gt; (a free service) to translate in English. So here we go &lt;/FONT&gt;&lt;A href="http://translate.google.com/translate?hl=en&amp;amp;sl=de&amp;amp;u=http://www.wsus.de/&amp;amp;prev=/search%3Fq%3Dwsus.de%26hl%3Den%26lr%3D%26safe%3Dactive"&gt;&lt;FONT face=Verdana size=2&gt;WSUS.de in English&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;My first pick is &lt;A href="http://downloads.wsus.de/check_wsus/Check_WSUS_eng.zip"&gt;Check WSUS (version 1.05.04.1)&lt;/A&gt;. This .vbs script will Check WSUS Client / Windows Update Agent (WUA) Settings for any computer in the network. When you run this script, it will prompt you to enter Computer Name or IP Address of the machine that you want to check.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;A copy of the script is as follows;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'---------------------START-----------------------&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;' Einstellungen für die automatischen Updates&lt;BR&gt;' &lt;/FONT&gt;&lt;A href="http://www.wsus.de/"&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;http://www.wsus.de/&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;' Version 1.05.04.1&lt;BR&gt;' Translated quick and dirty into English Marco Biagini&lt;BR&gt;' &lt;/FONT&gt;&lt;A href="mailto:mbiagini@ehsd.cccounty.us"&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;mbiagini@ehsd.cccounty.us&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'--------------------------------------------&lt;BR&gt;On Error Resume Next&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Set objWshNet = CreateObject("Wscript.Network")&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;const HKCU = &amp;amp;H80000001&lt;BR&gt;const HKLM = &amp;amp;H80000002&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;strDefComputer = lcase(objWshNet.ComputerName)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Set oArgs = WScript.Arguments&lt;BR&gt;If oArgs.Count = 0 Then&lt;BR&gt;&amp;nbsp;strComputer = InputBox("Please enter the name or IP address of the Computer that you want to check WSUS settings", "Automatic Updates", strDefComputer)&lt;BR&gt;Else&lt;BR&gt;&amp;nbsp;strComputer = oArgs(0)&lt;BR&gt;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;If strComputer = "" Then&lt;BR&gt;&amp;nbsp;WScript.Quit&lt;BR&gt;End if&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;strComputer = lcase(strComputer)&lt;BR&gt;if left(strComputer,2)="\\" then&lt;BR&gt;&amp;nbsp;strComputer=right(strComputer,(len(strComputer)-2))&lt;BR&gt;end if&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &amp;amp; strComputer &amp;amp; "\root\default:StdRegProv")&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;If Err.Number &amp;lt;&amp;gt; 0 Then&lt;BR&gt;&amp;nbsp;msgbox "Unable to connect to:" &amp;amp; VBCRLF &amp;amp; VBCRLF &amp;amp; "&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; " &amp;amp; strComputer &amp;amp; VBCRLF, vbCritical, "Communication Error"&lt;BR&gt;&amp;nbsp;WScript.Quit&lt;BR&gt;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Resultmsg = "**** Results of WUA Settings ****" &amp;amp; VBCRLF &amp;amp; VBCRLF&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;strMsg = "No Auto Update:&amp;nbsp; "&lt;BR&gt;strKeyPath = "Software\Policies\Microsoft\Windows\WindowsUpdate\AU"&lt;BR&gt;strValueName = "NoAutoUpdate"&lt;BR&gt;If RegValueExists(strKeyPath, strValueName) Then&lt;BR&gt;&amp;nbsp;oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue&lt;BR&gt;&amp;nbsp;Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; GetNoAutoUpdate(dwValue) &amp;amp; VBCRLF &amp;amp; VBCRLF&lt;BR&gt;Else&lt;BR&gt;&amp;nbsp;Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Automatic Updates are not configured" &amp;amp; VBCRLF &amp;amp; VBCRLF&lt;BR&gt;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;strMsg = "Use WU Server:&amp;nbsp; "&lt;BR&gt;strKeyPath = "Software\Policies\Microsoft\Windows\WindowsUpdate\AU"&lt;BR&gt;strValueName = "UseWUServer"&lt;BR&gt;If RegValueExists(strKeyPath, strValueName) Then&lt;BR&gt;&amp;nbsp;oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue&lt;BR&gt;&amp;nbsp;Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; GetUseWUServer(dwValue) &amp;amp; VBCRLF&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;If dwValue = "1" Then&lt;BR&gt;&amp;nbsp; strMsg = "&amp;nbsp; - WSUS Server:&amp;nbsp; "&lt;BR&gt;&amp;nbsp; strKeyPath = "Software\Policies\Microsoft\Windows\WindowsUpdate"&lt;BR&gt;&amp;nbsp; strValueName = "WUServer"&lt;BR&gt;&amp;nbsp; If RegValueExists(strKeyPath, strValueName) Then&lt;BR&gt;&amp;nbsp;&amp;nbsp; oReg.GetStringValue HKLM,strKeyPath,strValueName,strValue&lt;BR&gt;&amp;nbsp;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; strValue &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp; Else&lt;BR&gt;&amp;nbsp;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Automatic Updates are not configured" &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp; End If&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp; strMsg = "&amp;nbsp; - WU Status Server:&amp;nbsp; "&lt;BR&gt;&amp;nbsp; strKeyPath = "Software\Policies\Microsoft\Windows\WindowsUpdate"&lt;BR&gt;&amp;nbsp; strValueName = "WUStatusServer"&lt;BR&gt;&amp;nbsp; If RegValueExists(strKeyPath, strValueName) Then&lt;BR&gt;&amp;nbsp;&amp;nbsp; oReg.GetStringValue HKLM,strKeyPath,strValueName,strValue&lt;BR&gt;&amp;nbsp;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; strValue &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp; Else&lt;BR&gt;&amp;nbsp;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Automatic Updates are not configured" &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp; End If&lt;BR&gt;&amp;nbsp;Else&lt;BR&gt;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp;End If&lt;BR&gt;Else&lt;BR&gt;&amp;nbsp;Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Automatic Updates are not configured" &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp;Resultmsg = Resultmsg &amp;amp; "&amp;nbsp; - Client configured to receive Updates from windowsupdate.microsoft.com" &amp;amp; VBCRLF&lt;BR&gt;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;strMsg = "&amp;nbsp; - TargetGroup:&amp;nbsp; "&lt;BR&gt;strKeyPath = "Software\Policies\Microsoft\Windows\WindowsUpdate"&lt;BR&gt;strValueName = "TargetGroup"&lt;BR&gt;&amp;nbsp;If RegValueExists(strKeyPath, strValueName) Then&lt;BR&gt;&amp;nbsp; oReg.GetStringValue HKLM,strKeyPath,strValueName,strValue&lt;BR&gt;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; strValue &amp;amp; VBCRLF &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp;Else&lt;BR&gt;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Value not configured" &amp;amp; VBCRLF &amp;amp; VBCRLF&lt;BR&gt;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;strMsg = "AU Options:&amp;nbsp; "&lt;BR&gt;strKeyPath = "Software\Policies\Microsoft\Windows\WindowsUpdate\AU"&lt;BR&gt;strValueName = "AUOptions"&lt;BR&gt;If RegValueExists(strKeyPath, strValueName) Then&lt;BR&gt;&amp;nbsp;oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue&lt;BR&gt;&amp;nbsp;Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; GetAUOptions(dwValue) &amp;amp; VBCRLF&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;If dwValue = "4" Then&lt;BR&gt;&amp;nbsp; strMsg = "&amp;nbsp; - Scheduled Install Day:&amp;nbsp; "&lt;BR&gt;&amp;nbsp; strKeyPath = "Software\Policies\Microsoft\Windows\WindowsUpdate\AU"&lt;BR&gt;&amp;nbsp; strValueName = "ScheduledInstallDay"&lt;BR&gt;&amp;nbsp; If RegValueExists(strKeyPath, strValueName) Then&lt;BR&gt;&amp;nbsp;&amp;nbsp; oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue&lt;BR&gt;&amp;nbsp;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; getday(dwValue) &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp; Else&lt;BR&gt;&amp;nbsp;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Value not configured" &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp; End If&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp; strMsg = "&amp;nbsp; - Planned Installation Time:&amp;nbsp; "&lt;BR&gt;&amp;nbsp; strKeyPath = "Software\Policies\Microsoft\Windows\WindowsUpdate\AU"&lt;BR&gt;&amp;nbsp; strValueName = "ScheduledInstallTime"&lt;BR&gt;&amp;nbsp; If RegValueExists(strKeyPath, strValueName) Then&lt;BR&gt;&amp;nbsp;&amp;nbsp; oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue&lt;BR&gt;&amp;nbsp;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; dwValue &amp;amp;":00 - 24 hours 4:00 is 4 AM, 16:00 is 4 PM" &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp; Else&lt;BR&gt;&amp;nbsp;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Value not configured" &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp; End If&lt;BR&gt;&amp;nbsp;Else&lt;BR&gt;&amp;nbsp;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Else&lt;BR&gt;&amp;nbsp;Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Value is not configured" &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp;strMsg = "&amp;nbsp; - Benutzerdefinierte Einstellung:&amp;nbsp; "&lt;BR&gt;&amp;nbsp;strKeyPath = "Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update"&lt;BR&gt;&amp;nbsp;strValueName = "AUOptions"&lt;BR&gt;&amp;nbsp;If RegValueExists(strKeyPath, strValueName) Then&lt;BR&gt;&amp;nbsp; oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue&lt;BR&gt;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; GetAUOptions(dwValue) &amp;amp; VBCRLF&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp; If dwValue = "4" Then&lt;BR&gt;&amp;nbsp;&amp;nbsp; strMsg = "&amp;nbsp;&amp;nbsp;&amp;nbsp; - ScheduledInstallDay:&amp;nbsp; "&lt;BR&gt;&amp;nbsp;&amp;nbsp; strKeyPath = "Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update"&lt;BR&gt;&amp;nbsp;&amp;nbsp; strValueName = "ScheduledInstallDay"&lt;BR&gt;&amp;nbsp;&amp;nbsp; If RegValueExists(strKeyPath, strValueName) Then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; getday(dwValue) &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp;&amp;nbsp; Else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Automatic Updates are not configured" &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp;&amp;nbsp; End If&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp; strMsg = "&amp;nbsp;&amp;nbsp;&amp;nbsp; - ScheduledInstallTime:&amp;nbsp; "&lt;BR&gt;&amp;nbsp;&amp;nbsp; strKeyPath = "Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update"&lt;BR&gt;&amp;nbsp;&amp;nbsp; strValueName = "ScheduledInstallTime"&lt;BR&gt;&amp;nbsp;&amp;nbsp; If RegValueExists(strKeyPath, strValueName) Then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; dwValue &amp;amp;":00" &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp;&amp;nbsp; Else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Automatic Updates are not configured" &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp;&amp;nbsp; End If&lt;BR&gt;&amp;nbsp; Else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp; End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;Else&lt;BR&gt;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Not configured" &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp;End If&lt;BR&gt;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;strMsg = "&amp;nbsp; - NoAUShutdownOption:&amp;nbsp; "&lt;BR&gt;strKeyPath = "Software\Policies\Microsoft\Windows\WindowsUpdate\AU"&lt;BR&gt;strValueName = "NoAUShutdownOption"&lt;BR&gt;If RegValueExists(strKeyPath, strValueName) Then&lt;BR&gt;&amp;nbsp;oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue&lt;BR&gt;&amp;nbsp;Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; GetNoAUShutdownOption(dwValue) &amp;amp; VBCRLF &amp;amp; VBCRLF&lt;BR&gt;Else&lt;BR&gt;&amp;nbsp;Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Value not configured" &amp;amp; VBCRLF &amp;amp; VBCRLF&lt;BR&gt;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;strMsg = "AutoInstallMinorUpdates:&amp;nbsp; "&lt;BR&gt;strKeyPath = "Software\Policies\Microsoft\Windows\WindowsUpdate\AU"&lt;BR&gt;strValueName = "AutoInstallMinorUpdates"&lt;BR&gt;If RegValueExists(strKeyPath, strValueName) Then&lt;BR&gt;&amp;nbsp;oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue&lt;BR&gt;&amp;nbsp;Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; GetAutoInstallMinorUpdates(dwValue) &amp;amp; VBCRLF &amp;amp; VBCRLF&lt;BR&gt;Else&lt;BR&gt;&amp;nbsp;Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Value is not configured" &amp;amp; VBCRLF &amp;amp; VBCRLF&lt;BR&gt;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;strMsg = "DetectionFrequency:&amp;nbsp; "&lt;BR&gt;strKeyPath = "Software\Policies\Microsoft\Windows\WindowsUpdate\AU"&lt;BR&gt;strValueName = "DetectionFrequency"&lt;BR&gt;&amp;nbsp;If RegValueExists(strKeyPath, strValueName) Then&lt;BR&gt;&amp;nbsp; oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue&lt;BR&gt;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp;"Every " &amp;amp; dwValue &amp;amp;" Hours to search for updates"&amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp;Else&lt;BR&gt;&amp;nbsp;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Value is not configured"&amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;strMsg = "RebootRelaunchTimeout:&amp;nbsp; "&lt;BR&gt;strKeyPath = "Software\Policies\Microsoft\Windows\WindowsUpdate\AU"&lt;BR&gt;strValueName = "RebootRelaunchTimeout"&lt;BR&gt;&amp;nbsp;If RegValueExists(strKeyPath, strValueName) Then&lt;BR&gt;&amp;nbsp; oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue&lt;BR&gt;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; dwValue &amp;amp;" Minutes to wait until system restart"&amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp;Else&lt;BR&gt;&amp;nbsp;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Value is not configured" &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;strMsg = "RebootWarningTimeout:&amp;nbsp; "&lt;BR&gt;strKeyPath = "Software\Policies\Microsoft\Windows\WindowsUpdate\AU"&lt;BR&gt;strValueName = "RebootWarningTimeout"&lt;BR&gt;&amp;nbsp;If RegValueExists(strKeyPath, strValueName) Then&lt;BR&gt;&amp;nbsp; oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue&lt;BR&gt;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; dwValue &amp;amp;" Minutes wait until system restart"&amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp;Else&lt;BR&gt;&amp;nbsp;&amp;nbsp; Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Value not configured" &amp;amp; VBCRLF&lt;BR&gt;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;strMsg = "NoAutoRebootWithLoggedOnUsers:&amp;nbsp; "&lt;BR&gt;strKeyPath = "Software\Policies\Microsoft\Windows\WindowsUpdate\AU"&lt;BR&gt;strValueName = "NoAutoRebootWithLoggedOnUsers"&lt;BR&gt;If RegValueExists(strKeyPath, strValueName) Then&lt;BR&gt;&amp;nbsp;oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue&lt;BR&gt;&amp;nbsp;Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; GetNoAutoReboot(dwValue) &amp;amp; VBCRLF&lt;BR&gt;Else&lt;BR&gt;&amp;nbsp;Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Value not configured" &amp;amp; VBCRLF&lt;BR&gt;&amp;nbsp;Resultmsg = Resultmsg &amp;amp; "&amp;nbsp; - Default: User will be presented with a 5 minutes countdown" &amp;amp; VBCRLF&lt;BR&gt;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;strMsg = "RescheduleWaitTime:&amp;nbsp; "&lt;BR&gt;strKeyPath = "Software\Policies\Microsoft\Windows\WindowsUpdate\AU"&lt;BR&gt;strValueName = "RescheduleWaitTime"&lt;BR&gt;If RegValueExists(strKeyPath, strValueName) Then&lt;BR&gt;&amp;nbsp;oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue&lt;BR&gt;&amp;nbsp;If dwValue = "0" Then Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Value not configured: " &amp;amp; dwValue &amp;amp; VBCRLF &amp;amp; VBCRLF End If&lt;BR&gt;&amp;nbsp;If dwValue = "1" Then Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; dwValue &amp;amp;" Minute" &amp;amp; VBCRLF &amp;amp; VBCRLF End If&lt;BR&gt;&amp;nbsp;If dwValue &amp;gt; "1" and dwValue &amp;lt; "61" Then Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; dwValue &amp;amp;" Minutes" &amp;amp; VBCRLF &amp;amp; VBCRLF End If&lt;BR&gt;&amp;nbsp;If dwValue &amp;gt; "60" Then Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Invalid Value" &amp;amp; dwValue &amp;amp; VBCRLF &amp;amp; VBCRLF End If&lt;BR&gt;Else&lt;BR&gt;&amp;nbsp;Resultmsg = Resultmsg &amp;amp; strMsg &amp;amp; "Not Configured" &amp;amp; VBCRLF &amp;amp; VBCRLF&lt;BR&gt;End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Resultmsg = Resultmsg &amp;amp; "&lt;/FONT&gt;&lt;A href="http://www.wsus.de"&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;http://www.wsus.de&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;" &amp;amp; VBCRLF &amp;amp; "Die Infoseite zu Windows Server Updates Services"&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;MsgBox Resultmsg,,strComputer&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;set oReg = nothing&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Function GetNoAutoUpdate(Index)&lt;BR&gt;&amp;nbsp;Select Case Index&lt;BR&gt;&amp;nbsp; Case 0 GetNoAutoUpdate = "0 - Auto Update applied by GPO"&lt;BR&gt;&amp;nbsp; Case 1 GetNoAutoUpdate = "1 - No Auto Update is applied by GPO"&lt;BR&gt;&amp;nbsp; Case Else GetNoAutoUpdate = "Invalid Entry"&lt;BR&gt;&amp;nbsp;End select&lt;BR&gt;End Function&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Function GetUseWUServer(Index)&lt;BR&gt;&amp;nbsp;Select Case Index&lt;BR&gt;&amp;nbsp; Case 0 GetUseWUServer = "0 - Client is configured to receive updates from windowsupdate.microsoft.com"&lt;BR&gt;&amp;nbsp; Case 1 GetUseWUServer = "1 - Client is configured to receive updates from your WSUS Server"&lt;BR&gt;&amp;nbsp; Case Else GetUseWUServer = "Invalid Entry"&lt;BR&gt;&amp;nbsp;End select&lt;BR&gt;End Function&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Function GetDay(Index)&lt;BR&gt;&amp;nbsp;Select Case Index&lt;BR&gt;&amp;nbsp; Case "0" GetDay = "Every Day"&lt;BR&gt;&amp;nbsp; Case "1" GetDay = "Every Sunday"&lt;BR&gt;&amp;nbsp; Case "2" GetDay = "Every Monday"&lt;BR&gt;&amp;nbsp; Case "3" GetDay = "Every Tuesday"&lt;BR&gt;&amp;nbsp; Case "4" GetDay = "Every Wednesday"&lt;BR&gt;&amp;nbsp; Case "5" GetDay = "Every Thursday"&lt;BR&gt;&amp;nbsp; Case "6" GetDay = "Every Friday"&lt;BR&gt;&amp;nbsp; Case "7" GetDay = "Every Saturday"&lt;BR&gt;&amp;nbsp; Case Else GetDay = "Invalid Entry"&lt;BR&gt;&amp;nbsp;End select&lt;BR&gt;End Function&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Function GetAUOptions(Index)&lt;BR&gt;&amp;nbsp;Select Case Index&lt;BR&gt;&amp;nbsp; Case "0" GetAUOptions = "0"&lt;BR&gt;&amp;nbsp; Case "1" GetAUOptions = "1 - Deaktiviert in den Benutzereinstellungen"&lt;BR&gt;&amp;nbsp; Case "2" GetAUOptions = "2 - Notify before download and Install."&lt;BR&gt;&amp;nbsp; Case "3" GetAUOptions = "3 - Autom. Download, notify before installation."&lt;BR&gt;&amp;nbsp; Case "4" GetAUOptions = "4 - Autom. Download, install according to GPO settings."&lt;BR&gt;&amp;nbsp; Case "5" GetAUOptions = "5 - Allow Local Administator installation and manual configuration."&lt;BR&gt;&amp;nbsp; case Else GetAUOptions = "Invalid Entry"&lt;BR&gt;&amp;nbsp;End select&lt;BR&gt;End Function&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Function GetNoAUShutdownOption(Index)&lt;BR&gt;&amp;nbsp;Select Case Index&lt;BR&gt;&amp;nbsp; Case 0 GetNoAUShutdownOption = "0 - 'Updates are being installed and system will be restarted' user ill be notified"&lt;BR&gt;&amp;nbsp; Case 1 GetNoAUShutdownOption = "1 - 'Updates are being installed and system will be restarted' user will NOT be notified"&lt;BR&gt;&amp;nbsp; Case Else GetNoAUShutdownOption = "Invalid Entry"&lt;BR&gt;&amp;nbsp;End select&lt;BR&gt;End Function&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Function GetAutoInstallMinorUpdates(Index)&lt;BR&gt;&amp;nbsp;Select Case Index&lt;BR&gt;&amp;nbsp; Case 0 GetAutoInstallMinorUpdates = "0 - Automatic updates are not immediately installed"&lt;BR&gt;&amp;nbsp; Case 1 GetAutoInstallMinorUpdates = "1 - Automatic updates are immediately installed"&lt;BR&gt;&amp;nbsp; Case Else GetAutoInstallMinorUpdates = "Invalid Entry"&lt;BR&gt;&amp;nbsp;End select&lt;BR&gt;End Function&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Function GetNoAutoReboot(Index)&lt;BR&gt;&amp;nbsp;Select Case Index&lt;BR&gt;&amp;nbsp; Case "0" GetNoAutoReboot = "0 - User Countdown of 5 Minutes"&lt;BR&gt;&amp;nbsp; Case "1" GetNoAutoReboot = "1 - User will be notified before a system restart"&lt;BR&gt;&amp;nbsp; case Else GetNoAutoReboot = "Invalid Entry"&lt;BR&gt;&amp;nbsp;End select&lt;BR&gt;End Function&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Function RegValueExists(sRegKey, sRegValue)&lt;BR&gt;&amp;nbsp; sRegKey = Trim(sRegKey)&lt;BR&gt;&amp;nbsp; sRegValue = LCase(Trim(sRegValue))&lt;BR&gt;&amp;nbsp; ' init value&lt;BR&gt;&amp;nbsp; RegValueExists = False&lt;BR&gt;&amp;nbsp; If oReg.EnumValues(HKLM, sRegKey, aValueNames, aValueTypes) = 0 Then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Not IsNull(aValueNames) Then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For i = 0 To UBound(aValueNames)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If LCase(aValueNames(i)) = sRegValue Then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RegValueExists = True&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;BR&gt;&amp;nbsp; End If&lt;BR&gt;End Function&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;Function RegKeyExists(sRegKey)&lt;BR&gt;&amp;nbsp; sRegKey = Trim(sRegKey)&lt;BR&gt;&amp;nbsp; If oReg.EnumValues(HKLM, sRegKey, aValueNames, aValueTypes) = 0 Then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RegKeyExists = True&lt;BR&gt;&amp;nbsp; Else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RegKeyExists = False&lt;BR&gt;&amp;nbsp; End If&lt;BR&gt;End Function&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;'---------------------END-----------------------&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000 size=4&gt;&lt;STRONG&gt;MORE INFORMATION&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000 size=2&gt;Translated version of http--www.wsus.de-&lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://translate.google.com/translate?hl=en&amp;amp;sl=de&amp;amp;u=http://www.wsus.de/&amp;amp;prev=/search%3Fq%3Dwsus.de%26hl%3Den%26lr%3D%26safe%3Dactive"&gt;&lt;FONT face=Verdana color=#0000ff size=2&gt;http://translate.google.com/translate?hl=en&amp;amp;sl=de&amp;amp;u=http://www.wsus.de/&amp;amp;prev=/search%3Fq%3Dwsus.de%26hl%3Den%26lr%3D%26safe%3Dactive&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000 size=2&gt;View Original Web Page in german language&lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://www.wsus.de/"&gt;&lt;FONT face=Verdana color=#0000ff size=2&gt;http://www.wsus.de/&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Check WSUS (version 1.05.04.1)&lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://downloads.wsus.de/check_wsus/Check_WSUS_eng.zip"&gt;&lt;FONT face=Verdana size=2&gt;http://downloads.wsus.de/check_wsus/Check_WSUS_eng.zip&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;&lt;BR&gt;&lt;A href="http://downloads.wsus.de/check_wsus/Check_WSUS_ger.zip"&gt;&lt;FONT face=Verdana size=2&gt;http://downloads.wsus.de/check_wsus/Check_WSUS_ger.zip&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=95058" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>WSUSTER Update Approval Tool by -- Arjan and Roland</title><link>http://msmvps.com/blogs/athif/archive/2006/05/15/95040.aspx</link><pubDate>Mon, 15 May 2006 10:15:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:95040</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=95040</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/05/15/95040.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Verdana size=4&gt;&lt;SPAN class=fontsize5&gt;&lt;B&gt;How can I Approve multiple updates from WSUSAdmin?&lt;/B&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=4&gt;&lt;SPAN class=fontsize5&gt;&lt;FONT size=2&gt;You can select more than one update at a time and can simply select the newest one, scroll down, hit shift and selet the oldest one. You should then have them all selected and can approve them all at once.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=4&gt;&lt;SPAN class=fontsize5&gt;&lt;STRONG&gt;Is there any tool that I can use ?&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;A href="http://www.wsus.nl/site/index.php?option=com_content&amp;amp;task=view&amp;amp;id=23&amp;amp;Itemid=38"&gt;WSUSster&lt;/A&gt; is an update approval tool for Microsoft Windows Update Services (WSUS).&amp;nbsp;Take a look at the screenshot on &lt;A href="http://www.wsus.nl/images/wsuster_large.png"&gt;http://www.wsus.nl/images/wsuster_large.png&lt;/A&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;According to the authors of this tool, &lt;/FONT&gt;&lt;EM&gt;&lt;FONT face=Arial&gt;"&lt;FONT color=#000000&gt;A&amp;nbsp;WSUS Server has a very bad interface&amp;nbsp;for&amp;nbsp;approving updates. That's why we decided to write our own approval tool which we called 'Wsuster'. We used the tool&amp;nbsp;to migrate from SUS to WSUS. At this moment we use the tool also for approving the new&amp;nbsp;security updates&amp;nbsp;that are&amp;nbsp;released every month. And it works like a charm. Just with a few mouse clicks,&amp;nbsp;new updates are approved and old ones are removed!&lt;/FONT&gt;"&lt;/FONT&gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Verdana size=2&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;With the Wsuster approval tool you can:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Search specific type of updates. 
&lt;LI&gt;Approve&amp;nbsp;a lot of patches in&amp;nbsp;one time. 
&lt;LI&gt;Simulate you approval actions. 
&lt;LI&gt;Approve updates for just one target group. 
&lt;LI&gt;Disable your &lt;SPAN&gt;superseded &lt;/SPAN&gt;updates. 
&lt;LI&gt;and much more......&lt;/LI&gt;&lt;/UL&gt;&lt;FONT color=#000000&gt;&lt;FONT color=#000000&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;To use the tool you must install it on&amp;nbsp;your WSUS Server.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;The current version of&amp;nbsp;the Wsuster Tool v 1.0 is &lt;SPAN&gt;available &lt;/SPAN&gt;on&lt;/FONT&gt;&amp;nbsp;&lt;A title="The lastest version of Wsuster" href="http://www.wsus.nl/downloads/wsuster.zip"&gt;&lt;FONT color=#0099ff&gt;Wsuster.zip&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;(238 KB)&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;If you have any comments or feedback then, you can contact the authors &lt;A href="http://www.wsus.nl/site/index.php?option=com_contact&amp;amp;Itemid=3"&gt;here&lt;/A&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=4&gt;&lt;STRONG&gt;MORE INFORMATION&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;WSUSter Approval Tool&lt;BR&gt;&lt;A href="http://www.wsus.nl/site/index.php?option=com_content&amp;amp;task=view&amp;amp;id=23&amp;amp;Itemid=38"&gt;http://www.wsus.nl/site/index.php?option=com_content&amp;amp;task=view&amp;amp;id=23&amp;amp;Itemid=38&lt;/A&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=95040" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>Web page solution to search/extract updates from WSUS content folder by -- Robert Collewijn</title><link>http://msmvps.com/blogs/athif/archive/2006/05/14/94907.aspx</link><pubDate>Sun, 14 May 2006 16:49:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:94907</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=94907</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/05/14/94907.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;This web page solution by &lt;A href="http://wsus.collewijn.info/main.php?page=hotfixinfo_enu.php"&gt;Robert Collewijn&lt;/A&gt; will display (search/extract update)&amp;nbsp;information about the update files and there location within the content directory structure. This enables to search for&amp;nbsp;updates on WSUS Server and can be downloaded locally. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The updates are stored in a content folder on the WSUS server with unrecognizable 40 character file name (C6C8B597D4268C65AFFC94C34F46C9147B109329.exe). This web page will display filename and download link &amp;amp; location associated with that unrecognizable 40 character file name. All you have to do is use the search option at top right to with the KB number. Give it a try!&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=4&gt;&lt;STRONG&gt;STEP-BY-STEP&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Download &lt;/FONT&gt;&lt;A href="http://wsus.collewijn.info/_download/download.php?fid=ID001"&gt;&lt;FONT face=Verdana size=2&gt;HotfixInfo.zip&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; (inclusive the sub folders) into the following folder [C:\Program Files\Update Services\HotfixInfo]. Robert recommends this directory because the other Windows Server Update Service pages are also in the [C:\Program Files\Update Services] folder.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Open the [index.asp] file and change the following two (bold and italic) lines recording your confirguration.&lt;/FONT&gt;&lt;/P&gt;&lt;PRE class=style1&gt;&lt;FONT face=Verdana size=2&gt;'*** Define default variables ***
Dim sWSUSContentDir, sWSUSContentSrv
&lt;/FONT&gt;&lt;EM&gt;&lt;STRONG&gt;&lt;FONT face=Verdana size=2&gt;sWSUSContentDir = "F:\WSUS\WSUSContent\"
sWSUSContentSrv = "http:\\WSUS\Content\"&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/EM&gt;&lt;/PRE&gt;&lt;PRE class=style1&gt;&lt;FONT face=Verdana size=2&gt;More information on &lt;/FONT&gt;&lt;A href="http://wsus.collewijn.info/main.php?page=hotfixinfo_enu.php"&gt;&lt;FONT face=Verdana size=2&gt;http://wsus.collewijn.info/main.php?page=hotfixinfo_enu.php&lt;/FONT&gt;&lt;/A&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;FONT face=Verdana size=4&gt;&lt;STRONG&gt;&lt;IMG class=note src="http://msdn.microsoft.com/library/en-us/xmlsdk/local/note.gif"&gt;&lt;/IMG&gt;Note&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;If IIS is using anonymous access, then user IUSR_MachineName is used to access the SQL server database. This is a local machine account on the IIS machine. Make sure IUSR_MachineName is granted security access to SUSDB with public and db_owner database roles for SUSDB so that it can. Typically, you need to grant SELECT permission on object 'tbFile', database 'SUSDB', owner 'dbo.&lt;/FONT&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=94907" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>Perl script to extract updates from WSUS content folder by -- Alexey Biznya</title><link>http://msmvps.com/blogs/athif/archive/2006/05/10/94205.aspx</link><pubDate>Wed, 10 May 2006 06:27:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:94205</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=94205</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/05/10/94205.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;This script by &lt;/FONT&gt;&lt;A href="mailto:biakus@krw.ru"&gt;&lt;FONT face=Verdana size=2&gt;Alexey Biznya&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; will&amp;nbsp;Extract and sort by Categories latest or all updates from \WSUSContent folder. &lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;The script will find \WSUSContent folder and SQL Server name from the registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Update Services\Server\Setup.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;[WSUS stores updates in \WSUSContent folder using SHA1 hash for file names and this script will query&amp;nbsp;WSUS SQL/MSDE database and then exports those updates and categories.]&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;Requirements&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Windows 2000+&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;ActivePerl 5.8.7 build 815 or higher from &lt;/FONT&gt;&lt;A href="http://www.ActiveState.com"&gt;&lt;FONT face=Verdana size=2&gt;www.ActiveState.com&lt;/FONT&gt;&lt;/A&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;osql.exe Utility (included in MSDE)&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;Tunable params&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;my $root = "C:\\WSUS\\FtpRoot"; Make sure \WSUSContent folder and the folder where it will extract the files should be on the same volume. For instance, I have WSUSContent folder in 'D:\WSUS\WSUSContent and the folder to extract updates in 'D:\WSUS\FtpRoot'&lt;/FONT&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;my $update_langs = " 0,1033,1049 "; use 1033 for English.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;my $descr_lang = "ru"; use en for English.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;my $content_dir = ""; The script will search in registry so&amp;nbsp;you &lt;SPAN&gt;don’t &lt;/SPAN&gt;have to input the values here.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;my $server_name = " ; The script will search in registry so&amp;nbsp;you &lt;SPAN&gt;don’t &lt;/SPAN&gt;have to input the values here.&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Syntax:&amp;nbsp;WSUSExtract.pl&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;# ======== start of script ========&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;#!/usr/bin/perl -w&lt;BR&gt;#&lt;BR&gt;# Name:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSUSExtractor.pl&lt;BR&gt;#&lt;BR&gt;# Purpose:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extract and sort by categories latest or all updates from WSUS .&lt;BR&gt;#&lt;BR&gt;# Syntax:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSUSExtract.pl &lt;BR&gt;#&lt;BR&gt;# Version:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0&lt;BR&gt;#&lt;BR&gt;# Requirements:&amp;nbsp;&amp;nbsp; Windows 2000+&lt;BR&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ActivePerl 5.8.7 buld 815 or higher from &lt;/FONT&gt;&lt;A href="http://www.ActiveState.com"&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;www.ActiveState.com&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; osql.exe Utility (included in MSDE)&lt;BR&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSUS on MSDE&lt;BR&gt;#&lt;BR&gt;# Author:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Alexey Biznya&lt;BR&gt;#&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;use strict;&lt;BR&gt;use locale;&lt;BR&gt;use IO::File;&lt;BR&gt;use File::Path;&lt;BR&gt;use Win32::Registry;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;$|=1;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp; my $ppid;&lt;BR&gt;&amp;nbsp; my $fpid=open_pid_file("WSUSExtractor.pid");&lt;BR&gt;&amp;nbsp; print $fpid $$; &lt;BR&gt;&amp;nbsp; close($fpid);&lt;BR&gt;#&amp;nbsp; warn("Starting script (pid=$$)\n");&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;###########################################################################################&lt;BR&gt;#&amp;nbsp; Tunable params&lt;BR&gt;###########################################################################################&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp; my $root = "C:\\WSUS\\FtpRoot"; # your dir for files (volume must be the same at WSUS content folder for NTFS hardlinks)&lt;BR&gt;&amp;nbsp; my $is_latest = 1; # Is all updates extract or latest only &lt;BR&gt;&amp;nbsp; my $update_langs = " 0,1033,1049 "; # comma separated languageIDs of extracting updates (0-all,1033-en,1049-ru,..%lang)&amp;nbsp; &lt;BR&gt;&amp;nbsp; my $descr_lang = "ru";&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # short language of titles and descriptions of updates (en,ar ..)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp; my $db_name = "SUSDB";&lt;BR&gt;&amp;nbsp; my $content_dir = ""; # WSUS content folder&lt;BR&gt;&amp;nbsp; my $server_name = ""; # WSUS SqlServerName&lt;BR&gt;&amp;nbsp; my $tmpfile = "query.sql";&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;###########################################################################################&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp; my @rec = ();&lt;BR&gt;&amp;nbsp; my $col;&lt;BR&gt;&amp;nbsp; my $query;&lt;BR&gt;&amp;nbsp; my $cmd;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;###########################################################################################&lt;BR&gt;#&amp;nbsp; Huge SQL query temporary save to file&lt;BR&gt;###########################################################################################&lt;BR&gt;my $latest_str = "";&lt;BR&gt;if ($is_latest) { $latest_str&amp;nbsp; = " AND tbRevision.IsLatestRevision = 1 "; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "\nStart extracting latest updates\n"; }&lt;BR&gt;else {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "\nStart extracting all updates\n"; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp; open (SQL, "&amp;gt;$tmpfile");&lt;BR&gt;&amp;nbsp; print SQL qq {&lt;BR&gt;SELECT&amp;nbsp; C2.CategoryID, C3.CategoryID, RC4.CategoryID, tbRevisionLanguage.LanguageID, &lt;BR&gt;tbFile.FileName, tbFile.FileDigest&lt;BR&gt;FROM tbCategory AS C1 &lt;BR&gt;INNER JOIN tbCategory AS C2 ON C1.CategoryID = C2.ParentCategoryID &lt;BR&gt;INNER JOIN tbCategory AS C3 ON C2.CategoryID = C3.ParentCategoryID &lt;BR&gt;INNER JOIN tbCategory AS C4 ON (C4.ParentCategoryID IS NULL AND C4.CategoryID != 7 ) &lt;BR&gt;INNER JOIN tbRevisionInCategory AS RC3 ON ( C3.CategoryID = RC3.CategoryID ) &lt;BR&gt;INNER JOIN tbRevisionInCategory AS RC4 ON ( RC4.RevisionID = RC3.RevisionID AND RC4.CategoryID = C4.CategoryID ) &lt;BR&gt;INNER JOIN tbBundleDependency ON RC4.RevisionID = tbBundleDependency.BundledRevisionID &lt;BR&gt;INNER JOIN tbPreComputedLocalizedProperty ON ( tbPreComputedLocalizedProperty.RevisionID = tbBundleDependency.RevisionID&amp;nbsp; ) &lt;BR&gt;INNER JOIN tbRevision ON ( tbRevision.RevisionID = RC4.RevisionID&amp;nbsp; $latest_str ) &lt;BR&gt;INNER JOIN tbFileForRevision ON ( tbFileForRevision.RevisionID = RC4.RevisionID&amp;nbsp; ) &lt;BR&gt;INNER JOIN tbRevisionLanguage ON ( tbRevisionLanguage.RevisionID = tbFileForRevision.RevisionID ) &lt;BR&gt;INNER JOIN tbFile ON ( tbFile.FileDigest = tbFileForRevision.FileDigest&amp;nbsp; ) &lt;BR&gt;WHERE ( tbRevisionLanguage.Expanded = 0 AND tbRevisionLanguage.LanguageID IN ( $update_langs ) &lt;BR&gt;AND tbPreComputedLocalizedProperty.ShortLanguage like '$descr_lang' ) &lt;BR&gt;ORDER BY tbFile.Modified };&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;close(SQL); &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;###########################################################################################&lt;BR&gt;#&amp;nbsp; Find WSUS content folder and SQL server address&lt;BR&gt;###########################################################################################&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; my $reg;&lt;BR&gt;&amp;nbsp;&amp;nbsp; $::HKEY_LOCAL_MACHINE-&amp;gt;Open("SOFTWARE\\Microsoft\\Update Services\\Server\\Setup", $reg)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; or die "Can't open registry: $^E";&lt;BR&gt;&amp;nbsp;&amp;nbsp; $reg-&amp;gt;QueryValueEx("ContentDir", $col, $content_dir) or die "Cannot find WSUS content folder in registry: $^E";&lt;BR&gt;&amp;nbsp;&amp;nbsp; $content_dir = $content_dir."&lt;/FONT&gt;&lt;A&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;\\WsusContent&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;";&lt;BR&gt;#&amp;nbsp;&amp;nbsp; print "Here's a dir: $content_dir\n";&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; $reg-&amp;gt;QueryValueEx("SqlServerName", $col, $server_name) or die "Cannot find WSUS content folder in registry: $^E";&lt;BR&gt;&amp;nbsp;&amp;nbsp; $server_name =~ s/%computername%/$ENV{computername}/;&lt;BR&gt;#&amp;nbsp;&amp;nbsp; print "Here's a server name: $server_name\n";&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;###########################################################################################&lt;BR&gt;#&amp;nbsp; Put to hash Microsoft WSUS languages&lt;BR&gt;###########################################################################################&lt;BR&gt;&amp;nbsp; my %lang = ();&lt;BR&gt;&amp;nbsp; $query= "SELECT LanguageID, ShortLanguage FROM tbLanguage";&lt;BR&gt;&amp;nbsp; $cmd = "osql.exe -w 500 -h-1 -s# -n -E -d $db_name -S $server_name -Q \"$query\"&amp;nbsp; 2&amp;gt;nul |";&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp; open (DAT, $cmd);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(&amp;lt;DAT&amp;gt;) { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chomp; &lt;BR&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print $_."\n"; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( @rec = split(/#/) ) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { foreach $col (@rec) { if( $col =~ /^\s*(.+?)\s*$/ ) {$col = $1;} } }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else { last; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $lang{$rec[0]} = $rec[1];&lt;BR&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print $rec[0]."\t".$rec[1]."\n"; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp; close(DAT);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;###########################################################################################&lt;BR&gt;#&amp;nbsp; Put to hash Microsoft WSUS categories&lt;BR&gt;###########################################################################################&lt;BR&gt;&amp;nbsp; my %ctg = ();&lt;BR&gt;&amp;nbsp; $query= "SELECT CategoryID, Title FROM tbPrecomputedCategoryLocalizedProperty&amp;nbsp; WHERE ( ShortLanguage like 'en') ";&lt;BR&gt;&amp;nbsp; $cmd = "osql.exe -w 500 -h-1 -s# -n -E -d $db_name -S $server_name -Q \"$query\"&amp;nbsp; 2&amp;gt;nul |";&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp; open (DAT, $cmd);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(&amp;lt;DAT&amp;gt;) { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chomp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( @rec = split(/#/) ) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { foreach $col (@rec) {&amp;nbsp; if( $col =~ /^\s*(.+?)\s*$/ ) {$col = $1;} } }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else { last; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $rec[1] =~ s/\s+|\//_/g;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $rec[1] =~ s/\W//g; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ctg{$rec[0]} = $rec[1];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp; close(DAT);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;###########################################################################################&lt;BR&gt;#&amp;nbsp; Processing Microsoft WSUS database and save files&lt;BR&gt;###########################################################################################&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp; my $srcfile;&lt;BR&gt;&amp;nbsp; my $dstfile;&lt;BR&gt;&amp;nbsp; my $path;&lt;BR&gt;&amp;nbsp; my $counter = 0;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp; $cmd = "osql.exe -w 5000 -h-1 -s# -n -E -d $db_name -S $server_name -i $tmpfile&amp;nbsp; 2&amp;gt;nul |";&lt;BR&gt;&amp;nbsp; print "\nProcessing..\n";&lt;BR&gt;&amp;nbsp; open (DAT, $cmd);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(&amp;lt;DAT&amp;gt;) { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chomp; &lt;BR&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print $_."\n"; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( @rec = split(/#/) ) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { foreach $col (@rec) {&amp;nbsp; if( $col =~ /^\s*(.+?)\s*$/ ) {$col = $1;} } }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else { last; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($rec[4] =~ m/.(\w+)$/ ) { $srcfile = $1; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($rec[5] =~ m/^0x(\w{38})(\w{2})$/){ $srcfile = "$content_dir\\$2\\$1$2.$srcfile"; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $path = $root."&lt;/FONT&gt;&lt;A&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;\\".$ctg{$rec[0]}."\\".$ctg{$rec[1]}."\\".$ctg{$rec[2]}."\\".$lang{$rec[3&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;]};&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (! -e $path) { mkpath($path, 0, 0777) or die "Can't create dir: $^E\n";}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $dstfile = $path."&lt;/FONT&gt;&lt;A&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;\\".$rec[4&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;]; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (hardlink($srcfile, $dstfile, 1)) { $counter += 1; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp; close(DAT);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp; print "\nTotal matching updates in database: $counter\n";&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp; unlink($tmpfile) or die "Cannot unlink tmpfile: $^E";&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp; warn "\nSuccess\n";&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;###########################################################################&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;###########################################################################################&lt;BR&gt;# POSIX NTFS hard link to file&lt;BR&gt;###########################################################################################&lt;BR&gt;sub hardlink {&lt;BR&gt;&amp;nbsp; my $exist_file=shift;&lt;BR&gt;&amp;nbsp; my $new_file=shift;&lt;BR&gt;&amp;nbsp; my $is_rewrite = shift;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp; if(-e $new_file &amp;amp;&amp;amp; $is_rewrite) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { unlink ($new_file) or return 0;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp; link ( $exist_file, $new_file ) or return 0;&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp; return 1;&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;###########################################################################################&lt;BR&gt;#&amp;nbsp; pid processing&lt;BR&gt;###########################################################################################&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;sub open_pid_file {&lt;BR&gt;&amp;nbsp; my $file=shift;&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; if(-e $file) { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $fh=IO::File-&amp;gt;new($file) or die "Can't open PID file $file: $^E";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ppid=&amp;lt;$fh&amp;gt;;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; die "Invalid PID file" unless $ppid=~ /^(\d+)$/;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; die "Process already running with PID $ppid" if(kill 0 =&amp;gt; $ppid);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; warn "Removing PID file for defunct process ($ppid).\n";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; die "Can't unlink PID file $file" unless -w $file &amp;amp;&amp;amp; unlink $file;&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;&amp;nbsp; $ppid=$$;&lt;BR&gt;&amp;nbsp; return IO::File-&amp;gt;new($file,O_WRONLY|O_CREAT|O_EXCL,0644) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; or die "Can't create $file: $^E\n";&lt;BR&gt;}&lt;BR&gt;###########################################################################################&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;END {&lt;BR&gt;&amp;nbsp; unlink "WSUSExtractor.pid" or die "Can't unlink PID file: $^E"; &lt;BR&gt;#&amp;nbsp; warn("Stoping script (pid=$$)\n");&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;__END__&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;# ========&amp;nbsp;end of script ========&lt;/FONT&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=94205" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>Batch script to extract updates from WSUS content folder by -- Alexander Suhovey</title><link>http://msmvps.com/blogs/athif/archive/2006/05/09/94107.aspx</link><pubDate>Tue, 09 May 2006 13:39:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:94107</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=94107</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/05/09/94107.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;This script by &lt;A href="mailto:asuhovey@mtu-net.ru"&gt;Alexander Suhovey&lt;/A&gt; will extract/copy particular updates from WSUS content folder. WSUS stores updates in \WSUSContent folder using SHA1 hash for file names and this script will attempt to decrypt SHA1 hash for file names by querying&amp;nbsp; WSUS SQL/MSDE database and then exports those updates as well. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Verdana size=2&gt;Command line switches to run the script&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;SYNTAX:&amp;nbsp;&amp;nbsp; WSUSExtract.cmd &amp;lt;-f:search_string&amp;gt; [-l:lang] [-t:target]&lt;/FONT&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;-f:search_string&amp;nbsp;&amp;nbsp; - Part of update KB to search for.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;-l:lang&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Update language. If omitted, all languages will be processed.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;-t:target&amp;nbsp;&amp;nbsp;- Target folder to copy updates to. If omitted, script assumes 'View Only' mode.&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;Examples&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The command below will Copy downloaded English updates corresponding 896358 KB article to 'c:\temp' folder&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;WSUSExtract.cmd -f:896358 -l:enu -t:c:\temp&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The command below will output/display/View all downloaded updates corresponding to 896358 KB article:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;WSUSExtract.cmd&amp;nbsp; -f:896358&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Copy the code below in a text file and name it as 'WSUSExtract.cmd'.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;::======== start of script ========&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;::&amp;nbsp; Batch script to 'extract' particular updates from WSUS content folder. &lt;BR&gt;::&amp;nbsp; &lt;BR&gt;::&amp;nbsp; The problem with content folder is that WSUS stores updates using SHA1 hash for&lt;BR&gt;::&amp;nbsp; file names so it is difficult to determine what file belongs to what&lt;BR&gt;::&amp;nbsp; update. The script determines a human-readable name of update file byquerying&amp;nbsp; &lt;BR&gt;::&amp;nbsp; WSUS SQL/MSDE database.&lt;BR&gt;::&amp;nbsp; &lt;BR&gt;::&amp;nbsp; ====================================================================&lt;BR&gt;::&amp;nbsp; SYNTAX:&amp;nbsp;&amp;nbsp; WSUSExtract.cmd &amp;lt;-f:search_string&amp;gt; [-l:lang] [-t:target]&lt;BR&gt;::&amp;nbsp; &lt;BR&gt;::&amp;nbsp; -f:search_string - Part of update KB to search for.&lt;BR&gt;::&amp;nbsp; &lt;BR&gt;::&amp;nbsp; -l:lang&amp;nbsp;&amp;nbsp;&amp;nbsp; - Update language. If omitted, all languages will be processed.&lt;BR&gt;::&amp;nbsp; &lt;BR&gt;::&amp;nbsp; -t:target&amp;nbsp; - Target folder to copy updates to. If omitted, script assumes 'View Only' mode.&lt;BR&gt;::&amp;nbsp; &lt;BR&gt;::&amp;nbsp; EXAMPLES:&lt;BR&gt;::&amp;nbsp; Copy downloaded english updates corresponding 896358 KB article to 'c:\temp'folder:&lt;BR&gt;::&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSUSExtract.cmd -f:896358 -l:enu -t:c:\temp&lt;BR&gt;::&amp;nbsp; &lt;BR&gt;::&amp;nbsp; View all downloaded updates corresponding to 896358 KB article:&lt;BR&gt;::&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSUSExtract.cmd&amp;nbsp; -f:896358&lt;BR&gt;::&amp;nbsp; ====================================================================&lt;BR&gt;::&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;::*************************************************************************&lt;BR&gt;:: Name:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSUSExtract.cmd&lt;BR&gt;::&lt;BR&gt;:: Purpose:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Finds and copies particular update(s) from WSUS content folder.&lt;BR&gt;::&lt;BR&gt;:: Syntax:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSUSExtract.cmd &amp;lt;-f:search_string&amp;gt; [-l:language] [-t:target_folder]&lt;BR&gt;::&lt;BR&gt;:: Version:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.1&lt;BR&gt;:: Technology:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NT Batch&lt;BR&gt;::&lt;BR&gt;:: Requirements:&amp;nbsp;&amp;nbsp; Windows 2000+&lt;BR&gt;::&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; REG.EXE (in case of Windows 2000, install Support Tools or download REG.EXE from &lt;BR&gt;:: &lt;/FONT&gt;&lt;A href="http://www.dynawell.com/reskit/microsoft/win2000/reg.zip"&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;http://www.dynawell.com/reskit/microsoft/win2000/reg.zip&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;)&lt;BR&gt;::&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OSQL.EXE Utility (included in MSDE)&lt;BR&gt;::&lt;BR&gt;:: Authors:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Alexander Suhovey&lt;BR&gt;::&lt;BR&gt;:: History:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 08/07/2005 - Database server address is now determined from registry&lt;BR&gt;::&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 08/05/2005 - First release.&lt;BR&gt;::*************************************************************************&lt;BR&gt;@echo off&lt;BR&gt;setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION&lt;BR&gt;Echo.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;::========= OS Check ============&lt;BR&gt;if not "%OS%" == "Windows_NT" goto BADOS&lt;BR&gt;if "%APPDATA%" == "" goto BADOS&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;::====== Parse command line =====&lt;BR&gt;If "%1"=="" GOTO USAGE&lt;BR&gt;If "%1"=="/?" GOTO USAGE&lt;BR&gt;If "%1"=="-?" GOTO USAGE&lt;BR&gt;:PARSE&lt;BR&gt;set arg=%1&lt;BR&gt;shift /1&lt;BR&gt;If not defined arg GOTO NEXT&lt;BR&gt;If "%arg:~0,3%"=="-f:" (set fstr=%arg:~3%&amp;amp;GOTO PARSE)&lt;BR&gt;If "%arg:~0,3%"=="-l:" (set lang=%arg:~3%&amp;amp;GOTO PARSE)&lt;BR&gt;If "%arg:~0,3%"=="-t:" (set target=%arg:~3%&amp;amp;GOTO PARSE)&lt;BR&gt;Echo ERROR: Unknown argument: %arg%&lt;BR&gt;GOTO USAGE&lt;BR&gt;:NEXT&lt;BR&gt;If defined target (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set target=%target:"=%\&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If not exist "%target%" echo ERROR: Cannot find target folder: "%target%" &amp;amp; goto :eof&lt;BR&gt;) Else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set viewonly=1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Echo Target folder not defined. Assuming View Only mode.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo.&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;::== Find WSUS content folder ===&lt;BR&gt;::=== and SQL server address&amp;nbsp; ===&lt;BR&gt;set regkey="HKLM\SOFTWARE\Microsoft\Update Services\Server\Setup"&lt;BR&gt;for /f "tokens=2* delims= " %%i in ('reg query %regkey% /v ContentDir ^| find "ContentDir"') do set source=%%j&lt;BR&gt;If not defined source Echo ERROR: Cannot find WSUS content folder in registry. Check if WSUS is installed. &amp;amp; goto :eof&lt;BR&gt;set source=%source%\WsusContent&lt;BR&gt;for /f "tokens=2* delims= " %%i in ('reg query %regkey% /v SqlServerName ^| find "SqlServerName"') do set server=%%j&lt;BR&gt;If not defined server Echo ERROR: Cannot find WSUS database server in registry. Check if WSUS is installed. &amp;amp; goto :eof&lt;BR&gt;set osqlcommand=osql.exe -w 500 -h-1 -E -d SUSDB -S %server%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;::====== Test SQL database ======&lt;BR&gt;::========= connection ==========&lt;BR&gt;for /f "delims=" %%i in ('%osqlcommand% -Q') do (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Echo ERROR: Cannot connect to WSUS SQL server '%server%'&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto :eof&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;::=== Format osql.exe query =====&lt;BR&gt;set query=select FileDigest,FileName from tbFile&lt;BR&gt;If defined fstr set query=%query% where FileName like '%%%fstr%%%'&lt;BR&gt;If defined lang (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If defined fstr (set query=!query! and) Else (set query=!query! where)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set query=!query! FileName like '%%%lang%%%'&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;::======== Main section =========&lt;BR&gt;set num1=0&lt;BR&gt;set num2=0&lt;BR&gt;echo ========================================&lt;BR&gt;for /f "tokens=1,2" %%i in ('%osqlcommand% -Q "%query%" ^| find /v "rows affected"') do (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a num1+=1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set dstfile=%%j&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set srcfile=%%i&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set srcfilepath="%source%\!srcfile:~-2!\!srcfile:~2!.!dstfile:~-3!"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set dstfilepath="%target%%%j"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If exist !srcfilepath! (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a num2+=1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If defined viewonly (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo !dstfile!&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) Else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If exist !dstfilepath! set dstfilepath="%target%%%~nj(Copy !random!)%%~xj"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /p foo="Copying !dstfile! ... "&amp;lt;nul&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; copy !srcfilepath! !dstfilepath! &amp;gt;nul 2&amp;gt;&amp;amp;1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If errorlevel 1 (echo FAILED.) Else (echo Done.)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;)&lt;BR&gt;echo ========================================&lt;BR&gt;echo Updates found in content folder&amp;nbsp;&amp;nbsp;&amp;nbsp; : %num2%&lt;BR&gt;echo Total matching updates in database : %num1%&lt;BR&gt;goto :eof&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;::========= Echo syntax =========&lt;BR&gt;:USAGE&lt;BR&gt;echo.&lt;BR&gt;Echo %~nx0&lt;BR&gt;Echo Finds and copies particular update(s) from WSUS content folder.&lt;BR&gt;Echo Renames updates to human-readable format using information&lt;BR&gt;Echo obtained from local WSUS SQL database.&lt;BR&gt;Echo.&lt;BR&gt;Echo SYNTAX:&amp;nbsp;&amp;nbsp; %~nx0 ^&amp;lt;-f:search_string^&amp;gt; [-l:lang] [-t:target]&lt;BR&gt;Echo.&lt;BR&gt;Echo -f:search_string - Part of update name to search for.&lt;BR&gt;Echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Naming format for OS updates: OS-KBNUMBER-HW-LANG.EXT&lt;BR&gt;Echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Operating system (eg 'WindowsXP')&lt;BR&gt;Echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KBNUMBER - MSKB number (e.g 'KB896358')&lt;BR&gt;Echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HW&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Hardware technology ('x86', 'ia64' etc)&lt;BR&gt;Echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LANG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - OS language (see -l switch below)&lt;BR&gt;Echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EXT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Extention ('exe', 'cab' etc)&lt;BR&gt;Echo -l:lang&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Update language. If omitted, all languages will&lt;BR&gt;Echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; be processes. Examples are:&lt;BR&gt;Echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rus - russian&lt;BR&gt;Echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; enu - english&lt;BR&gt;Echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fra - french&lt;BR&gt;Echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; deu - deutch&lt;BR&gt;Echo -t:target&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Target folder to copy updates to.&lt;BR&gt;Echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If omitted, script assumes 'View Only' mode.&lt;BR&gt;Echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Do not use trailing slash.&lt;BR&gt;Echo.&lt;BR&gt;Echo EXAMPLES:&lt;BR&gt;Echo.&lt;BR&gt;Echo Copy downloaded english updates corresponding&lt;BR&gt;Echo to 896358 KB article to 'c:\temp' folder:&lt;BR&gt;Echo.&lt;BR&gt;Echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %~nx0 -f:896358 -l:enu -t:c:\temp&lt;BR&gt;Echo.&lt;BR&gt;Echo View all downloaded updates corresponding to 896358 KB article:&lt;BR&gt;Echo.&lt;BR&gt;Echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %~nx0 -f:896358&lt;BR&gt;Echo.&lt;BR&gt;goto :eof&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;::===== If Bad OS detected ======&lt;BR&gt;:BADOS&lt;BR&gt;echo.&lt;BR&gt;echo ERROR: This script needs Windows 2000 or better.&lt;BR&gt;goto :eof&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;::======== End of script ========&lt;/FONT&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=94107" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>Configuring WSUS clients in a workgroup using WSUSClientManager by -- Greg Chapman[MVP]</title><link>http://msmvps.com/blogs/athif/archive/2006/05/09/94106.aspx</link><pubDate>Tue, 09 May 2006 12:11:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:94106</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=94106</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/05/09/94106.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;So, if you are in a workgroup environment and would like to configure WUA on workstations, then you might want to check &lt;A href="http://www.mousetrax.com/pub/wsusclientmanager.zip"&gt;WSUSClientManager&lt;/A&gt; - an Excel automation tool by &lt;/FONT&gt;&lt;A href="http://pubs.logicalexpressions.com/Pub0009/LPMFrame.asp?CMD=AuthorDetail&amp;amp;ID=2"&gt;&lt;FONT face=Verdana size=2&gt;Greg Chapman&lt;/FONT&gt;&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Greg recently posted this information on &lt;A id=_ctl0__ctl0__ctl0__ctl0_Linkcategorylist1__ctl0_Categories__ctl1_Links__ctl4_Link href="http://www.patchmanagement.org/"&gt;&lt;FONT color=#009933&gt;WSUS Mailing List&lt;/FONT&gt;&lt;/A&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;WSUSClientManager is created in Excel 2003. Operation is simple and requires you to set your Excel macro security to Medium. Medium allows you to be prompted about disabling or enabling macros in an Excel document. The default setting is high and will prevent the VBA code in the spreadsheet from executing. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Open the Excel doc and enable macros when prompted. The AllHosts sheet is the one in which, starting with row 2, column A, you can list the NetBIOS names or IP addresses of your individual servers or desktops, read and write all the WSUS settings to all those hosts. The Individual Host Test sheet is intended to allow you to list a single host, read its settings, modify them and then write them back to the host without cycling through all your listed hosts. So, deal with your complete set of hosts on the AllHosts sheet and with only one or two on the Individual Host Test sheet.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Once you've listed your hosts, go to the MouseTrax WSUS Client Manager Menu and choose "Read WSUS Settings From Hosts". This will &lt;SPAN&gt;retrieve &lt;/SPAN&gt;any settings you've already configured on the host and write them to the spreadsheet. For each host, modify whichever settings you need to change and then, from the MouseTrax WSUS Client Manager menu, choose "Write WSUS Settings To Hosts". Any errors in either operation will be written back to the spreadsheet in each host's row in order to aid client troubleshooting.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;FONT face=Verdana size=4&gt;&lt;STRONG&gt;&lt;IMG class=note src="http://msdn.microsoft.com/library/en-us/xmlsdk/local/note.gif"&gt;&lt;/IMG&gt;&lt;FONT color=#000000&gt;Notes:&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;When you use the "Write Settings..." menu choice, each host is issued the "&lt;FONT color=#0000ff&gt;wuauclt /resetauthorization /detectnow&lt;/FONT&gt;" command to initialize a scan from the host to the WSUS server.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;This tool requires your hosts meet the following conditions:&lt;BR&gt;- the account you are using has administrative access to the host&lt;BR&gt;- Remote Registry service running on each host&lt;BR&gt;- DCOM is enabled on each host&lt;BR&gt;- WMI is running and you have administrative privileges under delegation on each host&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=4&gt;&lt;STRONG&gt;MORE INFORMATION&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Verdana size=2&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;WSUSClientManager&lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://www.mousetrax.com/pub/wsusclientmanager.zip"&gt;&lt;FONT face=Verdana size=2&gt;http://www.mousetrax.com/pub/wsusclientmanager.zip&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Building a Small Office Automated Patching System Without Active Directory&lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://pubs.logicalexpressions.com/Pub0009/LPMArticle.asp?ID=594"&gt;&lt;FONT face=Verdana size=2&gt;http://pubs.logicalexpressions.com/Pub0009/LPMArticle.asp?ID=594&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Configure Automatic Updates in a Non–Active Directory Environment&lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://technet2.microsoft.com/WindowsServer/en/Library/b23562a8-1a97-45c0-833e-084cd463d0371033.mspx?mfr=true"&gt;&lt;FONT face=Verdana size=2&gt;http://technet2.microsoft.com/WindowsServer/en/Library/b23562a8-1a97-45c0-833e-084cd463d0371033.mspx?mfr=true&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;MouseTrax - Downloads&lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://www.mousetrax.com/Downloads.html"&gt;&lt;FONT face=Verdana size=2&gt;http://www.mousetrax.com/Downloads.html&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=94106" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>Windows Update Agent force script, email results version 2.3 by  -- Rob Dunn [WSUS MVP]</title><link>http://msmvps.com/blogs/athif/archive/2006/05/09/94089.aspx</link><pubDate>Tue, 09 May 2006 10:20:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:94089</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=94089</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/05/09/94089.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;A href="http://vbshf.com"&gt;Rob Dunn&lt;/A&gt; [&lt;A href="https://mvp.support.microsoft.com/profile=54cef55f-5d36-4c36-884a-0bcb12babaaf"&gt;WSUS MVP&lt;/A&gt;] has created an excellent .vbs script (&lt;A href="http://www.vbshf.com/vbshf/forum/forums/thread-view.asp?tid=249&amp;amp;posts=1&amp;amp;start=1"&gt;updatehf.vbs&lt;/A&gt;) which is very popular in WSUS Community. This script will do the following;&lt;/FONT&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Detects missing updates,&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Downloads approved updates which are missing,&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Installs the approved updates from WSUS Server,&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;And reboots the computer after the updates are applied.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Last but not the least; it can email a recipient the resulting log file.&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Before you run this script, rename the downloaded script to &lt;FONT face="Courier New" color=#0000ff&gt;updatehf.vbs&lt;/FONT&gt; and you need to edit some variables in the script; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;MANDATORY VARIABLES&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;sExePath - this is the location of the WindowsUpdateAgent20-x86.exe. Download it from &lt;A href="http://go.microsoft.com/fwlink/?LinkId=43264"&gt;http://go.microsoft.com/fwlink/?LinkId=43264&lt;/A&gt;.&amp;nbsp;This script will install&amp;nbsp;WindowsUpdateAgent20-x86.exe silently if it is required.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;strMailFrom - this is the email address used by the script to send the resulting log file to the intended recipient. (The Sender)&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;strMailto - this is the recipient email address who will &lt;SPAN&gt;receive &lt;/SPAN&gt;the resulting log file (The Recipient)&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;strSMTPServer - this is the IP Address of the email server.&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;OPTIONAL VARIABLES&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Silent - 0 = verbose, 1 = silent (no windows or visible information)&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Intdebug - 0 = off, 1 = 1 (see some variables that are being passed)&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;strAction - prompt|install|detect. Prompt gives users opportunity to install&amp;nbsp;updates or not, install just installs them, detect updates the WU collection and&amp;nbsp;downloads the updates (but does not install them) - useful if you want to&amp;nbsp;have the computer refresh its stats to the stat server but not install the&amp;nbsp;updates. &lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;blnEmail - 0 = off|1 = on. If set to 0, the script will not email a log file. If&amp;nbsp;you specify an email address in the command-line, this will force the script&amp;nbsp;to switch blnEmail to 1.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;strRestart - 0 = Do nothing|1 = restart|2 = shutdown. Command-switch restart:&amp;nbsp;&lt;SPAN&gt;supersedes &lt;/SPAN&gt;this variable. &lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;If you &lt;SPAN&gt;don’t &lt;/SPAN&gt;configure these optional variables, then you can manually input them from the command line.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;STRONG&gt;&lt;FONT face=Verdana size=2&gt;Command line switches to run the script&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;STRONG&gt;action:&lt;/STRONG&gt; prompt|install|detect&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;STRONG&gt;mode:&lt;/STRONG&gt; silent|verbose&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;STRONG&gt;email:&lt;/STRONG&gt; &lt;A href="mailto:you@yourdomain.com"&gt;you@yourdomain.com&lt;/A&gt;&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;STRONG&gt;restart:&lt;/STRONG&gt; 0 (do nothing)| 1 (restart) | 2 (shutdown)&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;STRONG&gt;force:&lt;/STRONG&gt; 0 (do not enforce restart action - this is optional, by default it is set&amp;nbsp;to 0) | 1 (enforce restart action)&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;STRONG&gt;emailsubject:&lt;/STRONG&gt; Text for custom subject enclosed in quotations &lt;B&gt;&lt;/B&gt;(i.e. "This is a custom subject"&lt;B&gt;&lt;/B&gt;) - &lt;B&gt;&lt;/B&gt;(v2.2 and newer&lt;B&gt;&lt;/B&gt;) &lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;STRONG&gt;fulldnsname:&amp;nbsp;&lt;/STRONG&gt;0 &lt;B&gt;&lt;/B&gt;(use non-qualified server&amp;nbsp;name&lt;B&gt;&lt;/B&gt;) | 1 &lt;B&gt;&lt;/B&gt;(use fully qualified DNS name of the server that the script ran on&lt;B&gt;&lt;/B&gt;) - &lt;B&gt;&lt;/B&gt;(v2.2 and newer&lt;B&gt;&lt;/B&gt;) &lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;STRONG&gt;emailifallok:&amp;nbsp;&lt;/STRONG&gt;0 &lt;B&gt;&lt;/B&gt;(don't email a report&amp;nbsp;if there are no&amp;nbsp;problems with the update process&lt;B&gt;&lt;/B&gt;) | 1 &lt;B&gt;&lt;/B&gt;(email report whether there are errors or not&lt;B&gt;&lt;/B&gt;) - &lt;B&gt;&lt;/B&gt;(v2.2 and newer&lt;B&gt;&lt;/B&gt;) &lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;STRONG&gt;smtpserver: &lt;/STRONG&gt;x.x.x.x or smtp mail hostname &lt;B&gt;&lt;/B&gt;(define an alternate SMTP server&lt;B&gt;&lt;/B&gt;) - &lt;B&gt;&lt;/B&gt;(v2.2 and newer&lt;B&gt;&lt;/B&gt;) &lt;/FONT&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;STRONG&gt;logfile:&lt;/STRONG&gt;"x:\path\log.txt" - &lt;B&gt;&lt;/B&gt;(v2.3 and newer&lt;B&gt;&lt;/B&gt;)&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;IMG class=note src="http://msdn.microsoft.com/library/en-us/xmlsdk/local/note.gif"&gt;&lt;/IMG&gt;Note:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The command line switches will &lt;SPAN&gt;supersede &lt;/SPAN&gt;the variables in the script.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face="Times New Roman" size=4&gt;Examples&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;DETECT (interactive): &lt;FONT face="Courier New" color=#0000ff&gt;updatehf.vbs action:detect mode:verbose email:you@yourdomain.com restart:0&lt;/FONT&gt; 
&lt;LI&gt;INSTALL (silently): &lt;FONT face="Courier New" color=#0000ff&gt;updatehf.vbs action:install mode:silent email:you@yourdomain.com restart:1&lt;/FONT&gt; 
&lt;LI&gt;PROMPT: &lt;FONT face="Courier New" color=#0000ff&gt;updatehf.vbs action:prompt mode:verbose email:you@yourdomain.com restart:1&lt;/FONT&gt; &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Kudos to Rob and all those who have contributed. Once again thanks a lot Rob.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;DOWNLOAD&lt;/STRONG&gt; the latest version from &lt;A href="http://www.vbshf.com/vbshf/forum/forums/thread-view.asp?tid=199&amp;amp;start=1"&gt;http://www.vbshf.com/vbshf/forum/forums/thread-view.asp?tid=199&amp;amp;start=1&lt;/A&gt;&amp;nbsp;(current version 2.3)&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;See the&lt;/STRONG&gt; &lt;A href="http://www.vbshf.com/vbshf/forum/forums/thread-view.asp?tid=249&amp;amp;posts=1&amp;amp;start=1"&gt;changelog&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;If you have any issues/comments/bugs/suggestions or just want to say thanks to Rob, then reply to the on-going discussion on &lt;A href="http://www.vbshf.com/vbshf/forum/forums/thread-view.asp?tid=199&amp;amp;start=1"&gt;Windows Update Agent force script, email results version 2.3&lt;/A&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=94089" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>Welcome to WSUS Scripts &amp; WSUS Tools Repository</title><link>http://msmvps.com/blogs/athif/archive/2006/05/09/94084.aspx</link><pubDate>Tue, 09 May 2006 08:56:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:94084</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=94084</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/05/09/94084.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;So, these days I am trying to collect information (as much as I can)&amp;nbsp;on WSUS Scripts &amp;amp; WSUS Tools in the community and host a &lt;a href="http://msmvps.com/blogs/athif/archive/category/2169.aspx"&gt;dedicated blog for WSUS Scripts &amp;amp; Tools Repository&lt;/A&gt;. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;If you are aware of any such tools then kindly let me know.&amp;nbsp; You can either &lt;a href="http://msmvps.com/blogs/athif/contact.aspx"&gt;&lt;FONT color=#008000&gt;Contact me&lt;/FONT&gt;&lt;/A&gt; or drop a comment.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;New!!! WSUS Scripts and WSUS Tools Repository!. Stay tuned!.&lt;/FONT&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=94084" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>Delete Older Not Reported Stale Computers</title><link>http://msmvps.com/blogs/athif/archive/2006/04/26/Stale-Computers.aspx</link><pubDate>Wed, 26 Apr 2006 12:29:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:92630</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=92630</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/04/26/Stale-Computers.aspx#comments</comments><description>&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;Is it possible to configure WSUS to delete older computers which are not reported in WSUS for quite a time?&lt;/FONT&gt;&lt;/STRONG&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;To clean up the old computer objects, use CleanStaleComputers from &lt;A href="http://download.microsoft.com/download/8/d/0/8d068114-bd66-4fde-a04c-aeaa9d1fe640/Update%20Services%20API%20Samples%20and%20Tools.EXE"&gt;Windows Server Update Services API Samples and Tools&lt;/A&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;CleanStaleComputers:&amp;nbsp;This sample application removes computers from the Update Services &lt;BR&gt;server that have not &lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;contacted the server in a specified number of days. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;STRONG&gt;&lt;FONT color=#000080&gt;USAGE:&lt;/FONT&gt;&lt;/STRONG&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;FONT color=#0000ff&gt;CLEANSTALECOMPUTERS /DAYS:[1-365] /DELETE:{YES | NO} /PROMPT:{YES | NO}&lt;/FONT&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;/DAYS. Days since the computer contacted the server &lt;BR&gt;/DELETE. Delete from the Update Services server or move to the Stale &lt;BR&gt;computers group &lt;BR&gt;/PROMPT. Prompt before moving/deleting computers&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;a href="http://msmvps.com/blogs/athif/archive/2006/04/12/What_can_you_expect_in_WSUS_3_0.aspx"&gt;WSUS Product Team has heard this request&lt;/A&gt; and the capability to clean old stale computers is under consideration for the next version along with the ability to clean up old/superseded updates from the tool.&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&lt;STRONG&gt;MORE INFORMATION&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Windows Server Update Services API Samples and Tools&lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://download.microsoft.com/download/8/d/0/8d068114-bd66-4fde-a04c-aeaa9d1fe640/Update%20Services%20API%20Samples%20and%20Tools.EXE"&gt;&lt;FONT face=Verdana size=2&gt;http://download.microsoft.com/download/8/d/0/8d068114-bd66-4fde-a04c-aeaa9d1fe640/Update%20Services%20API%20Samples%20and%20Tools.EXE&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;What can you expect in WSUS 3.0?&lt;BR&gt;&lt;/FONT&gt;&lt;a href="http://msmvps.com/blogs/athif/archive/2006/04/12/What_can_you_expect_in_WSUS_3_0.aspx"&gt;&lt;FONT face=Verdana size=2&gt;http://msmvps.com/blogs/athif/archive/2006/04/12/What_can_you_expect_in_WSUS_3_0.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=92630" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>Excellent Script to detect or download just the IMF Update</title><link>http://msmvps.com/blogs/athif/archive/2006/04/16/91242.aspx</link><pubDate>Sun, 16 Apr 2006 14:05:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:91242</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=91242</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/04/16/91242.aspx#comments</comments><description>&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/exchange/articles/424115.aspx"&gt;&lt;FONT color=#0000ff&gt;Scott Roberts&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;posted an excellent vb script on &lt;A href="http://blogs.technet.com/exchange/archive/2006/04/12/425060.aspx"&gt;http://blogs.technet.com/exchange/archive/2006/04/12/425060.aspx&lt;/A&gt;&amp;nbsp;which can detect or download just the IMF Update's based on the parameter passed whilst executing the script. This script is very handy as it detects&amp;nbsp;/&amp;nbsp;downloads IMF updates only.&lt;/P&gt;
&lt;P&gt;To enable IMF updates using WSUS, take a look at my previous blog entry;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#000000&gt;Updating Intelligent Message Filter v2 via WSUS&lt;/FONT&gt;&lt;BR&gt;&lt;a href="http://msmvps.com/blogs/athif/archive/2006/03/21/Updating_Intelligent_Message_Filter_v2_via_WSUS.aspx"&gt;http://msmvps.com/blogs/athif/archive/2006/03/21/Updating_Intelligent_Message_Filter_v2_via_WSUS.aspx&lt;/A&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#000080&gt;USAGE:&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;cscript&amp;nbsp;//nologo imfUpdateScript.vbs Detect&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#000000&gt;(this command will detect IMF updates).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;cscript&amp;nbsp;//nologo imfUpdateScript.vbs Install &lt;/FONT&gt;&lt;FONT color=#000000&gt;(this command will&amp;nbsp;install IMF updates).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;STRONG&gt;&lt;FONT color=#000080&gt;NOTE:&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT color=#000000&gt;I have saved the script as imfUpdateScript.vbs.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Scott also promised a post on the &lt;A href="http://blogs.technet.com/wsus/"&gt;WSUS blog&lt;/A&gt; next week on how to create a script that will show how to do the automatic approval of IMF Updates only at the WSUS server. Kudos Scott!&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;UPDATE (5/14/2006):&lt;/STRONG&gt; Posted the same on &lt;A id=_ctl0__ctl0__ctl0__ctl0_BlogSideBar1__ctl0_Categorylist1__ctl0_Categories__ctl7_Link HREF="/blogs/athif/archive/category/2169.aspx"&gt;&lt;FONT color=#009933&gt;WSUS Scripts &amp;amp; Tools Repository&lt;/FONT&gt;&lt;/A&gt; blog.&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=91242" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>WSUS will not provide HOT FIXES</title><link>http://msmvps.com/blogs/athif/archive/2006/04/16/91224.aspx</link><pubDate>Sun, 16 Apr 2006 11:16:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:91224</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=91224</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/04/16/91224.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Many-a-times WSUS Admins, wonder if they can automatically deploy hot fixes&amp;nbsp;which are not supported by WSUS or which are not &lt;SPAN&gt;available &lt;/SPAN&gt;on WindowsUpdate.com. The simple answer is NO and you have to use SMS or some script to install them. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;Alternately, If the computers are in an Active Directory&amp;nbsp;Domain, then you might want to take a look at this excellent script posted by &lt;STRONG&gt;&lt;FONT color=#790619&gt;&lt;A href="http://groups.google.com/group/microsoft.public.windows.server.update_services/tree/browse_frm/thread/5f2f2a586fe04e84/109aa9c068c25018?rnum=1&amp;amp;hl=en&amp;amp;_done=%2Fgroup%2Fmicrosoft.public.windows.server.update_services%2Fbrowse_frm%2Fthread%2F5f2f2a586fe04e84%2Fd6755f03e584a1d8%3Fhl%3Den%26safe%3Don%26#doc_d6755f03e584a1d8"&gt;Torgeir Bakken (MVP)&lt;/A&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000 size=2&gt;&lt;STRONG&gt;&lt;FONT color=#790619&gt;Notes from Torgeir Bakken (MVP):&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Verdana color=#000000 size=2&gt;You should do it in a computer startup script (with a GPO that is applied to you computers) instead of a logon script. A computer startup script runs as part of the boot up process (before the user logs in). It runs under the system context and has local admin rights. &lt;/FONT&gt;&lt;FONT color=#000000&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;As you need to access a file over the network from the computer startup script, you need to put the file on a network share and grant read access for the AD group "Domain Computers" to the share. &lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Note that the script creates a registry marker when the update is installed, so the next time the script is run, it sees this marker, and skips the installation of the update (to avoid repeating installations). &lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;You will need to change the path to the exe file (I have used a dummy path in the script), and maybe the command line switches for the update. &lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;I have added the command line switches /u /q /z to the command line in the script, it should work on all MS updates that uses update.exe to install (most do).&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;/u: Unattended mode. &lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;/q: Quiet mode (no user interaction). &lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;/z: Do not restart when installation is complete. &lt;BR&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;If you want the computer to automatically reboot after the install (if the update needs it), remove the /z switch. &lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Below is a VBScript you can put in a computer startup script that will install a MS update. &lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Script code: &lt;BR&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;'--------------------8&amp;lt;---------------------- &lt;BR&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#0000ff size=2&gt;sExePath = "\\server\share\folder\something.exe" &lt;BR&gt;sSwitches = "/u /q /z" &lt;BR&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#0000ff size=2&gt;Set oShell = CreateObject("WScript.Shell") &lt;BR&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#0000ff size=2&gt;sRegKey = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" &lt;BR&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#0000ff size=2&gt;' suppress error in case values does not exist &lt;BR&gt;On Error Resume Next &lt;BR&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#0000ff size=2&gt;' check for marker &lt;BR&gt;sRegMarkerValue = "" &amp;nbsp;' init value &lt;BR&gt;sRegMarkerValue = oShell.RegRead( sRegKey &amp;amp; "\Hotfix1Installed") &lt;BR&gt;On Error Goto 0 &lt;BR&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#0000ff size=2&gt;' to be sure update is installed only once, test on marker &lt;BR&gt;If sRegMarkerValue &amp;lt;&amp;gt; "yes" Then &lt;BR&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#0000ff size=2&gt;&amp;nbsp; &amp;nbsp;oShell.Run Chr(34) &amp;amp; sExePath &amp;amp; Chr(34) &amp;amp; " " &amp;amp; sSwitches, 1, True &lt;BR&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#0000ff size=2&gt;&amp;nbsp; &amp;nbsp;' create marker &lt;BR&gt;&amp;nbsp; &amp;nbsp;oShell.RegWrite sRegKey &amp;amp; "\Hotfix1Installed", "yes" &lt;BR&gt;End If &lt;BR&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;'--------------------8&amp;lt;---------------------- &lt;BR&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;WSH 5.6 documentation (local help file) can be downloaded from here if you haven't got it already: &lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/downloads/list/webdev.asp" target=_blank&gt;&lt;FONT face=Verdana color=#0000cc size=2&gt;http://msdn.microsoft.com/downloads/list/webdev.asp&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;EM&gt;UPDATE (5/7/2006):&lt;/EM&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;EM&gt;Access to drivers and hotfixes via the Microsoft Update (MU) Catalog site is tightly integrated with WSUS 3.0 to enable easy drivers and hotfix access.&lt;/EM&gt;&lt;/FONT&gt; &lt;/P&gt;&lt;/FONT&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=91224" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item><item><title>WSUS TOOL: Copying Approvals Between Target Groups</title><link>http://msmvps.com/blogs/athif/archive/2006/04/05/89368.aspx</link><pubDate>Wed, 05 Apr 2006 06:53:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:89368</guid><dc:creator>Mohammed Athif Khaleel</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/athif/rsscomments.aspx?PostID=89368</wfw:commentRss><comments>http://msmvps.com/blogs/athif/archive/2006/04/05/89368.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;You can use the WSUS API to copy update approvals from one WSUS group to another.&amp;nbsp;&lt;FONT color=#000000&gt;&lt;STRONG&gt;&lt;FONT color=#000080&gt;Yasufumi Shiraishi [MSFT]&lt;/FONT&gt;&lt;/STRONG&gt; has posted the &lt;A href="http://groups.google.com/group/microsoft.public.windows.server.update_services/msg/0a62b129af4c8a7c?dmode=source&amp;amp;hl=en"&gt;&lt;STRONG&gt;code and the procedure&lt;/STRONG&gt;&lt;/A&gt; to get a tool that copies update approvals from one computer group to another, &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Verdana size=2&gt;
&lt;P&gt;Some additional notes about the utility from &lt;FONT color=#5b1094&gt;&lt;STRONG&gt;Torgeir Bakken (MVP)&lt;/STRONG&gt; &lt;/FONT&gt;&lt;FONT color=#000000&gt;on &lt;/FONT&gt;&lt;A href="http://groups.google.com/group/microsoft.public.windows.server.update_services/browse_frm/thread/22b5a2941fbf3bdf/9ef091fdeec159a4#9ef091fdeec159a4"&gt;microsoft.public.windows.server.update_services&lt;/A&gt;: &lt;BR&gt;
&lt;P&gt;1. The utility is a command line based utility, you need to specify the "from" and "to" group names on the command line. 
&lt;P&gt;2. If a group name contains spaces, you need to surround it with quotes, like this: "Test group". &lt;BR&gt;
&lt;P&gt;3. The naming of the groups is case sensitive so "Servers" is not equal to "servers". 
&lt;P&gt;4. The utility will mirror the approval status, &lt;FONT color=#ff0000&gt;&lt;STRONG&gt;so any additional approved installations in the target group will be unapproved&lt;/STRONG&gt;&lt;/FONT&gt;. &lt;/P&gt;
&lt;P&gt;Copying the &lt;A href="http://groups.google.com/group/microsoft.public.windows.server.update_services/msg/0a62b129af4c8a7c?dmode=source&amp;amp;hl=en"&gt;&lt;STRONG&gt;Code and Procedure&lt;/STRONG&gt;&lt;/A&gt;&amp;nbsp;from the original post;&lt;/P&gt;
&lt;P&gt;1) Copy the code between the two ----------------8&amp;lt;-----------------&lt;BR&gt;below and save it to a text file named "&lt;FONT face="Courier New" color=#0000ff&gt;CopyApprovalsBetweenGroups.cs&lt;/FONT&gt;"&lt;BR&gt;&lt;BR&gt;2) Open a command prompt, and navigate to the directory containing&lt;BR&gt;CopyApprovalsBetweenGroups.cs.&lt;BR&gt;&lt;BR&gt;3) Run the following command line (all one one line, you will need to&lt;BR&gt;unwrap the line before running it!):&lt;BR&gt;&lt;BR&gt;%WINDIR%\Microsoft.NET\Framework\v1.1.4322\csc.exe&lt;BR&gt;&amp;nbsp; /r:"%PROGRAMFILES%\Update Services\service\bin&lt;BR&gt;\Microsoft.UpdateServices.Administration.dll" /target:exe&lt;BR&gt;&amp;nbsp; /out:CopyApprovalsBetweenGroups.exe CopyApprovalsBetweenGroups.cs&lt;BR&gt;&lt;BR&gt;This will create a tool called &lt;STRONG&gt;CopyApprovalsBetweenGroups.exe&lt;/STRONG&gt;.&lt;BR&gt;&lt;BR&gt;(Note if you use Visual Studio to compile the code instead of using the command line above, you need to add a reference to the file microsoft.updateservices.administration.dll in your project, see&lt;BR&gt;bottom of this Web page for more on this:&lt;BR&gt;&lt;A href="http://download.microsoft.com/download/7/4/5/7458e392-11de-4543-936c-b5248e344487/readme.htm"&gt;http://download.microsoft.com/download/7/4/5/7458e392-11de-4543-936c-b5248e344487/readme.htm&lt;/A&gt;)&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;Content of CopyApprovalsBetweenGroups.cs:&lt;BR&gt;--------------------8&amp;lt;----------------------&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff&gt;using System;&lt;BR&gt;using Microsoft.UpdateServices.Administration;&lt;BR&gt;&lt;BR&gt;// Usage:&lt;BR&gt;// copyapprovals &amp;lt;name of group to copy from&amp;gt; &amp;lt;name of group to copy to&amp;gt;&lt;BR&gt;class Program&lt;BR&gt;{&lt;BR&gt;&amp;nbsp; static IComputerTargetGroup FindComputerTargetGroup(&lt;BR&gt;&amp;nbsp;&amp;nbsp; ComputerTargetGroupCollection groups,&lt;BR&gt;&amp;nbsp;&amp;nbsp; string name)&lt;BR&gt;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp; foreach (IComputerTargetGroup group in groups)&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (group.Name == name)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return group;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; throw new ApplicationException(string.Format("Computer group {0} not found.", name));&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp; static void Main(string[] args)&lt;BR&gt;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp; try&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (args.Length != 2)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //System.Windows.Forms.MessageBox.Show("TEST");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("Incorrect number of arguments.");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("usage: copyapprovals &amp;lt;name of group to copy from&amp;gt;" +&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; " &amp;lt;name of group to copy to&amp;gt;");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.ReadLine();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IUpdateServer server = AdminProxy.GetUpdateServer();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ComputerTargetGroupCollection groups = server.GetComputerTargetGroups();&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // get IComputerTargetGroup references for the source and destination groups&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IComputerTargetGroup sourceGroup = FindComputerTargetGroup(groups, args[0]);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IComputerTargetGroup destinationGroup = FindComputerTargetGroup(groups, args[1]);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("Copying update approvals from group {0} to group {1}.", args[0],&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; args[1]);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // loop over all updates, copying approvals from the source group to the destination&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // group as necessary&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateCollection updates = server.GetUpdates();&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (IUpdate update in updates)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateApprovalCollection sourceApprovals = update.GetUpdateApprovals(sourceGroup);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateApprovalCollection destinationApprovals =&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; update.GetUpdateApprovals(destinationGroup);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // for simplicity, this program assumes that an update has&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // at most one approval to a given group&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (sourceApprovals.Count &amp;gt; 1)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Update {0} had multiple approvals to group {1}; skipping.",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; update.Title,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sourceGroup.Name);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (destinationApprovals.Count &amp;gt; 1)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Update {0} had multiple approvals to group {1}; skipping.",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; update.Title,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; destinationGroup.Name);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IUpdateApproval sourceApproval = null;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IUpdateApproval destinationApproval = null;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (sourceApprovals.Count &amp;gt; 0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sourceApproval = sourceApprovals[0];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (destinationApprovals.Count &amp;gt; 0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; destinationApproval = destinationApprovals[0];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (sourceApproval == null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the update is not approved to the source group&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (destinationApproval != null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the update is not approved to the source group, but it is approved&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // to the destination group&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // unapprove the update for the destination group to match the source&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Unapproving update {0} to group {1}.",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; update.Title,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; destinationGroup.Name);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; destinationApproval.Delete();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // neither the source group nor the destination group have an approval;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // do nothing&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the source group has an approval&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (destinationApproval != null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // destination group has an approval; check to see if we need to overwrite it&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (destinationApproval.Action !=sourceApproval.Action)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the approvals are different; overwrite&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Changing approval for update {0} from {1} to {2} for group {3}.",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; update.Title,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; destinationApproval.Action,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sourceApproval.Action,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; destinationGroup.Name);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; update.Approve(sourceApproval.Action, destinationGroup);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // destination group does not have an approval; approve&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Approving update {0} for {1} for group {2}.",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; update.Title,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sourceApproval.Action,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; destinationGroup.Name);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; update.Approve(sourceApproval.Action, destinationGroup);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp; catch (Exception e)&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(e.Message);&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;--------------------8&amp;lt;----------------------&lt;/P&gt;&lt;/FONT&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=89368" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/athif/archive/tags/MVP_2700_s+Blogs/default.aspx">MVP's Blogs</category><category domain="http://msmvps.com/blogs/athif/archive/tags/WSUS+Scripts+_2600_amp_3B00_+Tools+Repository/default.aspx">WSUS Scripts &amp;amp; Tools Repository</category></item></channel></rss>