#powershell #active-directory
Вопрос:
Я администрирую три домена (назовем их xx.company.local, xy.company.local и xz.company.local), и у меня есть учетные записи администратора домена для всех трех доменов.
Если я запускаю powershell от имени администратора домена xx, мне не нужно указывать параметр-Server для командлетов AD, но я делаю это при запуске PS в качестве двух других. Я предполагаю, что это связано с тем, что мой компьютер подключен только к домену xx.
Есть ли команда, которую я могу запустить при открытии сеансов powershell xy и xz, которая установит этот параметр-Server? (Я изучаю значения $PSHome и $PSDefaultParameterValues, но решил спросить, прежде чем тратить слишком много времени.)
Дополнительная мысль: у меня есть три ярлыка runas для моего графического интерфейса ADUC (mmc.exe %SystemRoot%system32dsa.msc), и единовременным шагом для доменов xy и xz было изменение домена. Я надеюсь, что есть аналогичный шаг, который я могу выполнить для стороны powershell.
Комментарии:
1. Что вы подразумеваете под открытием сессий xy и xz ? Подключаетесь ли вы к контроллеру домена в этих доменах или вызываете команду на удаленном сервере, подключенном к этим доменам? Если бы это было так, я не думаю, что было бы необходимо указывать параметр сервера.
2. открытие powershell с помощью runas с пользователем администратора домена для домена xy или xz
Ответ №1:
Таким образом, я смог изменить свой сценарий, так как никто не опубликовал ответ.
сначала я создал глобальную переменную в своем файле .psm1
$domain_controller = Get-ADDomainController -Discover -Service PrimaryDC
затем я создал новую функцию
function Set-DomainController {
[CmdletBinding()]
Param(
[ValidateSet(“xx”, ”xy”, ”xz”)]
[Parameter(Mandatory = $false, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
[string]
$xxxyxz
)
process {
if ($PSBoundParameters.ContainsKey('xxxyxz')) {
$script:domain_controller = Get-ADDomainController -Discover -Service PrimaryDC -Domain "$xxxyxz.company.local"
}
else {
Write-Output ""
Write-Output "You are currently using " $script:domain_controller.Hostname
Write-Output ""
Write-Output "Select a domain:"
Write-Output "[1] - xx.company.local"
Write-Output "[2] - xy.company.local"
Write-Output "[3] - xz.company.local"
Write-Output ""
$selection = Read-Host "Please make a selection"
switch ($selection) {
'1' {
$script:domain_controller = Get-ADDomainController -Discover -Service PrimaryDC -Domain xx.company.local
}
'2' {
$script:domain_controller = Get-ADDomainController -Discover -Service PrimaryDC -Domain xy.company.local
}
'3' {
$script:domain_controller = Get-ADDomainController -Discover -Service PrimaryDC -Domain xzcompany.local
}
}
Write-Output ""
Write-Output "You are currently using " $script:domain_controller.Hostname
Write-Output ""
}
}
}
Set-Alias -Name setdc -Value Set-DomainController
наконец, я просмотрел остальные функции в своем модуле и добавил -Server $script:domain_controller
их к каждому вызову Get-AD* на протяжении всего
это заняло несколько часов, но теперь все сделано … все еще ищу что-то получше …