regex PowerShell GWMI win32_操作系统调整输出

9cbw7uwe  于 2023-03-20  发布在  Shell
关注(0)|答案(3)|浏览(169)

当您使用

(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",但Windows Server 2003Windows Server 2008上的旧计算机与替换正则表达式不匹配。

zpf6vheq

zpf6vheq1#

下面是我的:

gwmi Win32_OperatingSystem | % Caption

输出:

Microsoft Windows 7 Ultimate

你想要的是:

gwmi Win32_OperatingSystem | % Caption | % split ' ' 3 | select -last 1

输出:

7 Ultimate
sdnqo3pr

sdnqo3pr2#

我在我的环境中找到了所有的操作系统作为测试。我不会担心这个答案的WMI,因为这不是问题的重点。
使用下面的here-string,其中包含了我的所有测试示例,

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

我运行了一个正则表达式,它可以找到带有可选(R)和®(〈--版权符号)的Microsoft Windows:

$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
dm7nw8vv

dm7nw8vv3#

我将继续使用regex方法,并使用“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\)|) " }

相关问题