2015-11-02 41 views
2

我想創建一個腳本,它接收計算機列表併爲每個計算機創建一個進程,在運行該進程後,我有很多需要y的變量附加到一個對象從foreach powershell的返回變量創建一個對象

如何追加到對象,PC的返回信息?

#input variable that the foreach need to process 
$Machines = "pc1,pc2,pc3,pc4,pc5,pc6,pc7,pc8,pc9,pc0" 


#create empty object 
$pcNull 
$MachineNull 
$usersNull  
$object= New-Object Object 
$object | Add-Member NoteProperty propiedad $MachineNull 
$object | Add-Member NoteProperty users $usersNull 
$object | Add-Member NoteProperty computer $pcNull 
$object | Add-Member NoteProperty error $false 


foreach ($Machine in $Machines ) 
{ 
#where i make a process foreach computer and there are variables that are returned 
{ 
} 
############################### 
#where i am trying to append to the created object the returned variables 

#append to propiedad property 
$object.propiedad = $object.propiedad = $MachineNull 
$object 
#append to users property 
$object.users = $object.users = $false 
$object 
#append to computers property 
$object.computer = $object.computer = $Machine 
$object 
} 


$object 
+0

你能實際上包括代碼而不是粘貼圖片。你已經知道如何從它的外觀製作一個對象。在循環中創建每個對象_inside_。 – Matt

+0

停止鏈接到外部文件,將代碼粘貼到文本框中,選擇它並按代碼格式化按鈕('{}') –

+0

我已經將它上載到一個驅動器中OK我將格式化代碼 –

回答

2

你可能最好創建多個對象,每臺計算機之一,foreach循環中。

# Loop through machines, assign all output to $Objects variable 
$Objects = foreach ($Machine in $Machines) 
{ 
    #where i make a process foreach computer and there are variables that are returned 
    { 
    } 
    ############################### 
    #where i am trying to append to the created object the returned variables 

    # Define the properties that the object should have in a hashtable 
    $ObjectProperties = @{ 
     # Assuming you've assigned something to $Propriedad, $Users and $ErrorState above 
     Propiedad = $Propriedad 
     Users  = $Users 
     Computer = $Machine 
     Error  = $ErrorState 
    } 

    # Now create an object. 
    # When we just drop it in the pipeline like this, it gets assigned to $Objects 
    New-Object psobject -Property $ObjectProperties 
} 

現在你可以從你的對象創建HTML與ConvertTo-Html

$Objects | ConvertTo-Html -As Table -Head "<title>Kimo's report</title>" 

如果你想測試它,你需要改變$Machines到:

"pc1","pc2","pc3","pc4","pc5","pc6","pc7","pc8","pc9","pc0" 

如果要將其保存爲.ps1腳本文件並能夠將計算機名稱作爲參數傳遞,在頂部加入一個param()塊:

param([string[]]$Machines) 

現在,如果你將腳本另存爲「KimosReporter.ps1」,你可以對任何這樣的計算機上運行它:

PS C:\>.\KimosReporter.ps1 -Machines "pc1","pc6","pc9" 
+0

真棒,我只是寫了一個非常類似的答案。比預先創建一個空數組更簡單,我已經學會了執行'$ Objects = ForEach($ x in $ y){...}',並在'ForEach'循環內輸出對象,或者如果你想要其他輸出你也可以做'[array] $ Objects = New-Object psobject -property $ ObjectProperties',並且仍然跳過首先創建一個空數組。 – TheMadTechnician

+0

@ TheMadTechnician是的,'$ Objects = foreach($ x in $ y){...}'是我自己的goto模式,但是我聽說過一些新手抱怨說它不像添加內聯數組。唯一的方法來解決,我猜:D –

+0

非常感謝它的作品完美:')我一直試圖從星期天做這個:') –