在Powershell

时间:2017-09-12 19:11:25

标签: powershell

我尝试使用PowerShell运行播发程序

$tpObject = Get-WmiObject -Namespace ROOT\ccm\Policy\Machine\ActualConfig -Class CCM_SoftwareDistribution `
    | Select-Object -Property PKG_Manufacturer, PKG_Name, PKG_MIFVersion

输出结果为:

PKG_Manufacturer PKG_Name PKG_MIFVersion
---------------- -------- --------------
Microsoft        Word     v1234
Google           Chrome   v987
Microsoft        Excel    v987
etc

如何将其连接成字符串?我试过这个:

[string[]]$result = $tpObject.PKG_Manufacturer + $tpObject.PKG_Name + " - " + $tpObject.PKG_MIFVersion  
$result

但它会显示所有PKG_Manufacturer,然后显示PKG_Name,然后显示PKG_MIFVersion
我希望以字符串形式显示 Microsoft Word - v1234 吗? 任何建议或意见将不胜感激。

TKS

3 个答案:

答案 0 :(得分:1)

尝试一下:

$result=@()
Get-WmiObject -Namespace ROOT\ccm\Policy\Machine\ActualConfig -Class CCM_SoftwareDistribution | %{
$result += "$($_.PKG_Manufacturer) $($_.PKG_Name) - $($_.PKG_MIFVersion)"}
$result

答案 1 :(得分:0)

$tpObject = Get-WmiObject -Namespace ROOT\ccm\Policy\Machine\ActualConfig -Class CCM_SoftwareDistribution `
$tpobject | ForEach-Object{
    "{0} {1} - {2}" -f $_.PKG_Manufacturer, $_.PKG_Name, $_.PKG_MIFVersion
}

查看-f format operator

的详细信息

示例输出:

Microsoft Word - v1234
Google Chrome - v987
Microsoft Excel - v987

答案 2 :(得分:0)

我想你想要的是这样的

$list = New-Object 'System.Collections.Generic.List[string]'
Get-WmiObject -Namespace ROOT\ccm\Policy\Machine\ActualConfig -Class CCM_SoftwareDistribution `
    | ForEach-Object $list.Add("$($_.PKG_Manufacturer) $($_.PKG_Name) - $($_.PKG_MIFVersion)")

要在字符串数组中连接和聚合值,您有几个选项。

首先,您可以连接字符串:

  1. 您可以使用+运算符(由您应用)在PowerShell中连接字符串
  2. 您可以使用-f格式化方法(例如在C#中)"My PC {0} has {1} MB of memory." -f "L001", "4096"
  3. 或者您可以使用带引号$x = "Max"; Write-Output "I'm $x"的双引号字符串(后:有时您需要扩展子表达式,如上例所示。请参阅Windows PowerShell Language Specification Version 3.0,第34页)。
  4. 其次,您可以汇总结果:

    1. 使用动态类型的数组$testArray = @()$testArray += $_
    2. 使用类型化数组[string[]]$testArray = [string[]]也与+=一起使用,如下所示。
    3. 将通用列表$list = New-Object 'System.Collections.Generic.List[string]'与添加方法$list.Add($_)一起使用 还有更多......
    4. 一般情况下,我会尽可能长时间地使用PS对象 在字符串数组中聚合以便稍后处理它是太多(C#)程序员的想法。

      在您的密码中:
      1.您无法使用=运算符添加新数组元素,而是使用+=

      $testArray = @()
      $tempArray = "123", "321", "453"
      $tempArray | ForEach {$testArray += $item }
      $testArray