Как можно убрать избыточный вывод информации в консоль?

Добрый день! Я работаю системным администратором и решил изучить PowerShell. Для практики я создал скрипт, который автоматически настраивает систему. Вот код, который я использую: 

```powershell
# PowerShell Script to set the size of pagefile.sys
$page_file_size = 1024 * 4;
Write-Output "Standart PageFile size $page_file_size Mb";

$computer_sys = Get-WmiObject Win32_ComputerSystem -EnableAllPrivileges;
$computer_sys.AutomaticManagedPagefile = $False;
$computer_sys.Put();
$page_file = Get-WmiObject -Query "Select * From Win32_PageFileSetting Where Name like '%pagefile.sys'";
$page_file.InitialSize = $page_file_size;
$page_file.MaximumSize = $page_file_size;
$page_file.Put();

Read-Host -Prompt "Press Enter to exit"
```

Однако, я не понимаю, откуда берутся строки, которые выводятся, и почему они появляются вообще. Как я могу сделать так, чтобы выводилось только то, что мне нужно, и ничего лишнего? Вот вывод, который я получаю:

```
Standart PageFile size 4096 Mb

Path          : \\localhost\root\cimv2:Win32_ComputerSystem.Name="OSM-SYS-ADMIN"
RelativePath  : Win32_ComputerSystem.Name="OSM-SYS-ADMIN"
Server        : localhost
NamespacePath : root\cimv2
ClassName     : Win32_ComputerSystem
IsClass       : False
IsInstance    : True
IsSingleton   : False

Path          : \\localhost\root\cimv2:Win32_PageFileSetting.Name="C:\\pagefile.sys"
RelativePath  : Win32_PageFileSetting.Name="C:\\pagefile.sys"
Server        : localhost
NamespacePath : root\cimv2
ClassName     : Win32_PageFileSetting
IsClass       : False
IsInstance    : True
IsSingleton   : False

Press Enter to exit:
``` 

Как мне убрать лишнюю информацию из вывода?
  • 27 февраля 2025 г. 1:34
Ответы на вопрос 2
Ваша проблема заключается в том, что объекты, которые возвращаются командами `Get-WmiObject`, по умолчанию выводятся в консоль, так как PowerShell пытается показать результат выполнения команды. Чтобы убрать лишний вывод, вы можете использовать команду `Out-Null`, что позволит "поглотить" вывод и не отображать его. Вот ваши изменённые команды:

```powershell
# PowerShell Script to set the size of pagefile.sys
$page_file_size = 1024 * 4;
Write-Output "Standart PageFile size $page_file_size Mb";

$computer_sys = Get-WmiObject Win32_ComputerSystem -EnableAllPrivileges | Out-Null;
$computer_sys.AutomaticManagedPagefile = $False;
$computer_sys.Put() | Out-Null;  # Поглощаем вывод от Put()

$page_file = Get-WmiObject -Query "Select * From Win32_PageFileSetting Where Name like '%pagefile.sys'" | Out-Null;
$page_file.InitialSize = $page_file_size;
$page_file.MaximumSize = $page_file_size;
$page_file.Put() | Out-Null;  # Поглощаем вывод от Put()

Read-Host -Prompt "Press Enter to exit"
```

Каждый раз, когда вы используете `Out-Null`, вывод команды будет поглощён, и не появится в консоли. 

Также, если вам нужно выводить только определённые строки, вы можете использовать `Write-Host` вместо `Write-Output` для сообщений, которые хотите видеть. Однако, если вы просто хотите избавиться от ненужного вывода, лучше использовать `Out-Null`, как показано выше.

Если вам нужно выводить только определённую информацию, вы также можете обрабатывать результаты соответствующих команд и выводить только нужные данные, например, используя `Select-Object`.
Регулировать вывод команд можно через коммандлеты Out-* , используя их через пайп 
Например в вашем случае
($computer_sys = Get-WmiObject Win32_ComputerSystem -EnableAllPrivileges) | out-null
Похожие вопросы