2013-05-20 2 views
3

У меня есть собственный командлет, написанный на C#, который принимает SwitchParameter как один из его аргументов, я хочу выполнить мой командлет с помощью import-csv, как мне написать свой csv, чтобы я я могу передать правильное значение SwitchParameter?Powershell - Как использовать import-csv для SwitchParameter

Я попытался True, False, 0, 1, с и без кавычек в CSV, однако они не кажется, что работать, я всегда получаю ложна в моем коде

[Parameter(Mandatory = false, ValueFromPipelineByPropertyName=true)] 
public SwitchParameter Enable { get; set; } 

Я бегу Powershell версии 2.0, команда, которую я хочу, чтобы выполнить это:

Import-Csv c:\data.csv | Add-MyData 

ответ

2

При использовании Import-CSV, все свойства string -Объекты. Поэтому, если вы используете 0 и 1, вам необходимо направить его на int, а также на номер bool. Пример:

test.csv

Name,Enabled 
"Hey",1 
"Lol",0 

Сценарий:

Import-Csv .\test.csv | % { $_.Enabled = [bool]($_.Enabled -as [int]); $_ } 
#You could also cast it with [bool]([int]$_.Enabled), I just like to mix it up :) 

Name Enabled 
---- ------- 
Hey True 
Lol False 

Вы можете передать, что к коммутатору, как:

#My test-func 
function testfunc ($Name, [switch]$Enabled) { 
    "$Name has switchvalue $Enabled" 
    } 

Import-Csv .\test.csv | % { 
    $_.Enabled = [bool]($_.Enabled -as [int]) 
    testfunc -Name $_.Name -Enabled:$_.Enabled 
    } 

Hey has switchvalue True 
Lol has switchvalue False 
+0

Конечно, я мог бы разобрать все, но я разве какой-либо способ powershell делает преобразование автоматически? Я просто хочу выпустить Import-Csv c: \ data.csv | add-MyData –

+0

Как я уже сказал. Импорт-CSV импортирует КАЖДОЕ значение в виде строк, поэтому вам нужно указывать значения, если вам нужны определенные типы. Если вы действительно хотите использовать вышеприведенную команду, выполните листинг внутри вашего командлета 'add-myData' –

+0

. Я хочу, чтобы мой командлет принимал switchparameter, поэтому я не хочу, чтобы строка для import-csv работала. Учитывая, что подпись остается коммутатором, какие у меня есть другие варианты? Создание другого необязательного параметра, который принимает ту же информацию в строковом формате, будет запутанным, так что еще? Является ли ручная проверка моего пользователя единственной альтернативой? –

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