3

我有一个用 C# 编写的自定义 cmdlet,它SwitchParameter作为它的参数之一,我想使用 import-csv 执行我的 cmdlet,我应该如何编写我的 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
4

1 回答 1

2

使用时Import-CSV,所有属性都是string-objects。因此,如果您使用0and 1,则需要将其转换为int, 和 to bool。前任:

测试.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
于 2013-05-20T10:14:02.677 回答