2014-12-04 3 views
0

При использованииPowershell Gwmi Win32_OperatingSystem подрезать выход

(GWMI -ComputerName $server -Class Win32_OperatingSystem -ErrorAction Stop).Caption 

, чтобы получить подписи, как

Microsoft(R) Windows(R) Server 2003 Standard x64 Edition 
Microsoft Windows Server 2008 R2 Standard 
Microsoft Windows Server 2012 Datacenter 

Что простой способ удалить "Microsoft Windows" и "Microsoft(R) Windows" из результатов?

я придумал:

(GWMI Win32_OperatingSystem -Comp $server).Caption -Replace "^Microsoft Windows " 

который превращает "Microsoft Windows Server 2012 Datacenter" в "Server 2012 Datacenter", но старые машины в 2003 и 2008 годах не соответствуют заменить регулярное выражение.

ответ

4

Вот мой

PS > gwmi Win32_OperatingSystem | % Caption 
Microsoft Windows 7 Ultimate 

и что вы хотите

PS > gwmi Win32_OperatingSystem | % Caption | % split ' ' 3 | select -last 1 
7 Ultimate 
+0

Теперь это выглядело слишком просто! Спасибо! -edit, я не могу опубликовать измененный код, который у меня есть, но вот один лайнер: '$ result.OS = (GWMI -ComputerName $ server -Class Win32_OperatingSystem -ErrorAction Stop) .Caption | % split | выберите -Skip 2 | & {"$ input"} ' – user4317867

3

Я нашел все операционки в моей среде в качестве теста. Я не буду беспокоиться о WMI для этого ответа, поскольку это не является предметом обсуждения.

Используя следующую здесь-нить, которая содержала все мои примеры для тестирования

$OSes = @" 
Microsoft Windows 7 Professional 
Microsoft Windows 8.1 Pro 
Microsoft Windows Server 2008 R2 Datacenter 
Microsoft Windows Server 2008 R2 Enterprise 
Microsoft Windows Server 2008 R2 Standard 
Microsoft Windows Storage Server 2008 R2 Standard 
Microsoft Windows XP Professional 
Microsoft(R) Windows(R) Server 2003, Standard Edition 
Microsoft® Windows Server® 2008 Standard 
"@.Split("`r`n") 

Я бег регулярного выражения, которое находит Microsoft Windows с дополнительным (R) и ® (< - символ авторского права)

$OSes -replace "Microsoft(\(R\)|®)?\sWindows(\(R\))?\s" 

Подробней информацию о регулярных выражениях можно найти here

Какие сетки выход

7 Professional 
8.1 Pro 
Server 2008 R2 Datacenter 
Server 2008 R2 Enterprise 
Server 2008 R2 Standard 
Storage Server 2008 R2 Standard 
XP Professional 
Server 2003, Standard Edition 
Server® 2008 Standard 
+0

Благодарим вас и здесь:' $ result.OS = (GWMI -ComputerName $ server -Class Win32_OperatingSystem -ErrorAction Stop) .Caption -replace "Microsoft (\ (R \)) | ®)? \ SWindows (\ (R \))? \ S "' – user4317867

1

Я бы вести с регулярными выражениями подхода и идти с «Microsoft {необязательно с последующей (R)}» как в этом примере:

$s = @( 'Microsoft(R) Windows(R) Server 2003 Standard x64 Edition' 
     , 'Microsoft Windows Server 2008 R2 Standard' 
     , 'Microsoft Windows Server 2012 Datacenter' 
    ) 

write "`n`n" 

$s | % { $_ -replace "Microsoft(\(R\)|) Windows(\(R\)|) " } 
+0

Никто не трогает это в течение 3 часов, и мы даем 3 ответа в течение минуты .... – Matt

+0

@Matt: Aye! (Вероятно, я видел это только тогда, когда вы смотрели на него, потому что ваше редактирование натолкнуло его на верхнюю часть первой страницы). – TessellatingHeckler

+0

Черт меня и мои правки !! – Matt

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