2013-05-20 33 views
3

我有一個用C#編寫的自定義cmdlet,它需要SwitchParameter作爲它的參數之一,我想使用import-csv來執行我的cmdlet,我應該如何編寫我的csv,以便我我能夠通過正確的SwitchParameter值嗎?Powershell - 如何使用import-csv SwitchParameter

我已經試過真,假,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 -objects。因此,如果您使用01,則需要將其轉換爲intbool。例如:

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

就像我所說的。 'Import-CSV'將每個值作爲字符串輸入,因此如果需要特定類型,則需要轉換值。如果你真的想要使用上面的命令,那麼在你的'add-myData' cmdlet中執行轉換。 –

+0

我希望我的cmdlet接受switchparameter,所以我不願意讓它的字符串爲import-csv工作。鑑於該簽名仍爲switchparameter,我還有什麼其他選項?創建另一個可選參數,它以字符串格式接受相同的信息會令人困惑,那還有什麼?手動解析我的用戶是唯一的選擇嗎? –