2017-02-15 26 views
0

我想有以下funtction讀出機器上的PS版本在我的網絡:添加成員PSCustomObject每次退貨

function CheckPSVersion { 
    param ([Parameter(Position = 0)][string[]]$computername) 
    if (!$computername) { $computername = $env:computername } 
    $y = New-Object PSCustomObject 
    $computername | % { 
     $x = Invoke-Command -ComputerName $_ -ScriptBlock { ($PSVersionTable.PSVersion).tostring() } 
     $y | Add-Member -Membertype NoteProperty -Name Computername -value $_ 
     $y | Add-Member -Membertype NoteProperty -Name PowerShellVersion -Value $x 
    } 
    $y 
} 

但我有Add-Member問題,因爲它說:「一個元素不能被添加到「計算機」,因爲這個名稱的另一個元素已經存在」

我所需的輸出會是這樣的:

Computername PowerShellVersion 
------------ ----------------- 
SIS   5.0.10240.17146 
SIS1   2.0.10240.17146 
SIS2   5.0.10240.17146 
SIS3   3.0.10240.17146 
SIS4   5.0.10240.17146 

你能幫助我嗎?我真的不能讓我的周圍add-member

回答

2

頭這應該足夠了:

$computername | ForEach-Object { 
    New-Object -Type PSCustomObject -Property @{ 
     Computername  = $_ 
     PowerShellVersion = Invoke-Command -ComputerName $_ -ScriptBlock { 
           ($PSVersionTable.PSVersion).ToString() 
          } 
    } 
} 
1

你要把全部的computernames添加到同一個對象,但實際上需要的對象的列表:

$List = New-Object System.Collections.ArrayList  
$computername | % { 
    $y = New-Object PSCustomObject 
    $x = Invoke-Command -ComputerName $_ -ScriptBlock {($PSVersionTable.PSVersion).tostring() } 
    $y | Add-Member -Membertype NoteProperty -Name Computername -value $_ 
    $y | Add-Member -Membertype NoteProperty -Name PowerShellVersion -Value 
    $List.Add($y) 
} 
$List 

順便說一句,你可以用替代

param ([Parameter(Position = 0)][string[]]$computername) 
if (!$computername) { $computername = $env:computername } 
param ([Parameter(Position = 0)][string[]]$computername = $env:computername) 
0

我建議像安斯加爾的迴應,我太討厭添加會員cmdlet的,它只是看起來在代碼笨重,它可能會幫助,如果做這樣的事情:

$y = @() 

1..10 | % { 
    $y += New-Object PSObject -Property @{ ComputerName = "comp$_"; PowerShellVersion = "1.0" } 
} 

$y 

基本上你」重新創建一個空數組,忽略1.10循環(我只用它來給「計算機」不同的名字),但正如你所看到的,你正在爲自定義屬性添加一個PSObject給$ y,從而產生一個對象數組可以很好地操縱。