2015-11-02 75 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

非常感谢它的作品完美:')我一直试图从星期天做这个:') –