Edit # 3: Mise à jour de la documentation de référence.
Edit # 2: Editing une fois de plus parce que j'ai écrit quelque chose dans PS pour faire exactement ce que vous essayez de faire. C'est en bas.
Je vais aller de l'avant et affirmer qu'il n'y a pas de façon de faire Powershell Friendly (tm) pour le moment. Mais bien sûr, vous pouvez toujours utiliser Powershell pour rendre la requête LDAP nécessaire pour voir ces options si vous le souhaitez vraiment. Découvrez l' options
attribut de l' NTDS Settings
objet de chaque serveur associé à un site AD:
Il s'agit de l'attribut exact, qui est un masque de bits, sur lequel repadmin.exe fonctionne. Repadmin.exe contient un traducteur de masque de bits convivial dans son code. Tout comme le composant logiciel enfichable MMC ADSIEdit. Cependant, vous devrez recréer ce traducteur de masque de bits dans Powershell.
Par exemple, Repadmin /options <DC> [{+|-} IS_GC]
est une commande valide, et maintenant nous savons exactement quel bit sur lequel elle opère.
Voici la documentation MSDN relativement merdique sur l' options
attribut.
Meilleure documentation MSDN sur l' options
attribut.
Attribut d'options
Un champ de bits, où la signification des bits varie de objectClass à objectClass. Peut se produire sur le transport inter-sites, la connexion NTDS, NTDS-DSA, NTDS-Site-Settings et les objets Site-Link.
Et voici un exemple de recherche d'options à l'aide d'opérateurs de règles de correspondance à l'ancienne:
(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))
Ce filtre utilise l'opérateur de règle de correspondance LDAP_MATCHING_RULE_BIT_AND (1.2.840.113556.1.4.803) pour rechercher des objets nTDSDSA dont le bit de poids faible est défini dans le masque de bits de l'attribut options. Le bit de poids faible, qui correspond à la constante NTDSDSA_OPT_IS_GC définie dans Ntdsapi.h, identifie l'objet nTDSDSA d'un serveur de catalogue global. Pour plus d'informations sur les règles de correspondance, voir Syntaxe du filtre de recherche.
Oh mon garçon, ça a l'air amusant!
Quelques autres valeurs pour le masque de bits:
Donc, avec cela, vous devriez avoir suffisamment d'informations pour rouler votre propre Get-ADSiteOptions
Cmdlet ... si vous voulez que j'en écrive un pour vous, je le ferai, pour une somme très modique ...;)
Edit: Voici le lien Microsoft, Repadmin for Experts , qui détaille la différence entre les sous options
- siteoptions
commandes et de repadmin:
En utilisant la sous-commande siteoptions, nous pourrions changer l'attribut d'options stocké sur l'objet Paramètres de site NTDS.
Quant à ce bitmap? Est-il même documenté? Pas certain. Si vous pouvez me dire ce que FORCE_KCC_WHISTLER_BEHAVIOR
signifie dans une interview, je vous embaucherai sur place. Vous êtes une telle démonstration, MDMarra. ;)
Donc, pour résumer, l' options
attribut sur l' CN=NTDS Settings
objet pour chaque contrôleur de domaine correspond aux options spécifiques au DC, c'est-à-dire repadmin <DC> /options
, tandis que l' options
attribut sur l' CN=NTDS Site Settings
objet sous chaque site correspond repadmin /siteoptions
.
Donc, pour enfin répondre à votre question. Obtenir spécifiquement des options de site, pas des options DC:
ForEach($Site In (Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext))
{
Get-ADObject "CN=NTDS Site Settings,$($Site.DistinguishedName)" -Properties Options
}
Si aucune option de site n'est définie, Powershell ne les renvoie pas. Vous pourriez probablement simplifier un peu le code ci-dessus, mais cela utilise le langage avec lequel vous avez commencé. Après beaucoup trop de recherches, j'ai finalement trouvé la documentation sur le bitmask des options du site :
Donc, pour IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED
cela que vous avez donné comme exemple, vous recherchez une valeur de 0x00000010
pour l' options
attribut.
Et en exécutant l'extrait Powershell:
Edit # 2: Je vous ai écrit quelque chose aujourd'hui:
#Require -Version 3
#Require -Module ActiveDirectory
Function Get-ADSiteOptions
{
<#
.SYNOPSIS
This Cmdlet gets Active Directory Site Options.
.DESCRIPTION
This Cmdlet gets Active Directory Site Options.
We can fill out the rest of this comment-based help later.
.LINK
http://myotherpcisacloud.com
.NOTES
Written by Ryan Ries, October 2013. ryanries09@gmail.com.
#>
[CmdletBinding()]
Param()
BEGIN
{
Set-StrictMode -Version Latest
# This enum comes from NtDsAPI.h in the Windows SDK.
# Also thanks to Jason Scott for pointing it out to me. http://serverfault.com/users/23067/jscott
Add-Type -TypeDefinition @"
[System.Flags]
public enum nTDSSiteSettingsFlags {
NTDSSETTINGS_OPT_IS_AUTO_TOPOLOGY_DISABLED = 0x00000001,
NTDSSETTINGS_OPT_IS_TOPL_CLEANUP_DISABLED = 0x00000002,
NTDSSETTINGS_OPT_IS_TOPL_MIN_HOPS_DISABLED = 0x00000004,
NTDSSETTINGS_OPT_IS_TOPL_DETECT_STALE_DISABLED = 0x00000008,
NTDSSETTINGS_OPT_IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED = 0x00000010,
NTDSSETTINGS_OPT_IS_GROUP_CACHING_ENABLED = 0x00000020,
NTDSSETTINGS_OPT_FORCE_KCC_WHISTLER_BEHAVIOR = 0x00000040,
NTDSSETTINGS_OPT_FORCE_KCC_W2K_ELECTION = 0x00000080,
NTDSSETTINGS_OPT_IS_RAND_BH_SELECTION_DISABLED = 0x00000100,
NTDSSETTINGS_OPT_IS_SCHEDULE_HASHING_ENABLED = 0x00000200,
NTDSSETTINGS_OPT_IS_REDUNDANT_SERVER_TOPOLOGY_ENABLED = 0x00000400,
NTDSSETTINGS_OPT_W2K3_IGNORE_SCHEDULES = 0x00000800,
NTDSSETTINGS_OPT_W2K3_BRIDGES_REQUIRED = 0x00001000 }
"@
ForEach($Site In (Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext))
{
$SiteSettings = Get-ADObject "CN=NTDS Site Settings,$($Site.DistinguishedName)" -Properties Options
If(!$SiteSettings.PSObject.Properties.Match('Options').Count -OR $SiteSettings.Options -EQ 0)
{
# I went with '(none)' here to give it a more classic repadmin.exe feel.
# You could also go with $Null, or omit the property altogether for a more modern, Powershell feel.
[PSCustomObject]@{SiteName=$Site.Name; DistinguishedName=$Site.DistinguishedName; SiteOptions='(none)'}
}
Else
{
[PSCustomObject]@{SiteName=$Site.Name; DistinguishedName=$Site.DistinguishedName; SiteOptions=[Enum]::Parse('nTDSSiteSettingsFlags', $SiteSettings.Options)}
}
}
}
}
Et le voici en action: