【问题标题】:Add new values to PSObject - Is this the best approach?向 PSObject 添加新值 - 这是最好的方法吗?
【发布时间】:2015-11-02 19:25:37
【问题描述】:

我有以下代码,它可以工作。但我想知道这是否是最好的方法,因为它会一遍又一遍地重复结构。

$Computers = Get-Content -Path C:\scripts\Computers.txt
$AllComputers = @()
foreach ($machine in $Computers) {
  $objCompSys = Get-WmIObject -class "Win32_ComputerSystem" -cn $machine -EA silentlyContinue  -namespace "root\CIMV2"
  foreach ($item in $objCompSys) {
    $compname = $item.Name
    $physicalRAM = [Math]::Ceiling($item.TotalPhysicalMemory / 1MB)
    $numProcs = $item.NumberOfProcessors
  }
  $objProc = Get-WMIObject -class "Win32_Processor" -cn $machine -EA silentlyContinue -namespace "root\CIMV2"
  foreach ($item in $objProc) {
    $procType = $item.Name
    $procSpeed = $item.MaxClockSpeed
  }
  if (procSpeed -eq "486") {
    $Data1 = @{
      MachineName    = $compname
      CPUSpeed       = $procSpeed
      "Num CPUs"     = $numProcs
      "Physical RAM" = $physicalRAM
      "Summary"      = "486 process - check"
      New-Object PSObject -Property $data1
    }
    $AllComputers += $Data1
  } elseif (procSpeed -eq "586") {
    $Data2 = @{
      MachineName    = $compname
      CPUSpeed       = $procSpeed
      "Num CPUs"     = $numProcs
      "Physical RAM" = $physicalRAM
      "Summary"      = "586 process - check"
      New-Object PSObject -Property $data2
    }
    $AllComputers += $Data2
  } else (procSpeed -eq "6*") {
    $Data3 = @{
      MachineName    = $compname
      CPUSpeed       = $procSpeed
      "Num CPUs"     = $numProcs
      "Physical RAM" = $physicalRAM
      "Summary"      = "New Models - Good to go"
      New-Object PSObject -Property $data3
    }
    $AllComputers += $Data3
  }
}

$AllComputers | Out-GridView

【问题讨论】:

    标签: powershell csv export-to-csv psobject


    【解决方案1】:

    是的。设置一次“数据”表,然后在必要时仅更改“摘要”字段:

    $Computers = Get-Content -Path C:\scripts\Computers.txt
    $AllComputers = @()
    foreach($machine in $Computers)
    {
        $objCompSys = Get-WmIObject -class "Win32_ComputerSystem" -cn $machine -EA silentlyContinue  -namespace "root\CIMV2"
        foreach($item in $objCompSys)
        {
            $compname = $item.Name
            $physicalRAM = [Math]::Ceiling($item.TotalPhysicalMemory / 1MB)
            $numProcs = $item.NumberOfProcessors
        }
    
        $objProc = Get-WMIObject -class "Win32_Processor" -cn $machine -EA silentlyContinue  -namespace "root\CIMV2"
        foreach($item in $objProc)
        {
            $procType = $item.Name
            $procSpeed = $item.MaxClockSpeed
        }
        $Data = @{
            MachineName    = $compname
            CPUSpeed       = $procSpeed
            "Num CPUs"     = $numProcs
            "Physical RAM" = $physicalRAM  
        }
    
        $Data["Summary"] = switch($procSpeed)
        {
            "486" { "486 process - check" } 
            "586" { "586 process - check" } 
            default { "New Models - Good to go" }
        }
    
        $AllComputers += New-Object psobject -Property $Data
    }
    $AllComputers | Out-GridView
    

    上面的switch 与这个 if/else 结构相当:

    if($procSpeed -eq "486") { 
        "486 process - check" 
    } elseif($procSpeed -eq "486") { 
        "586 process - check"
    } else { 
        "New Models - Good to go" 
    }
    

    【讨论】:

    • 谢谢马蒂亚斯。我会在几个小时内试一试,然后告诉你。非常感谢。我很感激。
    猜你喜欢
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 2020-01-21
    • 2012-05-15
    相关资源
    最近更新 更多