【发布时间】:2015-09-29 22:33:40
【问题描述】:
假设我有这个功能:
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 导入中自动转换值?
[编辑] 我的实际目标是从 CSV 文件(用 Excel 编辑)提供 PowerShell 函数。函数可以有多个参数。
[编辑]我还尝试将 csv 绑定到自定义类型:
$typeDef = "public class HasFooDef {
public bool Foo { get; set; }
}"
Add-Type $typeDef
$payload = ConvertFrom-Csv "#TYPE HasFooDef
Foo
True
False"
但错误仍然存在
【问题讨论】:
-
你想做什么?这里 $payload 是一个 psobject,具有一个属性:foo 和 2 个值:true 和 false。这不能转换为布尔值
-
@Kayasax:不,payload 是一个自定义 PSObject 数组,具有一个属性
Foo:$payload | % { $_.Foo }输出True\nFalse,$payload -is [array]输出 true。Foo属性是字符串类型,但我可以确保它只包含真或假。 -
$payload.foo.count = 2
-
@Kayasax,这是由于 powershell 的一个很好的功能,它允许将对象数组的子属性投影到仅具有此属性值的新数组
标签: powershell