2012-01-25 4 views
0

У меня есть командлет powershell, и я не могу заставить набор параметров работать. Этот командлет имеет 31 возможный параметр и может опускаться на два возможных пути обработки. Все 31 параметры являются необязательными, 18 являются общими для обоих путей, 9 уникальны для «правильного» пути и 4 уникальны для «левого» пути. То, что я пытаюсь выполнить, - использовать атрибуты ParameterSet powershell, чтобы указать, какой параметр можно использовать, когда. Но это не работает.Параметр PowerShell не распознается

Ниже приведена макет моей попытки. Имена изменены для защиты невинных.

[Parameter] 
public string SomeString1 { get; set; } 

[Parameter] 
public string SomeString2 { get; set; } 

[Parameter(ParameterSetName = "left")] 
public string LeftName { get; set; } 

[Parameter(ParameterSetName = "left")] 
public string LeftDomain { get; set; } 

[Parameter(ParameterSetName = "right")] 
public string RightID { get; set; } 

[Parameter(ParameterSetName = "right")] 
public string RightIP { get; set; } 

Так что, когда я запускаю это, я стараюсь, чтобы проверить мои списки параметров с помощью Get-Help, и все, что я вижу, это один большой комок параметров, когда он должен разделить их на два списка, один в том числе два " слева ", а также два неназванных, а другой -« правильные »параметры плюс неназванные.

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

Я попытался изменить некоторые/все параметры на обязательный, я попытался использовать DefaultParameterSetName в заголовке. Я пробовал удваивать наборы, например, включать набор с именем «both» и составлять каждую часть параметра этого набора. Я прочитал статью MSDN о наборах параметров, я прочитал первые 40 статей, которые google возвращает, но я не могу заставить их работать. Половина моей команды стояла за моим столом, наблюдая за тем, как я это делаю, и все они тоже в тупике.

Что я могу сделать, чтобы:

  • выяснить, почему он не распознает параметр устанавливает
  • сделать так, что он делает
  • предотвратить это в будущем
+0

В таком случае я бы начал комментировать параметры до тех пор, пока не найду ни оскорбительный параметр, либо обнаружил, что есть определенное количество параметров, которые возбуждают ошибку в PowerShell. Если вы обнаружите, что какой-то параметр вызывает проблему, отправьте код для этого параметра. –

+0

Я бы подумал о создании пользовательского объекта для отслеживания всех этих переменных. – Gisli

+0

Один из моих соседей предложил переосмыслить функциональность наборов параметров с помощью большого набора selects/ifs. Это, безусловно, будет самым быстрым решением. Возможно, я попробую это и дам вам знать, работает ли это. – jnwebster

ответ

0

Keith Hill, спасибо за подсказку - я пробовал комментировать все, кроме самых минимальных параметров, и заметил, что когда я запускал get-help в командлете, он все еще возвращал все параметры. Я знал, что что-то происходит, и выясняется, что файл справки не обновлялся при компиляции командлета.

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

Основной момент лица, но я получил его. Урок: всегда убедитесь, что ваша помощь автоматически генерируется.

Смежные вопросы