locked
Integrer UM de Exchange RRS feed

  • Question

  • Bonjour,

    j'essaye tant bien que mal d'integrer la messagerie unifié de Exchange avec OCS, cependant ben j'y arrive pas.

    Mon schéma, Un serv Exch, Un serv OCS, et 1 domaine,

    Office Com fonctionne bien, j'ai la gestion de présence, etc...

    Par contre j'aimerais bien qu'avec office com je puisse acceder à la messegerie unifié de exchange, mais comment configurer ocs
    car sous exchange, c'est plutot simple.

    Merci
    jeudi 6 septembre 2007 14:34

Toutes les réponses

  •  

    Pour ça faut faire plein de manip. Mais j'ai  2 scripts powershell qui te permet de faire tous ceci.

     

    Si tu les veut tiens moi au courant ! ! !

     

    Si il y a d'autre solution je veux bien les connaitres.

    jeudi 6 septembre 2007 15:00
  • Oui clairement que ca m'interesse

    car dans la doc j'ai vu exchUCutil et un autre script qui permettent de faire cela, cependant, aucun fichier/script exchucutil dans mes repertoires, etc....

    Merci pour ton aide !

    C'est une infra que tu as deja mis en place ? J'esssaye justement de deployer ce genre d'installation, donc j'aurais surement d'autres questions par la suite, mais deja integrer les 2 de base, c'est ca qui m'interesse.

    haegel.d [a t] free.fr pour me les envoyer
    jeudi 6 septembre 2007 15:10
  •  

    Je t'envoi ça

     

    Es ce que l'on peut mettre le script ici ?????

     

    C'est du script pwershell

     

     

     

     

     

     

     

     

    jeudi 6 septembre 2007 19:15
  • Bonsoir Serge,

     

    je pense que ce sera très utile !

     

    A bientôt, cordialement.

     

    PS: Cela ne peut que aider tout le monde.

    jeudi 6 septembre 2007 20:39
  • Tout d'abord merci pour les scripts, c'est ceux qui me manquaient.

    J'ai donc pu continuer la procédure d'installation, je configure Exchange 07,
    j'ai créer un plan de num, associé au server, activé  les utilisateurs pour
    UM...

    Je lance l'outil exchucutil, tout se déroule sans problème

    Maintenant sur OCS, je crée un plan de numérotation, deja la cela se complique,
    je prend le nom FQDN de mon plan de num Exch, puis, je fais un truc basique qui
    transforme 123 en 123 pour ne rien changer, vu que pour l'instant c'est juste
    communication Office Com --> OCS --> UM (enfin ce que j'aimerais)

    Puis je lance l'outil ocsumutil, je vérifie, j'ai bien des infos qui ont l'air
    de coller.

    Je tente d'appeler à partir de Office com, mais rien, erreur.

    Est-ce que j'ai oublié quelque chose ? En même temps je suis pas completement sur de la manière dont fonctionne OCS et les liaisons avec les autres composants...

    Je mettrais les scripts recus des que possible sur un ftp

    Merci beaucoup d'avance
    vendredi 7 septembre 2007 09:25
  • Ok je mettrais les scripts ici.

    Pour ton problème, déjà es ce que tu as rédémarrer les services (OCS + UM). Ensuite il y a pas mal de chose à faire pour configurer les transformations de numéro (expression réguilère, là je ne pourrai pas t'aider).

    Normalement dans la procédure (si on parle de la même il me la faudrais stp) il te montre un exemple essaye de le suivre si c'est juste pour faire des tests.

    Il faut aussi activé le UM pour ton utilisateurs et mettre le même numéro dans OCS.

    Ton problème selon moi c'est le coup des éxpressions réguilières
    vendredi 7 septembre 2007 10:03
  •  

    Bonjour, je suis desole de poster la mais j'ai un probleme qui est tout autre : j'ain installé LCS 2005 sur un windows 2003 server avec Exchange 2003.

     

    de son cote exchange 2003 marche normallement

     

    mais pour lcs : j'ai quelques soucis : deja j'ai un gros temps de latence dans la gestion des presences, de plus meme pour les clients qui se voient on line entre eux je ne peux pas envoyer de message ou appeler ... rien ! a chaque fois je recois un message d'erreur me disant que l'un des participants au moins est offline et que le message n'a pas pu etre delivré ... et il est vrai : le message n'est pas delivré !

     

    quelqu'un peut t il m'aider ?

     

    merci

     

    PS : je vais creer un nouveau topic promis mais comme ici il semble que vous repondez ...

    samedi 15 septembre 2007 13:27
  • Bonjour

     

    Il est vrais que tu devrais créer un nouveau topic

     

    Pour ma part je ne connais pas trop LCS...

     

    pour les scripts j'ai un petit souci de serveur. Promis je les posterais dès que je peus

     

    samedi 15 septembre 2007 13:46
  • Je suis maintenant dans le même cas que David  :
    J'ai Mon domaine
    Mon exchange
    Mon Mocs Entreprise

    Live Communicator fonctionne a merveille, mais ne synchronise pas avec exchange (mails, carnet d'adresses etc.)

    Si cela ne te dérange pas Serge, je veux bien les scripts powershell egalement.

    mon mail : nlecertisseur[ at ]flowline.fr
    mardi 11 mars 2008 14:52
  •  

    Bonjour à tous,

     

    Je suis aussi comme Nico & David, je suis sur un projet où j'ai un AD (+DNS) avec un exchange + edge et OCS en virtuel.

     

    J'aurais besoin de tes scripts pour OCS

     

    Merci d'avance.

     

     

    jeudi 3 avril 2008 15:19
  •  

    Allez je vous mets tout ça en ligne

     

    Attention a bien mettre les même nom de fichier

     

    attention sa risque d'être long

     

    exchucutil.ps1

    # Copyright (c) 2006 Microsoft Corporation. All rights reserved.
    #
    # THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE RISK
    # OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE USER.
    #
    param($Forest = $null)

    # Constants
    $RTC_USER_GROUP   = "RTCComponentUniversalServices";
    $EUM_DP_CONTAINER = "UM DialPlan Container"
    $NotFound = "(not found)"
    $ErrorList = $null;
    $Verify = $false;

    # Error messages
    $ReadRTCPoolError = "Failed to read Communications Server 2007 pool objects. Please verify Communications Server 2007 is deployed in this Active Directory forest and you are a member of the RTCUniversalServerReadOnlyGroup group or have sufficient privilege to read from this Active Directory container. ";
    $ReadUMDialPlanError = "Failed to read Exchange UMDialPlan objects. Please verify you have sufficient privilege to read from this Active Directory container. ";
    $WriteUMGatewayError = "Failed to create Exchange UMIPGateway objects. Please verify you are a member of the Exchange Organization Administrators group or have sufficient privilege to write to this Active Directory container. ";
    $ReadUMIPGatewayError = "Failed to read Exchange UMIPGateway objects. Please verify you have sufficient privilege to read from this Active Directory container. ";
    $ReadPermissionsError = "Failed to read permissions on the Exchange Organization and UM DialPlan Containers. Please verify you are a member of the Exchange Organization Administrators group or have sufficient privilege to read from this Active Directory object. "
    $WritePermissionsError = "Failed to add Read permissions to the Exchange Organization and UM DialPlan Containers. Please verify you are a member of the Exchange Organization Administrators group or have sufficient privilege to modify this Active Directory object. "

    # Function that returns true if the incoming argument is a help request
    function IsHelpRequest
    {
     param($argument)
     return ($argument -eq "-?" -or $argument -eq "-help");
    }a

    # Returns whether to run this script in verify mode or not
    function IsVerify
    {
     param($argument)
     return ($argument -eq "-verify");
    }

    # Function that displays the help related to this script following
    # the same format provided by get-help or -?
    function Usage
    {
    @"

    NAME:
    `tExchUCUtil.ps1

    SYNOPSIS:
    `tThis script configures Exchange UM to work with an existing OCS
    `tdeployment. It gives OCS read permissions to Exchange UM Active
    `tDirectory objects and creates UM IP Gateways for each existing
    `tOCS Pool.

    SYNTAX:
    `tExchUCUtil.ps1
    `t`t[-Forest ]
    `t`t[-Verify]

    PARAMETERS:
    `t-Forest:
    `t`tSpecifies the FQDN of the Active Directory forest hosting OCS
    `t`t(default = local)

    `t-Verify:
    `t`tOutputs the list of UM IP Gateways mapped to OCS pools and
    `t`tassociated dial plans

    `t-------------------------- EXAMPLE --------------------------

    C:\PS> .\ExchUCUtil.ps1 -Forest:"ocs.domain-fqdn.com"

    "@
    }

    ####################################################################################################
    # Script starts here
    ####################################################################################################

    # Check parameters and Usage Statement Request
    $args | foreach {
     if (IsVerify $_) { $Verify = $true; }
     else{if (IsHelpRequest $_) {Usage; exit;}
     else{ write-host "Invalid parameter $_."; exit; } }
    }

    # Helper functions
    #
    function HasErrors($e)      { return (($e -ne $null) -and ($e.Count -gt 0)); }
    function ThrowIfError()     { if(HasErrors($ErrorList)){ throw $ErrorList[0]; } }
    function WriteObject($obj)  { $obj | format-table; }

    function GetRTCPools()
    {
     # Execute the Get-UCPool script
     #
     $pools = .\get-ucpool.ps1 -forest:$forest
     return ($pools);
    }

    function GetUMIPGateways()
    {
     $gateways = get-umipgateway -ev:ErrorList -ea:SilentlyContinue;
     ThrowIfError

     # Put the gateways in a hash table using the Address as the key
     $ht=@{};
     if($gateways)
     {
      foreach($gw in $gateways){ $ht[$gw.Address.ToString()] = $gw; }
     }
     return ($ht);
    }

    function CreateConfigObject()
    {
     $configEntry = new-object System.Management.Automation.PSObject;
     add-member -InputObject:$configEntry -MemberType:NoteProperty -Name:PoolFqdn -value:$null
     add-member -InputObject:$configEntry -MemberType:NoteProperty -Name:UMIPGateway -value:$null
     add-member -InputObject:$configEntry -MemberType:NoteProperty -Name:DialPlans -value:$null
     return ($configEntry);
    }

    function ShowGateways($pools, $gateways, $dialplans)
    {
     $configTable = @();

     # Verify that all UC pools have a corresponding UMIPGateway
     #
     foreach($pool in $pools.Values)
     {
      # Create a dynamic config entry object:
      #
      $configEntry = CreateConfigObject

      $configEntry.PoolFqdn = $pool.Fqdn
      if( $gateways.ContainsKey($configEntry.PoolFqdn) )
      {
       $gw = $gateways[$configEntry.PoolFqdn];
       $configEntry.UMIPGateway = $gw.Name;

       $dpList = @();
       if( $gw.HuntGroups )
       {
        foreach($hg in $gw.HuntGroups)
        { $dpList += $hg.UMDialPlan.Name; }
       }
       else
       {
        $dpList += $NotFound;
       }
       $configEntry.DialPlans = $dpList;
      }
      else
      {
       $configEntry.UMIPGateway = $NotFound;
       $configEntry.DialPlans = $NotFound;
      }
     
      $configTable += $configEntry;
     }

     WriteObject $configTable
    }

    function ConfigureGateways($pools, $gateways, $dialplans)
    {
     write-host "Configuring UMIPGateway objects...";
     
     $configTable = @();
     
     if( $pools.Count -eq 0 )
     {
      write-host "  No OCS Pools found, skipping.";
      return ($configTable);
     }

     foreach($pool in $pools.Values)
     {
      # Create a dynamic config entry object:
      #
      $configEntry = CreateConfigObject

      [string]$poolName = $pool.Name;
      $configEntry.PoolFqdn = $pool.Fqdn
      
      write-host "  Pool: "$configEntry.PoolFqdn
      write-host -NoNewLine "  UMIPGateway: "
      if( !$gateways.ContainsKey($configEntry.PoolFqdn) )
      {
       write-host "Not Found, creating."
       $gw = new-umipgateway -Name:$poolName -Address:$configEntry.PoolFqdn -ev:ErrorList -ea:SilentlyContinue
       ThrowIfError
       
       $gateways[$gw.Address.ToString()] = $gw;
       $configEntry.UMIPGateway = $gw.Name;
      }
      else
      {
       write-host "Found, skipping."
       $gw = $gateways[$configEntry.PoolFqdn];
       $configEntry.UMIPGateway = $gw.Name;
      }
      
      # OCS pools must be linked to all dial-plans.
      $gw.HuntGroups | remove-umhuntgroup -Confirm:$false -ev:ErrorList -ea:SilentlyContinue

      # Verify this gateway is associated with all sip name dial-plans
      $dpList = @();
      if( $dialplans )
      {
       write-host -NoNewLine " "DialPlans:" "
       foreach($dp in $dialplans)
       {
        write-host -NoNewLine $dp.Name""
        # The phone context must not change during the lifetime of the dial-plan
        $phoneCtx = $dp.PhoneContext.Split(".")[0];
        $hg = new-umhuntgroup -Name:$dp.Name -PilotIdentifier:$phoneCtx -UMDialPlan:$dp.Identity -UMIPGateway:$gw.Identity -ev:ErrorList -ea:SilentlyContinue
        ThrowIfError
        $dpList += $phoneCtx;
       }
       write-host ""
      }
      else
      {
       write-host -NoNewLine " "No dial-plans found.
       $dpList += $NotFound;
      }
      $configEntry.DialPlans = $dpList;
      $configTable += $configEntry;
      write-host ""
     }
     return ($configTable);
    }

    function ContainsAccessRight($obj, [System.DirectoryServices.ActiveDirectoryRights]$r)
    {
     foreach($ar in $obj.AccessRights)
     {  if(($ar -band $r) -eq $r) {return $true;}  }
     return $false;
    }

    function GetRTCUserGroup()
    {
     $rtcUserGroup = $RTC_USER_GROUP;
     if($forest -ne $null) {$rtcUserGroup = $forest + "\" + $rtcUserGroup;}
     return ($rtcUserGroup);
    }

    function GetObjectPermissions($identity, [System.DirectoryServices.ActiveDirectoryRights]$rightsNeeded)
    {
     $rtcUserGroup = GetRTCUserGroup;
     $perm = get-adpermission -Identity:$identity -User:$rtcUserGroup -ev:ErrorList -ea:SilentlyContinue
     $result = new-object System.Management.Automation.PSObject;
     add-member -InputObject:$result -MemberType:NoteProperty -Name:ObjectName -value:$identity
     add-member -InputObject:$result -MemberType:NoteProperty -Name:AccessRights -value:$rightsNeeded
     add-member -InputObject:$result -MemberType:NoteProperty -Name:Configured -value:$false
     $result.AccessRights = $result.AccessRights.ToString()
     $result.Configured = $perm -and (ContainsAccessRight $perm $rightsNeeded)
     $result.Configured = $result.Configured.ToString()
     return ($result);
    }

    function SetObjectPermissions($obj, [System.DirectoryServices.ActiveDirectoryRights]$rightsNeeded, $inheritanceType)
    {
     $rtcUserGroup = GetRTCUserGroup;
     write-host -NoNewLine " "$obj.ObjectName": "
     if( $obj.Configured -eq $false )
     {
      write-host Not configured, adding permissions.
      $perm = add-adpermission -Identity:$obj.ObjectName -AccessRights:$rightsNeeded -InheritanceType:$inheritanceType -User:$rtcUserGroup -ev:ErrorList -ea:SilentlyContinue
      ThrowIfError;
     }
     else
     {
      write-host "Configured, skipping."
     }
    }

    function GetPermissions()
    {
     $resultList = @();

     $exorg = get-organizationconfig
     
     [System.DirectoryServices.ActiveDirectoryRights]$rights = "ListChildren"
     $result = GetObjectPermissions $exorg.Identity $rights
     $resultList += $result;
     
     $rights = "ListChildren,ReadProperty"
     $result = GetObjectPermissions $EUM_DP_CONTAINER $rights
     $resultList += $result;
     
     return ($resultList);
    }

    function ShowPermissions()
    {
     $permissions = GetPermissions;
     WriteObject $permissions
    }

    function ConfigurePermissions($permissions)
    {
     write-host Configuring permissions...
     
     #Set permissions on the Exchange Organization container
     [System.DirectoryServices.ActiveDirectoryRights]$rights = "ListChildren";
     [System.DirectoryServices.ActiveDirectorySecurityInheritance]$inheritance = "None";
     SetObjectPermissions $permissions[0] $rights $inheritance

     #Set permissions on the UM DialPlan Container
     $rights = "ListChildren,ReadProperty"
     $inheritance = "All";
     SetObjectPermissions $permissions[1] $rights $inheritance
    }

    # Executes this script
    function RunScript()
    {
     write-host ""
     
     [System.String]$message = $null;
     trap
     {
      write-host -NoNewLine $message
      write-host -NoNewLine "Additional information follows: "
      write-host $_.Exception.Message;
      exit;
     }
     
     # get all RTC pools
     $message = $ReadRTCPoolError
     $pools = GetRTCPools
     
     # get permissions
     $message = $ReadPermissionsError
     $permissions = GetPermissions;

     # get all UM IP gateways
     $message = $ReadUMIPGatewayError;
     $gateways = GetUMIPGateways;
     
     # get all SIP dial-plans
     $message = $ReadUMDialPlanError;
     $dialplans = get-umdialplan | where { $_.UriType -eq "SipName" };

     if( !$Verify )
     {
      # Ensure read permissions are set for OCS
      $message = $WritePermissionsError
      ConfigurePermissions $permissions
      write-host "";

      # Ensure gateways exist for OCS pools
      $message = $WriteUMGatewayError;
      $configTable = ConfigureGateways $pools $gateways $dialplans;
      write-host "";
     }

     # Check whether permissions have been set for OCS
     ShowPermissions

     # Check whether gateways exist for OCS pools
     ShowGateways $pools $gateways $dialplans;
    }

    # Run the script
    RunScript

     

     

     

     

    Et le 2ème

     

    get-ucpool.ps1

    # Copyright (c) 2006 Microsoft Corporation. All rights reserved.
    #
    # THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE RISK
    # OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE USER.
    #
    param($Forest = $null)

    # Constants
    #
    $E_NOT_FOUND          = 0x80072030;
    $E_NOT_OPERATIONAL    = 0x8007203A;
    $E_INVALID_CREDENTIAL = 0x8007052E;
    $RTC_DOMAIN_ROOT      = "CN=Microsoft,CN=System";
    $RTC_CONFIG_ROOT      = "CN=Services,CN=Configuration";
    $RTC_POOL_CONTAINER   = "CN=Pools,CN=RTC Service";
    $RTC_TRUSTED_SERVICES = "CN=Trusted Services,CN=RTC Service";
    $RTC_MIN_POOL_VER     = 0x30000


    # Function that returns true if the incoming argument is a help request
    function IsHelpRequest
    {
     param($argument)
     return ($argument -eq "-?" -or $argument -eq "-help");
    }

    # Function that displays the help related to this script following
    # the same format provided by get-help or <cmdletcall> -?
    function Usage
    {
    @"

    NAME:
    `tGet-UCPool.ps1

    SYNOPSIS:
    `tThis script returns the list of OCS pools configured in the
    `tforest specified (default = local).

    SYNTAX:
    `tGet-UCPool.ps1
    `t`t[-Forest <System.String>]

    PARAMETERS:
    `t-Forest:
    `t`tSpecifies the FQDN of the Active Directory forest hosting OCS
    `t`t(default = local)

    `t-------------------------- EXAMPLE --------------------------

    C:\PS> .\Get-UCPool.ps1 -Forest:"ocs.domain-fqdn.com"

    REMARKS:
    `tThis script is used from ExchUCUtil.ps1

    "@
    }

    ####################################################################################################
    # Script starts here
    ####################################################################################################

    # Check for Usage Statement Request
    $args | foreach { if (IsHelpRequest $_) { Usage; exit; } }


    # Helper functions
    #
    function GetCOMProp($obj,$m){ return ($obj.psbase.GetType().InvokeMember($m,"GetProperty",$null,$obj,$null)); }
    function GetLdapPath($path) { if($forest -ne $null){ return ("LDAP://"+$forest+"/"+$path); } else { return("LDAP://"+$path); } }

    # Executes the LDAP query and prompts for credentials if necessary
    #
    function ExecuteQuery($entry)
    {
     trap
     {
      $ec = $_.Exception.ErrorCode;
      if( !$entry.psbase.UserName -and ($ec -eq $E_INVALID_CREDENTIAL))
      {
       write-output $_.Exception.Message
       $cred = get-credential
       $nc = $cred.GetNetworkCredential();
       if($nc.Domain){$entry.psbase.UserName = $nc.Domain + "\" + $nc.UserName;}
       else {$entry.psbase.UserName = $nc.UserName;}
       $entry.psbase.AuthenticationType = "secure";
       $entry.psbase.Password = $nc.Password;
       $entry.psbase.RefreshCache();
       continue;
      }
      else
      {
       throw $_.Exception;
      }
     }
     $entry.psbase.RefreshCache();
    }

    function FindUCPools()
    {
     [string]$domainDN = $null;
     [string]$contextDN = $null;
     [string]$ldapQuery = $null;
     [System.DirectoryServices.DirectoryEntry]$entry = $null;
     
     if( $forest -ne $null )
     {
      $ldapQuery = "LDAP://" + $forest
      $entry = new-object System.DirectoryServices.DirectoryEntry $ldapQuery
     }
     
     # get the domain DN
     $entry = new-object System.DirectoryServices.DirectoryEntry $ldapQuery
     ExecuteQuery $entry;
     $domainDN = $entry.DistinguishedName;

     # First try to read all trusted services from the Domain naming context
     #
     $contextDN = $RTC_DOMAIN_ROOT + "," + $domainDN;
     $entry.psbase.Path = GetLdapPath($RTC_TRUSTED_SERVICES + "," + $contextDN);
     trap
     {
      # trap the "There is no such object on the server" error
      if( $_.Exception.ErrorCode -eq $E_NOT_FOUND )
      {
       $contextDN = $RTC_CONFIG_ROOT + "," + $domainDN;
       $entry.psbase.Path = GetLdapPath($RTC_TRUSTED_SERVICES + "," + $contextDN);
       ExecuteQuery $entry
       continue;
      }
      else
      {
       throw $_.Exception;
      }
     }
     ExecuteQuery $entry


     # Put all the trusted services in a hash table using the DN as the key
     #
     $svcHT=@{};
     if($entry.psbase.children)
     {
      foreach($svc in $entry.psbase.children)
      {  $svcHT[$svc.psbase.InvokeGet("distinguishedName")] = $svc;  }
     }


     # Now get all the pools
     #
     $entry.psbase.Path = GetLDAPPath($RTC_POOL_CONTAINER + "," + $contextDN);
     ExecuteQuery $entry;


     # Put the pools in a hash table using the DnsHostName as the key
     #
     $pools = $entry.psbase.children;
     $poolHT=@{};
     if($pools)
     {
      foreach($pool in $pools)
      {
       $psPool = CreateResultObject $svcHT $pool
       [int]$version = $psPool.Version;
       if($psPool.Fqdn -and $version -ge $RTC_MIN_POOL_VER){ $poolHT[$psPool.Fqdn] = $psPool; }
      }
     }
     return ($poolHT);
    }

    function GetMrasGruuAddress($svcHT, $pool)
    {
     # See if the pool has a link to an MRAS trusted service
     #
     $links = $pool.psbase.InvokeGet("msRTCSIP-TrustedServiceLinks");
     foreach($link in $links)
     {
      if( !$link )
      {
       continue;
      }
      
      $dnString = GetCOMProp $link "DNString"
      $serviceType = GetCOMProp $link "BinaryValue"

      # MRAS service type = 1
      #
      if( ($serviceType[0] -eq 1) -and ($svcHT.ContainsKey($dnString)) )
      { 
       $service = $svcHT[$dnString]; 
       if( $service )
       {
        [string]$domFqdn = $pool.psbase.InvokeGet("msRTCSIP-PoolDomainFQDN");
        [string]$svcFqdn = $service.psbase.InvokeGet("msRTCSIP-TrustedServerFQDN");
        [string]$svcType = $service.psbase.InvokeGet("msRTCSIP-TrustedServiceType");
        [System.Guid]$instGuid = new-object System.Guid $service.psbase.NativeGuid;
        $base64InstID = ConvertToBase64($instGuid.ToByteArray());

        # GRUU is of the format <sip:serverFqdn@domainFqdn;gruu;opaque=srvr:MRAS:instanceid>
        #
        return ("sip:"+$svcFqdn+"@"+$domFqdn+";gruu;opaque=srvr:"+$svcType+":"+$base64InstID);
       }
      }
     }
     return ($null);
    }

    function ConvertToBase64($byteArray)
    {
     # Return a modified base64 alphabet (URI friendly)
     #
     $base64 = [System.Convert]::ToBase64String($byteArray,"None");
     $base64 = $base64.Replace("=","A");
     $base64 = $base64.Replace("/","_");
     return ($base64);
    }

    # Create a dynamic PowerShell object to hold the pool data
    #
    function CreateResultObject($svcHT, $adsiPool)
    {
     $obj = new-object System.Management.Automation.PSObject;
     add-member -InputObject:$obj -MemberType:NoteProperty -Name:Name -value:$null
     add-member -InputObject:$obj -MemberType:NoteProperty -Name:Fqdn -value:$null
     add-member -InputObject:$obj -MemberType:NoteProperty -Name:Version -value:$null
     add-member -InputObject:$obj -MemberType:NoteProperty -Name:MrasGruu -value:$null
     add-member -InputObject:$obj -MemberType:NoteProperty -Name:DomainFqdn -value:$null

     $obj.Name = $adsiPool.psbase.InvokeGet("CN");
     $obj.Fqdn       = $adsiPool.psbase.InvokeGet("dnsHostName");
     $obj.Version    = $adsiPool.psbase.InvokeGet("msRTCSIP-PoolVersion");
     $obj.MrasGruu   = GetMrasGruuAddress $svcHT $adsiPool
     $obj.DomainFqdn = $adsiPool.psbase.InvokeGet("msRTCSIP-PoolDomainFQDN");

     return ($obj);
    }

    # Run the script
    #
    $pools = FindUCPools;
    return ($pools);

     

     


    jeudi 10 avril 2008 14:05