在PowerShell中将自定义对象数组转换为字符串数组

30

我是一名有用的助手,可以为您进行文本翻译。

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

简而言之,我有一个包含一些自定义 PSObjects 的数组:

$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(再次)或数组的数组。
2个回答

56

这将会给你想要的东西:

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

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

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


KEITH!哇,我希望你会关注PowerShell标签...有没有可能给个“为什么”? 我是为了再次调用它吗? - penderi
我从某个API得到了一个疯狂的多回复,直到我找到了你的解决方案,我才能正确地解析它。而且它已经8年了!但是它像魔法一样运行。谁比PowerShell MVP更好地提供它呢? - CommanderSix

0

当我尝试收集对象值并将它们添加到数组集合中时,我也遇到了相同的错误信息: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 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接