Powershell 将Win32_OperatingSystem的CountryCode转换为国家/地区字符串
我们正在尝试将中的Powershell 将Win32_OperatingSystem的CountryCode转换为国家/地区字符串,powershell,wmi,Powershell,Wmi,我们正在尝试将中的CountryCode转换为人类可读的字符串 代码: $OS = Get-CimInstance -ClassName Win32_OperatingSystem $OS | Select-Object CountryCode, OSLanguage, @{N = 'OSDefaultLanguage'; E = {New-Object System.Globalization.CultureInfo([Int]$_.OSLanguage)}}, @{N =
CountryCode
转换为人类可读的字符串
代码:
$OS = Get-CimInstance -ClassName Win32_OperatingSystem
$OS | Select-Object CountryCode, OSLanguage,
@{N = 'OSDefaultLanguage'; E = {New-Object System.Globalization.CultureInfo([Int]$_.OSLanguage)}},
@{N = 'OSCountryCode'; E = {New-Object System.Globalization.CultureInfo([Int]$_.CountryCode)}}
在上面的示例中,属性OSCountryCode
是我们所需要的。但它返回值ar
,即阿根廷
,但它应根据for值1
返回美国
如何将值1
正确转换为US
或类似值?CountryCode
是关联国家/地区的国家/地区呼叫代码(电话号码路由前缀)。您需要查询外部API以将调用代码转换为国家/地区名称,或者不使用WMI并检索[Globalization.RegionInfo]::CurrentRegion.TwoLetterISORegionName
(您可以通过其他计算机的PowerShell远程处理来执行此操作)。当我在另一台机器上运行@jeroenmoster建议的代码时,它总是返回我自己的国家,而不是远程机器的国家(例如1=US,32=BE)。是否有一种方法可以转换类Win32\u OperatingSystem
?Thx@iRon的值,但这并不是真正需要的。我们正在寻找将CountryCode
an[int]
与CountryName
a[String]
@DarkLite1匹配,对不起,我错过了,我已经相应地更改了答案(并添加了国家名称。@iRon很抱歉造成混淆,但它没有将$OS.CountryCode
转换为两个字母的国家名称。$OS.CountryCode
与$OS.OSLanguage
不同。给定的系统可以使用OS语言x和国家Y。这意味着,如果需要,您将获得多个结果。)将一种语言转换为一个国家(例如荷兰和比利时都讲荷兰语),也可以将另一种语言转换为另一个国家(例如比利时他们讲法语,我没有资源来确认这一点,但我认为您需要在系统帐户下运行Get CimInstance-ClassName Win32_OperatingSystem
,以获取系统的OSLanguage/LCID()。如果这对您不起作用,则您可能必须构建硬编码引用或从外部获取引用,请参阅:
$OS = Get-CimInstance -ClassName Win32_OperatingSystem
$Culture = [System.Globalization.CultureInfo]::GetCultures("SpecificCultures") | Where {$_.LCID -eq $OS.OSLanguage}
$RegionInfo = New-Object System.Globalization.RegionInfo $Culture.Name
$OS | Select-Object CountryCode, OSLanguage,
@{N = 'OSDefaultLanguage'; E = {New-Object System.Globalization.CultureInfo([Int]$_.OSLanguage)}},
@{N = 'OSCountryCode'; E = {$RegionInfo.TwoLetterISORegionName}},
@{N = 'OSCountryName'; E = {$RegionInfo.DisplayName}}