powershell - 从 foreach powershell 的返回变量创建一个对象

标签 powershell object return-value

我正在尝试创建一个脚本来接收计算机列表,并且我需要为每台计算机创建一个进程,在运行该进程之后,我有许多变量需要附加到一个对象

如何将返回的 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

最佳答案

您最好在 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
}

现在您可以使用 ConvertTo-Html 从您的对象创建 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() block :

param([string[]]$Machines)

现在,如果您将脚本保存为“KimosReporter.ps1”,您可以像这样在任何计算机上运行它:

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

关于powershell - 从 foreach powershell 的返回变量创建一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33483714/

相关文章:

javascript - 如何通过Lodash将对象转换为排序数组

c++ - 为什么析构函数在这里被调用两次?

python - 何时建议使用 ret_val 变量?

ios - parse.com - 在 iOS 中获取对象延迟

powershell - 使用PowerShell ADSI提供程序将组添加到组

arrays - Powershell数组长度

powershell - 从 Powershell 调用 VBScript ..这是正确的方法吗?

c++ - 在编译时创建 N 个对象的最佳方式

azure - 通过 PowerShell 从本地 SQL Server 2016 将 dacpac 发布到 Azure SQL 托管实例失败 "cannot publish to SQL Server 2014"

c++ - a+b的值和char类型