2016-03-01 94 views
0

我正在编写一个脚本,它发现我们基础结构中的服务器不一致。基本上,我所做的是从两个不同的来源获取我们服务器的名称和状态,并找到不匹配的地方。源1是我们的SQL,其属性名称和状态(状态可以是InUse或Removed)源2来自vCenter,属性名称和PowerState(PoweredOn或PoweredOff)然后它们存储在不同的变量中,比较对象与包含不同属性的变量

使用此信息我想比较每个服务器的状态和PowerState,InUse和PoweredOn应该匹配并输出为空,而所有其他(对于前InUse和PoweredOff)不应匹配并输出到表或csv与服务器名一起用于进一步调查。

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

任何帮助表示赞赏。

回答

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 
相关问题