Sunting # 3: Memperbarui dokumentasi referensi.
Sunting # 2: Mengedit sekali lagi karena saya menulis sesuatu di PS untuk melakukan persis apa yang Anda coba lakukan. Itu di bawah.
Saya akan melanjutkan dan menegaskan bahwa tidak ada cara Powershell Friendly (tm) untuk melakukannya saat ini. Tapi tentu saja Anda masih bisa menggunakan Powershell untuk membuat kueri LDAP diperlukan untuk melihat opsi ini jika Anda benar-benar menginginkannya. Lihat options
atribut NTDS Settings
objek dari setiap server yang terkait dengan situs AD:
Itu adalah atribut yang tepat, yang merupakan bitmask, yang berfungsi pada repadmin.exe. Repadmin.exe berisi penerjemah bitmask yang ramah dalam kodenya. Seperti halnya snap-in MMC ADSIEdit. Namun, Anda harus membuat ulang penerjemah bitmask itu di Powershell.
Sebagai contoh, Repadmin /options <DC> [{+|-} IS_GC]
adalah perintah yang valid, dan sekarang kita tahu persis bit mana yang beroperasi.
Berikut adalah dokumentasi MSDN yang relatif jelek pada options
atribut.
Dokumentasi MSDN yang lebih baik pada options
atribut.
Opsi Atribut
Bitfield, di mana arti bit bervariasi dari objectClass ke objectClass. Dapat terjadi pada Inter-Site-Transport, NTDS-Connection, NTDS-DSA, NTDS-Site-Settings, dan objek-situs-Link Site.
Dan di sini adalah contoh mencari opsi menggunakan operator aturan pencocokan old-school:
(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))
Filter ini menggunakan LDAP_MATCHING_RULE_BIT_AND operator aturan pencocokan (1.2.840.113556.1.4.803) untuk menemukan objek nTDSDSA yang memiliki bit orde rendah yang diatur dalam bitmask atribut options. Bit urutan rendah, yang sesuai dengan konstanta NTDSDSA_OPT_IS_GC didefinisikan dalam Ntdsapi.h, mengidentifikasi objek nTDSDSA dari server Katalog Global. Untuk informasi lebih lanjut tentang aturan yang cocok, lihat Sintaksis Filter Pencarian.
Oh boy apakah itu terdengar menyenangkan!
Beberapa nilai lain untuk bitmask:
Jadi dengan itu Anda harus memiliki informasi yang cukup untuk menggulung Get-ADSiteOptions
Cmdlet Anda sendiri ... jika Anda ingin saya menulis satu untuk Anda, saya akan, dengan biaya yang sangat sederhana ...;)
Sunting: Berikut adalah tautan Microsoft, Repadmin untuk Para Ahli , yang merinci perbedaan antara options
dan siteoptions
subperintah dari repadmin:
Dengan menggunakan sub-perintah opsi situs, kita bisa mengubah atribut opsi yang disimpan pada objek pengaturan situs NTDS.
Adapun bitmap itu? Apakah bahkan didokumentasikan? Tidak yakin. Jika Anda dapat memberitahu saya apa FORCE_KCC_WHISTLER_BEHAVIOR
artinya dalam sebuah wawancara, saya akan mempekerjakan Anda di tempat. Anda pamer seperti itu, MDMarra. ;)
Jadi hanya untuk meringkas, options
atribut pada CN=NTDS Settings
objek untuk setiap pengontrol domain sesuai dengan opsi spesifik DC, yaitu repadmin <DC> /options
, sedangkan options
atribut pada CN=NTDS Site Settings
objek di bawah setiap situs sesuai dengan repadmin /siteoptions
.
Jadi, untuk akhirnya menjawab pertanyaan Anda. Mendapatkan opsi situs secara khusus, bukan opsi DC:
ForEach($Site In (Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext))
{
Get-ADObject "CN=NTDS Site Settings,$($Site.DistinguishedName)" -Properties Options
}
Jika tidak ada opsi situs yang ditetapkan, Powershell tidak akan mengembalikannya. Anda mungkin bisa menyederhanakan kode di atas sedikit tetapi menggunakan bahasa yang Anda mulai. Setelah mencari terlalu banyak, akhirnya saya menemukan dokumentasi di situs bitmask :
Jadi untuk IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED
yang Anda berikan sebagai contoh, Anda akan mencari nilai 0x00000010
untuk options
atribut.
Dan dari menjalankan cuplikan Powershell:
Sunting # 2: Saya menulis sesuatu kepada Anda hari ini:
#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)}
}
}
}
}
Dan ini dia beraksi: