这看起来应该非常简单但我无法想象如何去做。
如何从多个变量/字符串创建自定义PowerShell对象?
我有3个变量,如下所示。
$name = @'
Bob
Kate
John
'@
$age = @'
35
12
57
'@
$gender = @'
Male
Female
Male
'@
如何将其转换为PowerShell对象,如下所示?
输出
name age gender
---- --- ------
bob 35 male
kate 12 female
john 57 male
答案 0 :(得分:0)
首先将所有字符串拆分为数组,然后按索引迭代一个数组,并通过new-object psobject
和$object|add-member -type noteproperty
创建变量。请注意,您最好最初拥有此类数据的结构,否则错过或添加的CRLF可能会弄乱您的数据。
$arrname=$name.split("`r`n")
$arrage=$age.split("`r`n")
$arrgender=$gender.split("`r`n")
foreach ($i in 0..($arrname.length-1)) {
$ob=new-object psobject
$ob | add-member -type noteproperty -name "Name" -value $arrname[$i]
# add other fields similarly
$ob
}
答案 1 :(得分:0)
你可以尝试一下,我不为此感到自豪,但它确实起到了作用。
$psobj = ($name.Split("`n")) | % {[PSCustomObject]@{name=$_}} | % {$n=0}{Add-Member -Name "age" -InputObject $_ -MemberType NoteProperty -Value $($age.Split("`n"))[$n];Add-Member -Name "gender" -InputObject $_ -MemberType NoteProperty -Value $($gender.Split("`n"))[$n];$n++;$_}
我创建了一个与名称相对应的对象,并使用Add_Member添加其他成员。
答案 2 :(得分:0)
这可行,但如前所述,您的数据需要完美格式化。我不得不抛弃.trim()来摆脱一些空白区域。
$name = @'
Bob
Kate
John
'@
$age = @'
35
12
57
'@
$gender = @'
Male
Female
Male
'@
$myNames = $name.Split("`n").Trim()
$myAges = $age.Split("`n").Trim()
$myGenders = $gender.Split("`n").Trim()
$myArray = @()
for ($i = 0; $i -lt $mynames.count; $i++)
{
$myObj = "" | select Name,Age,Gender
$myObj.Name = $myNames[$i]
$myObj.Age = $myAges[$i]
$myobj.Gender = $myGenders[$i]
$myArray += $myObj
}
$myArray