Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell-如何将导入csv用于SwitchParameter_Powershell - Fatal编程技术网

Powershell-如何将导入csv用于SwitchParameter

Powershell-如何将导入csv用于SwitchParameter,powershell,Powershell,我有一个用C#编写的自定义cmdlet,它将SwitchParameter作为其参数之一,我想使用导入csv执行我的cmdlet,我应该如何编写csv以便能够传递正确的SwitchParameter值 我尝试过真、假、0、1,CSV中有引号和没有引号,但它们似乎不起作用,我的代码中总是出现假 [Parameter(Mandatory = false, ValueFromPipelineByPropertyName=true)] public SwitchParameter Enable { ge

我有一个用C#编写的自定义cmdlet,它将
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存储为文件。