在期望值之后删除字符串

时间:2016-05-11 12:02:04

标签: powershell virtual-machine

我正在编写一个简短的脚本,将我们VM上运行的操作系统与我们手动输入CMDB的操作系统进行比较。下面是一些测试代码

foreach ($r in $SQL) {
  if ((Get-VMGuest $r.name).OSFullName -eq $r.OS) {
    Write-Host "Match"
  } else {
    Write-Host "Not matching"
  }
}

以下是一些示例输出

VM Output = Microsoft Windows Server 2003 Standard (32-bit)
SQL Output = Microsoft Windows Server 2003, Standard Edition

VM Output = Microsoft Windows Server 2012 (64-bit)
SQL Output = Microsoft Windows Server 2012 Standard

由于输出结果的方式,即使操作系统相同,我也永远不会得到匹配。

有没有办法在服务器年之后中断或以其他方式解决这个问题?

2 个答案:

答案 0 :(得分:1)

我倾向于尝试规范化两个字符串然后比较规范化版本;这个功能是一个你可以适应你的特殊情况的开始:

function NormalizeOS([string]$RawOs) {
  $output = $RawOs -Replace 'Edition', '' `
   -Replace ',', '' `
   -Replace '(64-bit)', '' `
   -Replace '(32-bit)', '';

  return $output.trim();
}

然后,您可以调整原始if声明:

if (NormalizeOS((Get-VMGuest $r.name.OSFullName)) -eq NormalizeOS($r.OS))

这里的技巧是尝试从两个字符串中删除不相关的信息,只留下你关心的细节。

答案 1 :(得分:1)

使用regular expression

拆分字符串

要完全按照您的定义"在服务器" 之后中断:

($r.OS -Split "(?<=\WServer\W)")[0]