Управление bios из powershell

Обновлено: 04.07.2024

date

30.05.2019

directory

PowerShell, Windows 10

comments

Комментариев пока нет

Вы можете использовать PowerShell для просмотра или изменения настроек BIOS на вашем Windows компьютере. Рассмотрим несколько примеров, которые можно использовать для получения или изменения некоторых настроек BIOS через WMI классы (Windows Management Instrumentation) на компьютерах популярных производителей: HP, Lenovo, Dell.

Базовые параметры BIOS можно получить на любом компьютере с помощью командлета Get-WmiObject из класса Win32_BIOS:

Get-WmiObject -Class Win32_BIOS | Format-List *

Данная команда позволяет получить версию BIOS (SMBIOSBIOSVersion, BIOSVersion), производителя (Manufacturer), серийный номер компьютера (SerialNumber), дату выпуска (ReleaseDate) и ряд других параметров.

Get-WmiObject -Class Win32_BIOS

Можно вывести только определенные параметры BIOS, например, производителя и версию BIOS.

Get-WmiObject -Class Win32_BIOS | Select-Object Manufacturer, SMBIOSBIOSVersion

Вы можете использовать класс Win32_BIOS для просмотра некоторой информации BIOS на любом компьютере с Windows. Однако, некоторые производители оборудования предоставляют специальные WMI классы для обращения к BIOS из Windows (необходимо, чтобы на компьютере были установлены родные драйвера от производителя).

Управление BIOS из PowerShell на компьютерах Lenovo

Например, на компьютерах Lenovo список некоторых параметров BIOS и их значений можно получить так:

Get-WmiObject -class Lenovo_BiosSetting -namespace root\wmi

Можно вывести только имена настроек BIOS и текущие значения:

Get-WmiObject -class Lenovo_BiosSetting -namespace root\wmi | select-object InstanceName, currentsetting

Получить настройки BIOS на компьютере Lenovo из Powershell

Проверим, что на компьютере Lenovo установлен пароль для входа в BIOS:

(gwmi -Class Lenovo_BiosPasswordSettings -Namespace root\wmi).PasswordState

Если команда вернула 0, значит пароль для входа в BIOS не установлен.

проверить наличие пароля BIOS Lenovo_BiosPasswordSettings -> PasswordState

Вы можете изменить некоторые параметры BIOS на компьютерах Lenovo. Например, включим на компьютере WOL:

$getLenovoBIOS = gwmi -class Lenovo_SetBiosSetting -namespace root\wmi
$getLenovoBIOS.SetBiosSetting("WakeOnLAN,Enable")
$SaveLenovoBIOS = (gwmi -class Lenovo_SaveBiosSettings -namespace root\wmi)
$SaveLenovoBIOS.SaveBiosSettings()

Настройка BIOS из PowerShell на компьютерах Hewlett-Packard

На компьютерах HP можно использовать следующую команду для получения параметров BIOS, их значений и доступных опций:

Get-WmiObject -Namespace root/hp/instrumentedBIOS -Class hp_biosEnumeration | select Name, value, possiblevalues –AutoSize

Вы можете изменить некоторые настройки BIOS на компьютерах HP из PowerShell. Например, вы хотите отключить загрузку компьютера с USB устройств.

$getHPBios = gwmi -class hp_biossettinginterface -Namespace "root\hp\instrumentedbios"
$getHPBios.SetBIOSSetting('USB Storage Boot','Disable')

Если для изменения настроек BIOS требуется указать пароль, вы можете использовать следующий скрипт:

$HPBIOSPassword = "<utf-16/>"+"P@$$w0rd"
$getHPBios = gwmi -class hp_biossettinginterface -Namespace "root\hp\instrumentedbios"
$getHPBios.SetBIOSSetting(‘Network (PXE) Boot','Disable',$HPBIOSPassword)

Если последняя команда вернула “Return 0”, значит она отработала успешно. Можно сделать простейший обработчик:

$ChangeBIOS_State = $bios.setbiossetting(Network (PXE) Boot', 'Disable' , $HPBIOSPassword)
$ChangeBIOS_State_Code = $ChangeBIOS_State.return
If(($ChangeBIOS_State_Code) -eq 0)
write-host "OK"
>
Else
write-host "Error - (Return code $ChangeBIOS_State_Code)" -Foreground Red
>

Если вы хотите включить в BIOS LAN/WLAN Switching на ноутбуке HP для автоматического отключения от Wi-FI при наличии Ethernet подключения, выполните команду:

Настройка BIOS на устройствах DELL из PowerShell

Чтбы получить порядок перебора загрузочных усттройств в BIOS на компьютерах Dell, выполните:

Get-WmiObject -NameSpace root\dellomci Dell_BootDeviceSequence | sort bootorder | select BootDeviceName, BootOrder

класс dellomci для получения параметров bios на компьютерах DELL

Например, вы можете включить Wake on LAN в BIOS следующим образом:

(Get-WmiObject DCIM-BIOSService -namespace rootdcimsysman).SetBIOSAttributes($null,$null,"Wake-On-LAN","4")

Кроме того, Dell выпустила отдельный PowerShell модуль DellBIOSProvider, который устанавливается при установке драйверов либо вы можете установить его вручную командой:

Install-Module -Name DellBIOSProvider -Force

С помощью этого модуля вы можете получить порядок загрузки на компьютере Dell:

Чтобы изменить параметр BIOS используйте командлет Set-Item. Например, чтобы изменить пароль BIOS:

Set-Item -Path Dellsmbios\Security\AdminPassword –Value 0ldDellP@ss –Password Newde11P@ss

С помощью описанных выше методик вы можете для своих моделей ПК создать PowerShell скрипт, который экспортирует текущие настройки BIOS с эталонного компьютера (например, в CSV) и применяет их на все остальные компьютерах такой же модели. Таким образом можно добиться стандартизации настроек BIOS на всех компьютерах в сети.

date

27.07.2021

directory

PowerShell, Windows 10, Windows Server 2016

comments

комментариев 5

PowerShell предоставляет широкие возможности управления процессами на локальном или удаленном компьютере. С помощью PowerShell можно получить список запущенных процессов, приостановить зависший процесс, найти процесс по заголовку окна, запустить новый процесс в скрытом или интерактивном режиме.

Список доступных командлетов управления процессами в Windows 10 можно вывести так:

Get-Command –Noun Process

командлеты управления процессами в powershell

  • Get-Process – получить список запущенных процессов;
  • Start-Process – запустить процесс/программу;
  • Stop-Process – принудительно остановить процесс;
  • Debug-Process – используется для отладки процессов;
  • Wait-Process – используется для ожидания окончания процесса.

Get-Process – получение списка запущенных процессов

Командлет Get-Process позволяет вывести список запущенных процессов на локальном компьютере.

Get-Process список запушенных процессов

По-умолчанию выводятся следующие свойства запущенных процессов:

Чтобы получить все свойства нескольких процессов:

Get-Process winword, notep* | Format-List *

Можно вывести только определенный свойства процессов. Например, имя (ProcessName) время запуска (StartTime), заголовок окна процесса (MainWindowTitle), имя исполняемого файла (Path) и наименование разработчика (Company):

Get-Process winword, notep* | Select-Object ProcessName, StartTime, MainWindowTitle, Path, Company|ft

вывести подроюную информацию о запущенных процессах

Вывести список запущенных процессов пользователя с графическими окнами (в список не попадут фоновые и системные процессы):

Get-Process | Where-Object | Format-Table Id, Name, mainWindowtitle

Get-Process | Where-Object <<img class=

.mainWindowTitle - процессы с графическими окнами" width="" />
.mainWindowTitle - процессы с графическими окнами" width="" />

С помощью параметра IncludeUserName можно вывести имя пользователя (владельца), который запустил процесс:

Get-Process -Name winword -IncludeUserName

С помощью Where-Object можно выбрать процессы в соответствии с заданными критериями. Например, выведем все процессы, которые используются более 200 Мб оперативной памяти, отсортируем процессы в порядке убывания используемого объема RAM, размер памяти из Кб преобразуем в Мб:

Get-Process найти процессы, которые занимают более 200 Мб оперативной памяти

Как мы уже говорили ранее командлет Get-Process в параметре CPU содержит время использования процессора конкретным процессом в секундах. Чтобы отобразить процент использования CPU процессами (по аналогии с Task Manager), используйте такую функцию:

function Get-CPUPercent
$CPUPercent = @Name = 'CPUPercent'
Expression = $TotalSec = (New-TimeSpan -Start $_.StartTime).TotalSeconds
[Math]::Round( ($_.CPU * 100 / $TotalSec), 2)
>
>
Get-Process | Select-Object -Property Name, $CPUPercent, Description | Sort-Object -Property CPUPercent -Descending | Select-Object -First 20
>

PowerShellс скрипт с Get-Process выводит процент использования CPU процессами

Чтобы найти зависшие процессы (которые не отвечают), выполните команду:

Start-Process, Stop-Process: запуск и остановка процессов из PowerShell

Чтобы запустить новый процесс с помощью PowerShell используется команда:

Start-Process -FilePath notepad

Если каталог с исполняемым файлом отсутствует в переменной окружения $env:path, нужно указать полный путь к файлу:

Start-Process -FilePath 'C:\distr\app.exe'

Можно запустить программу и передать ей аргументы:

Start-Process -FilePath ping -ArgumentList "-n 10 192.168.1.11"

С помощью параметра WindowStyle вы можете задать режим запуска окна процесса (normal, minimized, maximized, hidden). Например, чтобы запустить программу в максимально развернуом окне и дождаться завершения процесса, выполните команду:

Start-Process -FilePath tracert -ArgumentList "192.168.1.11" –wait -windowstyle Maximized

С помощью командлета Stop-Process можно завершить любой процесс. Например, чтобы закрыть все запущенные процессы notepad:

Stop-Process -Name notepad

По-умолчанию не запрашивается подтверждение завершения процесса. Закрываются все процессы, которые соответствуют указанным критериям. Чтобы запросить подтверждение завершения для каждого процесса, добавьте –Confirm.

Stop-Process -Name notepad.exe -Confirm

Stop-Process завершить процесс powershell

(Get-Process -Name notepad).Kill()

Из PowerShell можно принудительно завершить все приложения, которые не отвечают диспетчеру процессов Windows:

Get-Process | where-object | Stop-Process

PowerShell: управление процессами на удаленном компьютере

С помощью аргумента ComputerName командлет Get-Process позволяет управлять процессами на удаленных компьютерах (должен быть включен и настроен WinRM).

Get-Process -ComputerName dc01, dc02| Format-Table -Property ProcessName, ID, MachineName

Мы рассматриваем встроенные возможности комнадлета Get-Process для управления процессами на удаленных компьютерах. Здесь не учитываются возможности PowerShell Remoting, которые доступны в командлетах Invoke-Command и Enter-PSSession.

Если вы хотите завершить процесс на удаленном компьютере, имейте в виду, что у командлета Stop-Process отсутствует параметр –ComputerName. Для завершения процесса на удаленном компьютере можно использовать такой PowerShell код:

$RProc = Get-Process -Name notepad -ComputerName dc01
Stop-Process -InputObject $RProc

date

04.08.2021

directory

PowerShell, Windows 10, Windows Server 2016

comments

комментариев 5

В этой статье мы рассмотрим особенности использования командлета Invoke-Command для удаленного выполнения команд и скриптов. Возможно запускать команды удаленно на одном компьютере, или параллельно на множестве компьютерах в вашей сети. Командлет Invoke-Command использует возможности удаленного управления, заложенные в PowerShell Remoting. PowerShell Remoting позволяет удаленно подключаться к PowerShell сессиям на компьютерах через службу WinRM (Windows Remote Management) через протокол Web Services for Management (WS-Management). Этот сервис дает возможность принимать команды Powershell и устанавливать сеансы.

Настройка WinRM для PowerShell Remoting

На удаленных компьютерах, к которым вы планируете подключаться должен быть запущена служба WinRM. Проверить это можно так:

Если служба не запущена, запустите ее:

Enable-PSRemoting включить и настроить winrm в Windows

Данная команда запустит службу WinRM (установит автоматический запуск), выставит настройки winrm по-умолчанию и добавит исключение в Windows Firewall. Команда Enable-PSRemoting –Force включает WinRM без запроса пользователя.

Теперь к компьютеру можно подключиться удаленно через PowerShell Remoting.

Обратите внимание, что PowerShell Remoting по-умолчанию не работает, если тип вашей сети определен как общедоступная (Public). В этом случае команда вернет ошибку:

Также нужно включить правило Window Defender Firewall, которое разрешает доступ к WinRM в общедоступных сетях. Вы можете включить правило брандмауэра с помощью GPO или PowerShell:

Чтобы проверить подключение к удаленному компьютер через PowerShell Remoting используется команда:

Test-WsMan - проверить работу winrm на удаленном компьютере

Если у вас нет домена, или вы обращаетесь к компьютерам через PowerShell Remoting по IP адресам, в этом случае используется для аутентификации используется протокол NTLM. При использовании NTLM, при выполнении команду Invoke-Command появится ошибка:

Invoke-Command Default authentication may be used with an IP address under the following conditions: thetransport is HTTPS or the destination is in the TrustedHosts list, and explicit credentials are provided

Set-Item wsman:\localhost\Client\TrustedHosts -value 192.168.1.201

Set-Item wsman:\localhost\Client\TrustedHosts

Либо можно разрешить подключение ко все компьютерам (не рекомендуется, т.к. один из главных недостатков NTLM – он не осуществляет проверку подлинности).

Set-Item wsman:\localhost\Client\TrustedHosts -value *

Аналогичные настройки нужно сделать на удаленных хостах.

Чтобы вывести список доверенных хостов, выполните команду:

Чтобы применить изменения, перезапустите службу WinRM:

Удаленное выполнение PowerShell с помощью Invoke-Command

Командлет Invoke-Command позволяет выполнить команду на одном или нескольких удаленных компьютерах.

Например, для запуска одиночной команды на удаленном компьютере можно использовать такую команду:

Invoke-Command -ComputerName dc01 -ScriptBlock

Invoke-Command -ComputerName -ScriptBlock - запуск команд powershell на удаленном компьютере через winrm

Эта команда выведет в вашу консоль значение версии PowerShell, установленной на удаленном компьютере, имя которого указано в параметре -ComputerName . В блоке -ScriptBlock указывается команда, которую нужно запусть на удаленном компьютере.

По-умолчанию команда, посланная через Invoke-Command выполняется на удалённом компьютере от текущего пользователя. Если нужно выполнить команду от имени другого пользователя, сначала нужно запросить учетные данные пользователя и сохранить их в переменную:

$cred = Get-Credential
Invoke-Command -ComputerName comp-buh2 -Credential $cred -ScriptBlock


Можно задать несколько команд в блоке ScriptBlock, их нужно разделить точкой с запятой. Например следующая команда выведет текущий часовой пояс и изменит его на другой:

Invoke-Command -Computername dc01 -ScriptBlock

Invoke-Command несколько команд в блоке ScriptBlock

Invoke-Command позволяет выполнять не только отдельные команды, но и запускать скрипты PowerShell. Для этого используется аргумент -FilePath (вместо –ScriptBlock). При этом вы указываете путь к локальному PS1 файлу скрипта на вашем компьютере (вам не нужно копировать файл скрипт на удаленный компьютер):

Invoke-Command -ComputerName Server01 -FilePath c:\PS\Scripts\GetComputerInfo.ps1

Используем Invoke-Command для параллельного запуска команд на нескольких компьютерах

Командлет Invoke-Command можно использовать для параллельного выполнения команд на нескольких удаленных компьютерах.

В самом просто случае имена компьютеров, на которых нужно выполнить команды указываются через запятую:

Invoke-Command server1, server2, server3 -ScriptBlock

Invoke-Command параллельный запуск команд на нескольких компьютрах

Список компьютеров можно поместить в переменную (массив):

$servers = @(″server1″,″server2″,″server3″)
Invoke-Command -ScriptBlock < get-date>-ComputerName $servers

Или получить из текстового файла:

Invoke-Command -ScriptBlock -ComputerName(Get-Content c:\ps\servers.txt)

Также можно получить список компьютеров в ADс помощью командлета Get-ADComputer из модуля AD PowerShell:

Чтобы выполнить команду на всех Windows Server в домене, исопльзуйте такой код:

$computers = (Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"').Name
Invoke-Command -ComputerName $computers -ScriptBlock -ErrorAction SilentlyContinue

Если компьютер выключен, или недоступен, благодаря параметру SilentlyContinue скрипт не будет остановлен и продолжит выполнение на других компьютерах.

Чтобы понять с какого компьютера получены результаты, нужно использовать специальную переменную окружения PSComputerName.

$results = Invoke-Command server1, server2, server3 -ScriptBlock
$results | Select-Object PSComputerName, DateTime

Invoke-Command вернуть результы с каждого компьютера через PSComputerName

При запуске команды через Invoke-Command на нескольких компьютерах она выполняется параллельно. В Invoke-Command есть ограничение на максимальное количество компьютеров, которыми можно управлять одновременно (ограничение на количество одновременных PSSession). Оно определяется параметром ThrottleLimit (по умолчанию 32). Если вам нужно выполнить команду одновременно более чем на 32 компьютерах (например, на 128), используйте параметр –ThrottleLimit 128 (но это вызывает повышенную нагрузку на ваш компьютер).

Для запуска команд на удаленных компьютерах через Invoke-Command в фоновом режиме используется специальный атрибут –AsJob . В этом случае результат выполнения команды не возвращается в консоль. Чтобы получить результаты нужно использовать командлет Receive-Job .

Если вы хотите запускать команды на удаленном компьютере интерактивно, используйте командлет Enter-PSSession.

Вы можете использовать PowerShell для просмотра или изменения настроек BIOS на вашем компьютере под управлением Windows. Рассмотрим несколько примеров, которые можно использовать для получения или изменения некоторых настроек BIOS с помощью PowerShell через классы WMI (инструментарий управления Windows) на компьютерах популярных поставщиков: HP, Lenovo, Dell.

Вы можете просмотреть основные параметры BIOS на своём компьютере с помощью командлета Get-WmiObject из класса Win32_BIOS:

Эта команда позволяет просматривать версию BIOS (SMBIOSBIOSVersion, BIOSVersion), производителя оборудования, серийный номер компьютера, дату выпуска и некоторую другую информацию.


Вы можете перечислить только некоторые из этих параметров BIOS:

Вы можете использовать класс Win32_BIOS для просмотра некоторой информации о BIOS на любом компьютере под управлением Windows. Однако некоторые поставщики оборудования предоставляют специальные классы WMI для прямого доступа к BIOS из ОС Windows (на компьютере должны быть установлены собственные драйверы от производителя оборудования).

Управление настройками BIOS Lenovo из PowerShell

Получить список параметров BIOS и их значений на компьютерах Lenovo можно так:

Чтобы отображались только названия настроек BIOS и их текущие значения:


Давайте проверим, установлен ли на вашем компьютере Lenovo пароль для доступа к BIOS:

Если команда вернула 0, значит пароль для входа в BIOS не установлен.


Вы можете изменить некоторые параметры BIOS на компьютерах Lenovo. Например, давайте включим WOL (Wake-On-LAN):

Изменение настроек BIOS из PowerShell на компьютерах Hewlett-Packard

Чтобы получить настройки BIOS, их значения и доступные параметры на компьютерах HP, вы можете использовать следующую команду:

Вы можете изменить некоторые настройки BIOS на компьютерах HP из PowerShell. Например, вы хотите отключить загрузку компьютера с USB-устройств.

Если для изменения настроек BIOS требуется пароль, вы можете использовать этот скрипт:

Если последняя команда вернула «0», она была успешно выполнена. Вы можете использовать простой обработчик PowerShell:

Если вы хотите включить переключение LAN/WLAN в BIOS на ноутбуке HP для автоматического отключения от Wi-Fi при наличии подключения Ethernet, выполните следующую команду:

Настройка параметров BIOS DELL с помощью PowerShell

Для просмотра и управления настройками BIOS на компьютерах DELL можно использовать класс DCIM-BIOSService WMI или более современный класс root\dellomci (доступен после установки пакета OMCI — Open Manage Client Instrumentation).

Чтобы просмотреть порядок загрузочных устройств в BIOS на компьютерах Dell, выполните следующую команду:


Например, вы можете включить Wake on LAN в BIOS следующим образом:

Кроме того, Dell выпустила отдельный модуль PowerShell, DellBIOSProvider, который устанавливается вместе с установкой драйвера, или вы можете установить его вручную с помощью этой команды:

Этот модуль можно использовать для просмотра последовательности загрузки на компьютере Dell:

Чтобы изменить конкретный параметр BIOS, используйте командлет Set-Item. Например, чтобы изменить пароль BIOS:

Используя описанные выше методы, вы можете создать сценарий PowerShell для экспорта текущих настроек BIOS с эталонного компьютера (например, в файл CSV). Затем вы можете использовать PowerShell для развёртывания одних и тех же настроек BIOS на всех компьютерах вашей компании.


На каждом компьютере есть BIOS, запускающий компьютер. Мы можем настроить различные параметры оборудования в BIOS. Чтобы получить доступ к BIOS, нажмите клавиши F2, F12 или DEL в зависимости от производителя компьютера.

Некоторая информация в BIOS ценна и время от времени требуется пользователю. Это включает серийный номер компьютера, бирку ресурса, версию BIOS и т.д.

Проблема в том, что пользователю необходимо перезагрузить компьютер, чтобы получить доступ к BIOS. К нему нельзя получить доступ напрямую из Windows.

Есть способ извлечь полезную информацию из BIOS компьютера. Давайте обсудим:

Доступ к информации о BIOS из Windows 10 с помощью PowerShell

Перейдите в меню «Пуск» и найдите PowerShell. Щелкните правой кнопкой мыши Windows PowerShell и выберите Запуск от имени администратора .


Выполните следующую команду в PowerShell, чтобы просмотреть все текущие настройки BIOS:


Некоторую другую полезную информацию также можно получить из PowerShell с помощью различных команд.

Если вы хотите получить серийный номер компьютера или метку актива , введите следующую команду:

Просмотр информации о BIOS из Windows 10 с помощью командной строки

Чтобы получить только серийный номер, используйте следующую команду:

Если вы хотите получить версию BIOS, введите следующую команду:

Ряд индивидуализированной информации можно получить из BIOS. Список автоматически создается следующей командой, которая предлагает, какие команды вы можете ввести, чтобы получить соответствующую информацию:


Отображаемая информация будет относиться к отдельным картам памяти, а число будет отображаться в байтах, как в примере ниже:


Надеюсь, это будет полезно, если вы хотите получать информацию из BIOS при работе с Windows 10 и не хотите перезагружать компьютер.

Эта информация полезна для вас? Какого типа информация обычно требуется от BIOS?

Читайте также: