Как заставить вывод systeminfo на английский язык анализировать его с помощью Powershell? - PullRequest
0 голосов
/ 02 мая 2019

У меня есть эта простая строка кода:

    $TotalMemory = (systeminfo | Select-String 'Total Physical Memory:').ToString().Split(':')[1].Trim()
    $TotalMemory = $TotalMemory -replace (",", "")
    $TotalMemory = $TotalMemory -replace ("MB", "")
    $TotalMemory | Set-Content ".\build\txt\ram.txt"

Который собирает ОЗУ. Работает отлично. Проблема в том, что у меня есть пользователь, который использует русскую версию Windows, вывод которой на русском. Есть ли способ заставить только для этой команды вывод systeminfo на английский, чтобы его можно было проанализировать?

Ответы [ 2 ]

1 голос
/ 02 мая 2019

По крайней мере в той же версии Windows количество заголовков systeminfo должно быть одинаковым.

Таким образом, используя параметры /FO csv и /NH, вы можете принудительно выводить данные в формате csv без заголовков и указывать английский язык.столбцы версии или нумерации, например

Windows 10 английский или Col #, немецкий

$SystemInfoHeadersEn = (
    "Host Name",#                 Col0  Hostname
    "OS Name",#                   Col1  Betriebssystemname
    "OS Version",#                Col2  Betriebssystemversion
    "OS Manufacturer",#           Col3  Betriebssystemhersteller
    "OS Configuration",#          Col4  Betriebssystemkonfiguration
    "OS Build Type",#             Col5  Betriebssystem-Buildtyp
    "Registered Owner",#          Col6  Registrierter Benutzer
    "Registered Organization",#   Col7  Registrierte Organisation
    "Product ID",#                Col8  Produkt-ID
    "Original Install Date",#     Col9  Ursprüngliches Installationsdatum
    "System Boot Time",#          Col10 Systemstartzeit
    "System Manufacturer",#       Col11 Systemhersteller
    "System Model",#              Col12 Systemmodell
    "System Type",#               Col13 Systemtyp
    "Processor(s)",#              Col14 Prozessor(en)
    "BIOS Version",#              Col15 BIOS-Version
    "Windows Directory",#         Col16 Windows-Verzeichnis
    "System Directory",#          Col17 System-Verzeichnis
    "Boot Device",#               Col18 Startgerät
    "System Locale",#             Col19 Systemgebietsschema
    "Input Locale",#              Col20 Eingabegebietsschema
    "Time Zone",#                 Col21 Zeitzone
    "Total Physical Memory",#     Col22 Gesamter physischer Speicher
    "Available Physical Memory",# Col23 Verfügbarer physischer Speicher
    "Virtual Memory: Max Size",#  Col24 Virtueller Arbeitsspeicher: Maximale Größe
    "Virtual Memory: Available",# Col25 Virtueller Arbeitsspeicher: Verfügbar
    "Virtual Memory: In Use",#    Col26 Virtueller Arbeitsspeicher: Zurzeit verwendet
    "Page File Location(s)",#     Col27 Auslagerungsdateipfad(e)
    "Domain",#                    Col28 Domäne
    "Logon Server",#              Col29 Anmeldeserver
    "Hotfix(s)",#                 Col30 Hotfix(es)
    "Network Card(s)",#           Col31 Netzwerkkarte(n)
    "Hyper-V Requirements"#       Col32 Anforderungen für Hyper-V
)

, который возвращает информацию в объекте, но все еще имеет локализованные / зависящие от пользовательских настроек значения (десятичная точка /запятая, формат даты)

> $SystemInfo = systeminfo.exe /FO csv /NH |ConvertFrom-Csv -Header $SystemInfoHeadersEn
> $systeminfo.'Total Physical Memory'
16.349 MB

или

> $SystemInfo = systeminfo.exe /FO csv /NH |ConvertFrom-Csv -Header (0..32|%{"Col$_"})
> $systeminfo.col22
16.349 MB
1 голос
/ 02 мая 2019

Я не знаю, как установить язык для SysInfo, но есть и другие способы получить ту же информацию. это позволит получить оперативную память, о которой сообщает класс CIM_ComputerSystem. это число указывается в байтах, поэтому деление на 1GB дает это число в ГБ. [ ухмылка ]

$Ram_GB = [math]::Round((Get-CimInstance -ClassName CIM_ComputerSystem).TotalPhysicalMemory / 1GB, 2)

$Ram_GB

output = 8 в моей системе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...