Конкретное подразделение для каждого домена - PullRequest
1 голос
/ 03 июня 2019

Я создаю сценарий для извлечения рабочих станций из каждого домена из определенного подразделения в каждом домене.«Конкретное подразделение» уникально для каждого домена.

function Get-Workstations {
    param (
      [Parameter(Position = 0, Mandatory = $true)]
      [ValidateSet("domain1", "domain2", "domain3", "domain4", "domain5", 
      "domain5")]
    [String[]]$Domain
    )

$domain1OU = "OU=Computers,OU=Corporate,DC=domain1,DC=com,DC=au"
$domain2OU = "OU=Workstations,OU=Corporate2,DC=domain2,DC=com,DC=au"
$domain3OU = "OU=AccountsWS,OU=MyCorporate,DC=domain3,DC=com,DC=au"
$domain4OU = "OU=Dev,OU=WS,OU=Company,DC=domain4,DC=com,DC=au"
$domain5OU = "OU=Computers,OU=WebDevs,DC=domain5,DC=com,DC=au"

Begin {
    $DomainLookup = @{
        domain1 = "domain1.com.au"
        domain2 = "domain2.com.au"
        domain3 = "domain3.com.au"
        domain4 = "domain4.com.au"
        domain5 = "domain5.com.au"
    }

}
Process {
    ForEach ( $DName in $Domain ) {
        If ( $DomainLookup.Contains($Domain) ) {
            Write-Host -ForegroundColor Green "Domain Name $DName found"

            if ( $DName -eq $DomainLookup.Values('domain1') ) {
                $workstations = Get-ADComputer -Server adc1.$domain1 -SearchBase $domain1OU -Filter * | Sort-Object -Property Name | Select-Object Name
            }

        }
    }

    #$workstations = Get-ADComputer -SearchBase $domain1OU -Filter * | Sort-Object -Property Name | Select-Object Name

}
End {
    return $workstations
}

}

Вышеприведенная функция является частью более мощного модуля powershell, который я пытаюсь создать для нашей компании.Пользователь должен вызвать функцию из оболочки и указать один или несколько доменов с параметром -Domain и получить список этих рабочих станций.

1 Ответ

0 голосов
/ 03 июня 2019

Пожалуйста, внесите следующие изменения в свой код:

Process {
    ForEach ( $DName in $Domain ) {
        If ( $DomainLookup.Contains($DName) ) {
            Write-Host -ForegroundColor Green "Domain Name $DName found"

            if ( $DomainLookup['domain1'].Contains($DName) ) {
                $workstations = Get-ADComputer -Server ("{0}.{1}" -f "adc1",$domainlookup['domain1']) -SearchBase $domain1OU -Filter * |
                                Sort-Object -Property Name | Select-Object Name
            }
        }
    }
}

Поскольку $Domain может содержать массив значений, вам нужно будет проверить каждое значение объекта в этом массиве в пределах * 1005 объекта хеш-таблицы* метод.В вашем случае это значение представляется $DName.

. В первом операторе If метод .Contains() проверяет значение ключа, а не значение в паре ключ-значение.См. About_Hash_Tables для ссылки на ключи и значения хеш-таблицы.См. Метод Hashtable .Contains (Object) , чтобы узнать, как работает метод Hashtable.Contains.

При ссылке на значение определенного ключа вы можете сделать это как минимум двумя способами.Одним из способов является использование имени ключа в качестве именованного индекса, например $DomainLookup['Domain1'].Второй способ - использовать имя ключа в качестве имени свойства, например $DomainLookup.Domain1.В любом случае, переменная может использоваться в качестве имени индекса или имени свойства.Например, можно использовать $DomainLookup.$DName.

Имейте в виду, что во втором операторе if метод .Contains() относится к классу String.В этом методе выполняется сравнение подстроки строкового значения, полученного при обращении к значению определенного ключа.См. String.Contains метод о том, как метод .Contains(Value) работает из класса String.

Команда Get-ADComputer нуждалась в изменении, в частности, значение, переданное параметру -Server.Поскольку вы хотите добавить значение из хеш-таблицы в строку adc1, вам необходимо правильно получить это значение.Ваш исходный оператор может работать, но вам нужно будет присвоить $domain1 со значением из вашей хеш-таблицы.

В качестве примечания, вам, вероятно, не понадобятся вложенные операторы if.Я оставил их там на случай, если ваш код сделает больше, чем опубликовано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...