Следующие команды будут подавлять вывод команды и по-прежнему выполнять команду:
$null = New-NetFirewallRule -DisplayName "MSSQL ENGINE TCP" -Direction Inbound -LocalPort 1433 -Protocol TCP -Action Allow
Write-Host 'Windows Firewall configured to allow incoming connections on TCP port 1433'
Когда выход сохраняется в $null
, выход удаляется.
Вы также можете привести к [void]
, что в некоторых случаях может дать лучшую производительность, чем присвоение $null
.
[void](New-NetFirewallRule -DisplayName "MSSQL ENGINE TCP" -Direction Inbound -LocalPort 1433 -Protocol TCP -Action Allow)
Вероятно, в обоих случаях производительность будет незначительной. Вам следует избегать использования Out-Null
во всех случаях, потому что это всегда будет медленнее.
Обычно не рекомендуется использовать Write-Host
, но, поскольку я не знаю, как вы вызываете или выполняете свой код, я оставляю это там. Если вы выполняете это в консоли PowerShell, вы можете просто оставить текст в кавычках в отдельной строке.
Вот несколько тестов производительности для сравнения трех методов:
Out-Null:
$list = @() -as [system.collections.arraylist]
measure-command {(1..10000) | Foreach-Object {$list.add($_) | Out-Null} } | Select-Object -Property ticks,totalmilliseconds
Ticks TotalMilliseconds
----- -----------------
6354765 635.4765
[пустота]:
$list = @() -as [system.collections.arraylist]
measure-command {(1..10000) | Foreach-Object {[void]$list.add($_)} } | Select-Object -Property ticks,totalmilliseconds
Ticks TotalMilliseconds
----- -----------------
1323269 132.3269
$ неинициализированным:
$list = @() -as [system.collections.arraylist]
measure-command {(1..10000) | Foreach-Object {$null = $list.add($_)} } | Select-Object -Property ticks,totalmilliseconds
Ticks TotalMilliseconds
----- -----------------
1269874 126.9874