I needed to go through a number of servers and check what hotfixes had been installed. I had a feeling Win32::TieRegistry could do that for me. The code needed to do so is surprisingly short.

It took me about 20 seconds to read the documentation and do the following. Bravo tye. My only gripe is that I typed in slashes rather than backslashes, and it didn't like that (although this was written on a 5.6.1 installation, for all I know this is fixed in more recent versions).

#! perl -w use strict; use Win32::TieRegistry; use constant BASE => 'LMachine\\Software\\Microsoft\\Windows NT\\Curre +ntVersion\\HotFix\\'; my $fix = $Registry->{+BASE} or die "oops, not admin? ($^E)\n"; foreach my $f( sort keys %$fix ) { chop(my $id = $f); my $desc = $Registry->{BASE.$f}{Comments} || '<no description>'; print "$id\t$desc\n"; }

Replies are listed 'Best First'.
Re: Enumerate hotfixes applied to a Windows server (2000, 2003) (import)
by tye (Sage) on May 05, 2005 at 02:45 UTC


    use Win32::TieRegistry( Delimiter=>"/" );

    You should have spent 35 seconds reading the documentation. (:

    Actually, I prefer the newer usage:

    my $Reg; use Win32::TieRegistry( Delimiter=>"/", TiedRef=>\$Reg );

    Then use $Reg (or whatever you name your variable) instead of the old $Registry global that gets exported by default (for backward compatability with earlier versions).

    Note that $Registry->{BASE.$f}{Comments} is better written $fix->{$f}{Comments} or $fix->{"$f/Comments"}, since you've already got the BASE() key open.

    - tye        

      Also, since you are not changing the registry, it seems safer to use Access => 'KEY_READ'.