Read OCS Meeting Policy

How to read a user's OCS Meeting Policies using Perl - The user's msRTCSIP-UserPolicy attribute contains a DNwithBinary object (or an array of them). The DN's, once retrieved, point to OCS meeting policy objects, that contain policy settings stored in XML format.

Here's a Perl script that will find a user, read the policies applied to the user, and print out the settings in those policies.

use Win32::OLE;
use XML::Simple;
$user="myUser";
# search for the user to find the distinguishedName
$dse=Win32::OLE->GetObject("LDAP://RootDSE");
$root=$dse->Get("RootDomainNamingContext");
$adpath="GC://$root";
$base="<".$adpath.">";
$connection = Win32::OLE->new("ADODB.Connection");
$connection->{Provider} = "ADsDSOObject";
$connection->Open("ADSI Provider");
$command=Win32::OLE->new("ADODB.Command");
$command->{ActiveConnection}=$connection;
$command->{Properties}->{'Page Size'}=1000;
$rs = Win32::OLE->new("ADODB.RecordSet");
$command->{CommandText}="$base;(&(objectCategory=User)((cn=$user)(samaccountname=$user)));distinguishedName;subtree";
$rs=$command->Execute;
until ($rs->EOF){
 $dn=$rs->Fields(0)->{Value};
 $rs->MoveNext;
}
#retrieve the user's meeting policies
$userObj=Win32::OLE->GetObject("LDAP://$dn");
$pol=$userObj->Get("msRTCSIP-UserPolicy");
if(ref($pol) eq "ARRAY"){
 foreach $p (@{$pol}){
  &readPolicy($p);
 }
}else{
 &readPolicy($pol);
}
sub readPolicy{
 $pol=shift;
 if(!$pol){ print "no policy set\n"; exit;}
 print "$pol->{DNString}\n";
 $polObj=Win32::OLE->GetObject("LDAP://$pol->{DNString}");
 $policyContent=$polObj->Get("msRTCSIP-PolicyContent");
 $hashref=XMLin($policyContent);
 foreach $k (sort keys %{$hashref->{property}}){
  print "$k:\t$hashref->{property}->{$k}->{content}\n";
 }
 print "\n";
}

0 comments:

Post a Comment

Related Posts Plugin for WordPress, Blogger...