Powershell-如何将导入csv用于SwitchParameter
我有一个用C#编写的自定义cmdlet,它将Powershell-如何将导入csv用于SwitchParameter,powershell,Powershell,我有一个用C#编写的自定义cmdlet,它将SwitchParameter作为其参数之一,我想使用导入csv执行我的cmdlet,我应该如何编写csv以便能够传递正确的SwitchParameter值 我尝试过真、假、0、1,CSV中有引号和没有引号,但它们似乎不起作用,我的代码中总是出现假 [Parameter(Mandatory = false, ValueFromPipelineByPropertyName=true)] public SwitchParameter Enable { ge
SwitchParameter
作为其参数之一,我想使用导入csv执行我的cmdlet,我应该如何编写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
当您使用导入CSV时,所有属性都是字符串对象。因此,如果使用
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
当然,我可以解析所有内容,但我没有任何方法可以让powershell自动进行转换?我只想发布导入Csv c:\data.Csv |像我说的那样添加MyDatas<代码>导入CSV将每个值作为字符串导入,因此如果需要特定类型,则需要强制转换值。如果确实要使用上面的命令,请在
add myData
cmdlet中执行强制转换。我希望我的cmdlet接受switchparameter,因此我不愿意将其设置为字符串,以便导入csv工作。如果签名仍然是参数,我还有什么其他选择?创建另一个可选参数,该参数以字符串格式获取相同的信息会让人困惑,那么还有什么呢?手动解析用户是否是唯一的选择?为什么不创建helper cmdlet?例如,执行转换的Convert myData
。例如导入Csv c:\data.Csv |转换myData |添加myData。或者,您可以创建一个helper cmdlet,该cmdlet可以为您转换并调用add mydata
。例如导入csv c:\data.csv |导入myData。MS在PS中几乎就是这样做的。导出CSV
和转换为CSV
使用与作业转换相同的帮助类。唯一的区别是导出Csv
还将Csv存储为文件。