Как передать хеш-таблицу в словарь ожидающих командлетов? - PullRequest
0 голосов
/ 12 февраля 2019

Я написал небольшой командлет PowerShell в C #, который ожидает параметр словаря.Как структурировать HashTable (или другой объект) в сценарии PowerShell, чтобы я мог передать его в качестве параметра в мой командлет?

Я попытался создать HashTable в своем сценарии PowerShell следующим образом:

$dic = @{
    "Key1" = 1,2,3;
    "Key2" = "A","B","C";
}

И затем отправьте это в мой командлет:

$props | Add-Properties

Мой командлет:

public class AddProps : PSCmdlet {
    [Parameter(ValueFromPipeline = true, Mandatory = true)]
    public Dictionary<string, object[]> Props {get; set;}

    protected override void ProcessRecord() {
        DoSomethingWithProps(Props);
    }
}

Я ожидал, что смогу написать короткий сценарий PowerShell, например так:

$dic = @{
    "Key1" = 1,2,3;
    "Key2" = "A","B","C";
}

$props | Add-Properties

Однако, когда я пытаюсь это сделать, я получаю эту ошибку:

Объект ввода не может быть привязан ни к каким параметрам команды, так как команда не принимает конвейерный вводили вход и его свойства не соответствуют ни одному из параметров, которые принимают конвейерный ввод

Я проверил тип $props, и это действительно HashTable.Посмотрев на другие вопросы, связанные с этой проблемой ввода конвейера и с тем, как создать HashTable в PowerShell, я все еще не понимаю, что здесь происходит неправильно.

1 Ответ

0 голосов
/ 12 февраля 2019

Вместо этого вы можете решить эту проблему с помощью интерфейсов, если не хотите менять тип на Hashtable:

PS> [hashtable].GetInterfaces()

IsPublic IsSerial Name
-------- -------- ----
True     False    IDictionary
True     False    ICollection
True     False    IEnumerable
True     False    ISerializable
True     False    IDeserializationCallback
True     False    ICloneable

[Parameter(ValueFromPipeline = true, Mandatory = true)]
public IDictionary Props { get; set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...