Я использую Powershell 4.0.
Я пытаюсь написать командлет, и в этом командлете я хотел бы использовать расширенные наборы параметров, чтобы были доступны определенные параметры в зависимости от того, какие параметры выбраны. Эта конкретная функция по сути и в конечном итоге будет Get-ADComputer, но с -SearchBase, предварительно запрограммированным для определенных опций.
У меня всего 6 параметров. 2 - строки ($ ComputerName или $ IpAddress), 1 - целое число ($ OULevel) и 3 переключателя ($ ComputerOU, $ AllCompany, $ List).
У меня есть набор параметров для ComputerName и IPAddress, я хотел бы, чтобы пользователь мог вводить один или другой - я думаю, что я понял это довольно просто. Тем не менее, я хотел бы, чтобы $ OULevel, $ ComputerOU и $ AllCompany были исключительными, если одно используется, другое не должно использоваться. Список $ должен оставаться доступным в каждом сценарии.
Я пробовал разные варианты наборов параметров безрезультатно. Вот как сейчас выглядит мой сценарий с некоторой обрезанной спиной:
function Get-CompanyADComputer{
[CmdletBinding(DefaultParametersetName="ComputerName")]
Param(
[Parameter(Mandatory=$true,
ParameterSetName="ComputerName",
Position=0,
ValueFromPipeline=$false,
HelpMessage='Enter a computer name to search in ActiveDirectory.')]
[Alias('Computer','CN')]
[string]$ComputerName,
[Parameter(Mandatory=$true,
ParameterSetName="IPAddress",
Position=0,
ValueFromPipeline=$false,
HelpMessage='Enter an IP address to search in ActiveDirectory.')]
[Alias('IPv4Address','IPv6Address')]
[string]$IPAddress,
[Parameter(Mandatory=$false,
HelpMessage='Enter a number between 0 and 8. 0 is your current OU Container.')]
[ValidateRange(0,8)]
[int]$OULevel = 0,
[Parameter()]
[Switch]$ComputerOU,
[Parameter()]
[Switch]$AllCompany,
[Parameter()]
[Switch]$List
)
Если вам интересно, что наша AD организована по местоположению, затем по категории (компьютер, пользователь, группы, контакты и т.д.), А затем она становится более детальной в каждом подразделении ниже. Этот скрипт обнаруживает OU вашего компьютера и начинает поиск там. Цель $ OULevel - если пользователь указывает другое число, поиск начинается в другом OU, а затем выполняется рекурсивный поиск. Цель $ ComputerOU состоит в том, чтобы поиск выполнялся в подразделении «Компьютеры по умолчанию» вместо всего домена или вашего местоположения. Целью $ AllCompany является использование поиска по умолчанию для всего домена вместо любого другого выбора или подразделения.
Любое руководство приветствуется. Кажется, я не смогу овладеть этим без того, чтобы мой сценарий не был полностью запутанным.