Suivez les mis à jour de l'Schema avec Powershell

Lorsque je changer le schéma dans une grande forêt, c’est gentil de suivre le progrès de le changement pendant la réplication autour de forêt. J’ai voulais de crèer un script qui rapidement donner la version actuelle de schéma pour plus de 100 contrôleurs de domaine.

Si vous voulez sauter les détails Tèlecharger Track-LyncSchema.ps1

En commençant avec quelques scripts que j’avais déjà construit, foreach-parallel qui peut exécuter en parallèle. get-forestDomainControlles pour crée un liste de tous les contrôleurs de domaine et get-LdapData pour faire les questions de LDAP rapidement sans le module Active Directory.

Import-module ActiveDirectory          
function get-ForestDomainControllers () {...}
function get-ldapData ($ldapfilter,$searchRoot,$Server,[switch]$GC,$pageSize=1000,$Properties="*",$sizeLimit=0,[switch]$verbose,$o365FilterAddress){...}
function ForEach-Parallel () {...}

Tout d’abord, on a besoin de mettre tous les CDs dans un tableau, cela peut prendre beaucoup de temps pour les grands domaines. On va obtenir la liste seulement si $DCs est vide - comme ça, on peut exécuter le script plusieurs fois et seulement faire cette étape une fois.

if ($DCs -eq $null) {$DCs = get-ForestDomainControllers}

Ensuite, on va trouver la partition de schéma - encore, on va le faire seulement une fois. Le valeur de PartitionsContainer sur l’objet de forêt est comme DC=Partitions,CN=Configuration,DC=Domain,DC=com. On va utiliser le -replace opérateur pour remplacer CN=Partitions avec CN=Schema.

if ($SchemaPartion -eq $null) {$SchemaPartion = (get-adforest).partitionscontainer -replace 'CN=Partitions','CN=Schema'}

Pour obtenir le version de schéma de Lync et Skype for Business, on prendre le rangeUpper attribut de l’objet ms-RTC-SIP-SchemaVersion. Pour faire ça, on utiliser get-ldapdata avec le paramètre searchroot qui représente l’objet ms-RTC-SIP-SchemaVersion. Ici, $_ représente le serveur actuellement utilisé.

$Value = get-ldapdata  -searchRoot "CN=ms-RTC-SIP-SchemaVersion,$SchemaPartion" -properties rangeupper -server $_ | select -expand rangeupper

ForEach-Parallel utilisé threads de travail pour le parallèlisme, donc on a besoin de emporter des functions dans les threads et tous les valeurs que on veut. $SchemaPartition est passer par le paramètre -Arguments, ensuite le premier ligne de la code est $SchemaPartition=$args[0]

En fonction de la valeur, nous allons retournerons des textes qui va describir la version, pour ça, on utilisé l’instruction switch.

switch ($value) {
	'1006' {$value = "LCS 2005 [$value]"}
	'1007' {$value = "OCS 2007 R1 [$value]"}
	'1008' {$value = "OCS 2007 R2 [$value]"}
	'1100' {$value = "Lync Server 2010 [$value]"}
	'1150' {$value = "Skype for Business 2015 [$value]"}
	default: {$value = "Unknown schema value or no value [$value]"}
}

Alors, nous exportons le valeur dans une objet pour traitement dans le pipeline.

new-object psobject -Property @{server=$_;LyncSchemaVersion=$value}

Finalement la fonction qui faire tous les travailles est comme ça. Le cmdlet foreach-parallel gagner l’autre fonction get-ldapdata par le paramètre -ImportFunctions.

function track-LyncSchema {
    $DCs.hostname |  %p{
        $SchemaPartition= $args[0]
        $Value = get-ldapdata  -searchRoot "CN=ms-RTC-SIP-SchemaVersion,$SchemaPartition" -properties rangeupper -server $_ | select -expand rangeupper
        switch ($value) {
            '1006' {$value = "LCS 2005 [$value]"}
            '1007' {$value = "OCS 2007 R1 [$value]"}
            '1008' {$value = "OCS 2007 R2 [$value]"}
            '1100' {$value = "Lync Server 2010 [$value]"}
            '1150' {$value = "Skype for Business 2015 [$value]"}
            default {$value = "Unknown [$value]"}
        }

        new-object psobject -Property @{server=$_;LyncSchemaVersion=$value}
    } -ImportFunctions get-ldapData -arguments $schemaPartition
}

On peut exécuter le script par la commande de ligne pour obtenir une liste de tous les serveurs et leurs versions des schéma.

. .\track-LyncSchema.ps1
server                        LyncSchemaVersion
------                        -----------------
TestDC100.wrish.com           Skype for Business 2015 [1...
TestDC101.wrish.com           Skype for Business 2015 [1...
TestDC213.wrish.com           Skype for Business 2015 [1...
TestDC12.wrish.com            Skype for Business 2015 [1...
...

Car on a construit les scripts pour exporter les objets, on peut facilement voir combien restent a réplicater.

. .\track-lyncschema.ps1 | group LyncSchemaVersion
Count Name                       Group
----- ----                       -----
  202 Skype for Business 2010... {@{server=Test..
   20 Lync Server 2010 [1100]    {@{server=Test..

Tèlecharger Track-LyncSchema.ps1