2016-05-11 4 views
3

Я пишу короткий скрипт, который сравнивает ОС, запущенную на нашей виртуальной машине, с тем, что мы вручную ввели в нашу 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 

С тем, как результат, выводимый я никогда не получить матч, даже если операционная система одинаковы.

Есть ли способ разорваться после Серверного года или другой способ обойти это?

ответ

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)) 

Методика здесь, чтобы попытаться вырезать ненужную информацию из обе строки оставляют только те детали, о которых вы заботитесь.

+0

Да Thats eacly то, что я пытаюсь сделать. Ваша функция работает нормально, но оператор if обычно не работает, NormalizeOS ($ r.OS)) не работает, нет ли скобок или что-то еще? – Notumlord

+0

Хм, да, скобки были в неправильном месте, попробуйте. –

1

Разделить строку, используя regular expression

точно следовать вашему определению "прекращаться после Server":

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

Я actaully означал серверный год/версию, но он не появился, так как я написал его внутри <>. Оригинальный пост обновлен – Notumlord

+0

В этом случае вы, вероятно, захотите что-то вроде: '($ r.OS -Split" (? <= \ WServer \ d \ d \ d \ d \ W) ") [0]' – iRon

+0

или если вы просто хотите получить все до того, что не является символом слова или пространством: (например, запятая или левая скобка): '($ r.OS -Split" [^ \ w] ") [0] ' – iRon

Смежные вопросы