The code might also be useful to those looking to dive into WQL (WMI Query Language). Again, probably not applicable to most, but hey, it's my job.
# %oracle_instance's keys are names of Oracle instances on the server # $WMI_Services is a Win32::OLE object corresponding to a server's # "root/cimv2" WMI namespace # And the "in" function is an import from Win32::OLE # Here's the traditional code print "These need to be active Oracle admins with DBA privileges:\n"; # get ORA_DBA and ORA_<instance>_DBA groups my $group_query = "select * from Win32_Group where Name = 'ORA_DBA'"; foreach my $instance ( keys %oracle_instance ) { $group_query .= " or Name = 'ORA_${instance}_DBA'"; } my $ora_groups = $WMI_Services->ExecQuery($group_query); # get users in the above groups foreach my $group ( in $ora_groups ) { my $domain_ora_dba = $WMI_Services->ExecQuery(<<WQL); select PartComponent from Win32_GroupUser where GroupComponent = "Win32_Group.Domain='$group->{Domain}',Name='$group->{Name}'" WQL # print the users' names foreach my $dba_groupuser ( in $domain_ora_dba ) { print "$1\n" if $dba_groupuser->{PartComponent} =~ /,Name="(\w+)"$/; } } print "\n"; # And now in the spirit of TMTOWTDI, let's hear it for map! print "These need to be active Oracle admins with DBA privileges:\n", join( "\n", # list the names of users map $_->{PartComponent} =~ /,Name="(\w+)"$/, # that are members of in $WMI_Services->ExecQuery( 'select PartComponent from Win32_GroupUser where ' . join ' or ', map "GroupComponent = \"Win32_Group.Domain='$_->{Domain}',Name='$_->{Name}'\"", # the Windows groups named in $WMI_Services->ExecQuery( # ORA_DBA "select * from Win32_Group where Name = 'ORA_DBA' or " . join ' or ', # or ORA_<instance>_DBA map "Name = 'ORA_${_}_DBA'", keys %oracle_instance ) ) ), "\n\n";
In reply to TMTOWTDI, WMI, and map abuse by mjg
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |