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..