【问题标题】:Converting Custom Object arrays to String arrays in Powershell在 Powershell 中将自定义对象数组转换为字符串数组
【发布时间】:2013-01-15 15:59:53
【问题描述】:

所以我正在调整一些 Powershell 库,我想以最好的方式解决一个简单的问题.....

简而言之,我在一个数组中有一些自定义 PSObject:

$m1 = New-Object PSObject –Property @{Option="1"; Title="m1"}
$m2 = New-Object PSObject –Property @{Option="2"; Title="m2"}
$m3 = New-Object PSObject –Property @{Option="3"; Title="m3"}

$ms = $m1,$m2,$m3

我希望转换为字符串数组....理想情况下是单个字符串数组,其中每个项目都有一个连接属性的条目。 即

“1m1”、“2m2”、“3m3”

我试过$ms | Select-Object Option,Title$ms | %{ "O: $_.Option T: $_.Title "} 但他们给了我 PSObject 的数组(再次)或数组的数组。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    这会给你你想要的:

    $strArray = $ms | Foreach {"$($_.Option)$($_.Title)"}
    

    Select-Object 有点像 SQL SELECT。它将选定的属性投影到一个新对象上(v1/v2 中的 pscustomobject 和 V3 中的 Selected.)。您的第二种方法不起作用,因为字符串中的$_.Option 只会“插入”变量$_。它不会评估表达式$_.Option

    您可以通过使用子表达式获取双引号字符串来评估表达式,例如“$(...)”或“$($_.Option)”。

    【讨论】:

    • 基思!哇,我希望你能看到 powershell 标签……有什么“为什么”的机会吗?我是不是又要调用???
    • 我收到了来自某个 API 的疯狂多回复,在找到您的解决方案之前我无法正确解析。而且已经8岁了!但就像一个魅力。还有谁能比 PowerShell MVP 更好地提供它?
    【解决方案2】:

    在尝试收集对象值并将它们添加到数组集合时,我也收到了相同的 doesn't contain a method named 'op_Addition'. 错误消息。用@() 包装变量时效果很好。

    这是一篇参考文章:

    PS脚本数组集合

    ##USER PROFILES...
    $UserProfiles= @("cg2208", "cg0769", "ms8659", "sw1650", "dc8141", "bc0397", "bm7261")
    $UserProfiles
    $aduserlist = @()
    foreach ($user in $UserProfiles {
      $user 
      #Write-Host "Press any key to continue ..."
      #$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    $aduser= Get-ADUser -Identity $user -Properties * | Select -Property  SamAccountName, Name, LastLogonDate, whenCreated, msExchWhenMailboxCreated, City, State, Department, Title, mailNickname, Description
    #$aduserlist += $aduser | Select Name, SamAccountName, City, State, Department, Title, whenCreated, msExchWhenMailboxCreated, mailNickname, Description
    #$aduserlist += $aduser | Foreach {"$($_.SamAccountName)$($_.Name)$($_.City)$($_.State)$($_.Title)$($_.whenCreated)$($_.msExchWhenMailboxCreated)$($_.mailNickname)$($_.Description)"}
    $aduserlist += @($aduser)  
    }
    $aduserlist
    $aduserlist | ft -auto 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-17
      • 2021-05-09
      • 1970-01-01
      相关资源
      最近更新 更多