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

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

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

答案1

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

Get-Help about_Parameters_Default_Values

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

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

$PSDefaultParameterValues = @{"*-AD*:Server"='YOUR-CHOSEN-DC'}

适用于版本 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>

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

答案2

我知道该帖子已经很旧了,但我想分享我对 jbsmith 发布的解决方案所做的事情,以使其仅适用于 ActiveDirectory 模块命令:

$Module = "ActiveDirectory"
$Server = Read-Host "Enter server to use for $Module"
$i=0
foreach ($CommandName in (Get-Command -ParameterName Server -Module ActiveDirectory).Name) {
    $PSDefaultParameterValues += @{"$($CommandName):Server"=$Server;$i++}
}
foreach ($CommandName in (Get-Command -ParameterName DomainController -Module ActiveDirectory).Name) {
    $PSDefaultParameterValues += @{"$($CommandName):DomainController"=$Server;$i++}
}

相关内容