如何为所有 PowerShell AD cmdlet 设置默认域控制器?

Mas*_*imo 6 powershell active-directory domain-controller

ActiveDirectory模块中的所有 PowerShell cmdlet 都支持使用-server参数针对特定域控制器运行;但是有什么方法可以设置默认 DC 以用于所有与 AD 相关的操作,或者我是否需要在每个命令上指定它,如果我真的关心我正在使用哪个 DC(在涉及复制延迟时很常见) )?

jbs*_*ith 5

如果您使用的是 PowerShell 版本 3,则可以使用新的自动变量 $PSDefaultParameterValues 为 AD 模块 cmdlet 上的服务器参数设置默认值。你可以跑

Get-Help about_Parameters_Default_Values
Run Code Online (Sandbox Code Playgroud)

有关此变量的更多详细信息。

在您的特定情况下,您可以像这样设置变量:

$PSDefaultParameterValues = @{"*-AD*:Server"='YOUR-CHOSEN-DC'}
Run Code Online (Sandbox Code Playgroud)

另一个适用于版本 2 或 3 的选项是使用 AD 模块的提供程序来创建新的 PSDrive。

默认情况下,当您导入 AD 模块时,它会创建一个连接到本地域的“AD:”PSDrive。您可以使用相同的提供程序创建新的 PSDrive,指定要连接的特定域控制器。然后,当您从该 PSDrive 的上下文中运行 AD cmdlet 时,它们将使用该连接。您可以像这样创建一个新的 PSDrive:

New-PSDrive -Name <name of the drive> -PSProvider ActiveDirectory -Root "<DN of the partition/NC>" –Server <server or domain name (NetBIOS/FQDN)[:port number]> -Credential <domain name>\<username>
Run Code Online (Sandbox Code Playgroud)

然后cd <name of drive>:,当您运行 cmdlet 时,它们将使用您在 New-PSDrive cmdlet 中指定的域控制器。

  • @{"*-AD*:Server"='YOUR-CHOSEN-DC'} 的一个缺点是可能存在其他以“AD”开头的非 AD cmdlet,例如 Get-AdmPwdPassword 等 LAPS PowerShell cmdlet 。目前,这些是我找到的唯一的,幸运的是没有以“ADM”开头的 AD cmdlet,因此我通过使用“*-AD[a-ln-z]*:Server”,$ 解决了这个问题((Get-ADDomain).PDCEmulator) 作为我的值,它会跳过以“ADM”开头的任何 cmdlet 名词。我尝试在构造中仅使用 *-AD[^m]* 但否定不起作用,不知道为什么。 (2认同)