我正在编写一个简短的脚本,将我们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
由于输出结果的方式,即使操作系统相同,我也永远不会得到匹配。
有没有办法在服务器年之后中断或以其他方式解决这个问题?
答案 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)