Compare-Object包含包含不同属性的变量

时间:2016-03-01 10:11:09

标签: powershell properties compare

我正在编写一个脚本,在我们的基础架构中发现不同的服务器。基本上我所做的是从2个不同来源获取服务器的名称和状态,并找到不匹配的内容。源1是我们的SQL,其属性名称和状态(状态可以是InUse或Removed)源2来自vCenter,其属性为Name和PowerState(PoweredOn或PoweredOff)然后将这些存储在不同的变量中,

使用此信息我想比较每个服务器的Status和PowerState,InUse和PoweredOn应匹配并输出为null,而所有其他(对于ex InUse和PoweredOff)不应匹配并输出到表或csv以及服务器名称以供进一步调查。

我尝试将属性重命名为相同名称,然后使用ForEach过滤它们,但我无法让它工作。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

<强>假设:

  • 您正在使用PowerShell
  • 我假设您知道如何将列表提取到字典中。为了方便起见,我假设您正在使用哈希表。
  • 我假设两个来源中服务器的名称​​完全相同。如果没有,您需要在脚本(可能是查找表)中对此进行说明,或者在一个来源中调整名称。

$ sqllist是SQL中的列表,按名称键入 $ vclist是vCenter中的列表,由名称

键入
$output = @()
foreach ($serversql in $sqllist)
{
  $entry = $null
  $servervc = $vclist.Get($serversql.Name)
  if ($serversql.Status -match 'InUse' `
    -and $servervc.PowerState -match 'PoweredOn')
  {
    $entry = [PsCustomObject]@{
      Name=$serversql.Name
      SqlStatus=$null
      vCenterStatus=$null
    }
  } else
  {
    $entry = [PsCustomObject]@{
      Name=$serversql.Name
      SqlStatus=$serversql.Status
      vCenterStatus=$servervc.PowerState
    }
  }
}
$output | Export-CSV -Path log.csv