让我们想象一下我有这个功能:
function Get-HasFoo{
param(
[Parameter(
Mandatory=$True,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$True)]
[bool]$Foo
)
process {
Write-Host "`$Foo is $Foo"
}
}
如果我明确指定我的参数,它可以工作:
Get-HasFoo -Foo $true
$Foo is True
但是,如果值来自CSV导入,则不会:
$payload = ConvertFrom-Csv "Foo
True
False"
$payload | Get-HasFoo
我收到此错误:
Get-HasFoo:无法处理参数' Foo'的参数转换。无法转换值" System.String"输入" System.Boolean"。布尔参数仅接受 布尔值和数字,例如$ True,$ False,1或0。
有没有办法从csv导入中自动转换值?
[edit] 我的目标是从CSV文件中提供PowerShell功能(使用Excel编辑)。函数可以有多个参数。
[编辑] 我还尝试将csv绑定到自定义类型:
$typeDef = "public class HasFooDef {
public bool Foo { get; set; }
}"
Add-Type $typeDef
$payload = ConvertFrom-Csv "#TYPE HasFooDef
Foo
True
False"
但错误存在
答案 0 :(得分:0)
Import-Csv
会生成一个包含 string 属性的对象列表,这些属性与 bool 参数不相称。您需要将字符串转换为实际的布尔值,以使输出适用于您的函数:
$payload = ConvertFrom-Csv "Foo
True
False" | Select-Object @{n='Foo';e={[Convert]::ToBoolean($_.Foo)}}
$payload | Get-HasFoo