【问题标题】:Create custom PowerShell Objects from multiple variable从多个变量创建自定义 PowerShell 对象
【发布时间】:2016-01-26 09:57:49
【问题描述】:

这看起来应该很简单,但我不知道该怎么做。

如何从多个变量/字符串创建自定义 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 

【问题讨论】:

    标签: string powershell


    【解决方案1】:

    您首先将所有字符串拆分为数组,然后按索引迭代一个数组并通过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
    }
    

    【讨论】:

    • 当您运行代码时,您会得到 数组索引表达式丢失或无效。
    • 为什么要在值之间添加换行符。
    • @Ishan 这就是Format-Table 的工作方式。您不应使用原始输出进行数据处理,如果需要,请改用Format-List
    【解决方案2】:

    这可行,但如前所述,您的数据需要完美格式化。我不得不使用 .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
    

    【讨论】:

      【解决方案3】:

      你可以试试这个,我并不为此感到骄傲,但它确实有效。

      $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 添加其他成员。

      【讨论】:

      • 为什么将 ... 添加到 PowerShell 对象输出。
      • @Ishan 我只用名称创建了一个对象,并使用 Add_Member 添加其他成员。
      • @Ishan 可能是您的换行符由``rn`` 而不仅仅是``n ``. You can use name=$_.Trim()` 而不是name=$_ 组成确保删除任何尾随空格
      猜你喜欢
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多