Windows Edition auf nicht englischen Systemen

393
Teknowledgist

Ich versuche, ein PowerShell-Skript zu schreiben, das Aktionen basierend auf der Windows-Edition (Professional, Enterprise, Home usw.) filtert. Ich kann verwenden Get-WmiObject Win32_OperatingSystem | Select-Object Caption, aber laut MS-Dokumentation kann dieser "String lokalisiert werden".

Ich habe keine nicht englischsprachigen Windows-Systeme, mit denen ich nachprüfen kann. Kann jemand bestätigen, ob der Vergleich mit einer Untertitelzeichenfolge, die "Enterprise" oder "Home" enthält, bei anderen Sprachinstallationen ausreichend ist?

Wie kann die Edition allgemein festgelegt werden, wenn sie lokalisiert ist?

Vielen Dank.

0
Die Zeichenfolge ist in der Tat lokalisiert. Für wen schreiben Sie genau dieses Skript? Wenn Sie Windows 8+ ausführen, können Sie die Systemsprache der Installation einer beliebigen Edition von Windows 8+ ändern, mit Ausnahme von Single Language. Sie sollten stattdessen `OperatingSystemSKU` und `GetProductInfo` verwenden Ramhound vor 6 Jahren 0

1 Antwort auf die Frage

0
Teknowledgist

Basierend auf diesem Beitrag besteht das Problem darin, eine endgültige Quelle zu finden. Das Beste, was ich finden konnte, war diese Entwicklerdokumentation, die nicht so vollständig ist, wie die Antwort im ersten Link nahelegt.

Der folgende Code gibt jedoch den "offiziellen" englischen Namen von Microsoft für die aktuell ausgeführte Edition von Windows zurück:

$page = Invoke-WebRequest -uri 'https://msdn.microsoft.com/en-us/library/ms724358.aspx'  $TableText = ($page.AllElements |  Where-Object {$_.tagname -eq 'tbody' -and $_.innertext -like 'valuemeaning*'} | Select-Object -ExpandProperty innertext) -split "`r`n"  $CSV = $TableText | Where-Object {$_ -match '^0x0.*'} |  ForEach-Object {$_ -replace "^(0x0[0-9A-F]+) ",'$1,'} | ForEach-Object {"$([convert]::ToInt16($_.split(',')[0],16))" + ',' + $_.split(',')[-1]}  $Editions = ConvertFrom-Csv $CSV -Header 'SKU','Name'  $ThisOS = (Get-WmiObject Win32_OperatingSystem).operatingsystemsku  $Editions | Where-Object {$_.SKU -eq $ThisOS} |Select-Object -ExpandProperty Name 

Hoffe das hilft jemandem. Ich kann den Code ändern, wenn jemand eine bessere Online-Quelle für die Nachschlage von Artikelnummern findet.