Re: Added re-run functionality to todo.pl; new script wuinstall.bat

Johannes Singer <[email protected]> Wed, 16 Jun 2010 17:54:07 +0200
Newsgroups gmane.comp.windows.unattended.devel
Message-ID <[email protected]>
Jason Oster schrieb:
> On 06/16/2010 05:16 AM, Johannes Singer wrote:
>> Hello!
>>
>> I needed the functionality of fully updating a computer via WSUS, a
>> functionality that has been asked for time and time again, but was never
>> implemented in a satisfactory way. So I went and found a nice tool
>> called WuInstall, and wrote an unattended script to use it.
>> Please see the attached script wuinstall.bat.
> [snip]
>> With this you can update a computer to the latest state with the updates
>> coming from the WSUS-Server or from Windows Update (your choice), and it
>> runs until there are no more updates to install.
>>
>> I believe, this functionality may be useful for other scripts too.
>>
>> Any comments?
>>
>> Regards,
>> Johannes
>
> Hi Johannes!
>
> This looks very useful for me.  I was actually planning to look into a 
> way to pull updates from WSUS with Unattended, and this could be just 
> the thing.
>
> One thing I'd like to ask, though.  Can you supply a patch against 
> todo.pl, instead of the complete, modified file?  That would be great 
> for me, so I can continue maintaining my personal repo with your 
> changes while following the trunk.
>
> It will also be necessary if the committers decide to include the 
> changes in the official release.
Hi Jason!

Sorry, I totally forgot to add it.
Please see the attached file for the patch.

Regards,
    Johannes

------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo

_______________________________________________
unattended-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/unattended-devel
todo_rerun.diff (text/plain, 1.8 KB)
Index: todo.pl
===================================================================
--- todo.pl	(Revision 3214)
+++ todo.pl	(Arbeitskopie)
@@ -24,6 +24,7 @@
 # Location of the "to do" logs.
 my $log = "$c\\netinst\\logs\\todo.txt";
 
+my $fullcmd; 
 # Determine alternate letter for z: drive and store it in Z
 # environment variable (unless it is already set).
 unless (exists $ENV{'Z'}) {
@@ -381,7 +382,32 @@
             }
 
             $ret = $status;
+        }
+        elsif ($cmd =~ /^\.rerun-on\s+(\d+)\s+(.*)$/) {
+            my ($err_to_rerun, $new_cmd) = ($1, $2);
+            my $status = do_cmd ($new_cmd, 1);
+
+            if ($status == $err_to_rerun << 8) {
+                print "$new_cmd exited status $err_to_rerun; rerunning.\n";
+                push_todo($fullcmd);
+                $status = 0;
+            }
+
+            $ret = $status;
         }
+        elsif ($cmd =~ /^\.reboot-rerun-on\s+(\d+)\s+(.*)$/) {
+            my ($err_to_reboot, $new_cmd) = ($1, $2);
+            my $status = do_cmd ($new_cmd, 1);
+
+            if ($status == $err_to_reboot << 8) {
+                print "$new_cmd exited status $err_to_reboot; rebooting and rerunning.\n";
+                push_todo($fullcmd);
+                do_cmd ('.reboot');
+                die 'Internal error';
+            }
+
+            $ret = $status;
+        }
         elsif ($cmd =~ /^\.missing-ok\s+(.*)$/) {
             my $new_cmd = $1;
             my $status = do_cmd ($new_cmd, 1);
@@ -505,8 +531,8 @@
     # Disable running ourselves after reboot.
     run_at_logon ();
 
-    while (defined (my $cmd = pop_todo ())) {
-        do_cmd ($cmd);
+    while (defined ($fullcmd = pop_todo ())) {
+        do_cmd ($fullcmd);
     }
 }
 else {