Могу ли я установить параметр «-Server» для использования с командлетами Active Directory для каждого сеанса PS?

#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* на протяжении всего

это заняло несколько часов, но теперь все сделано … все еще ищу что-то получше …