Изменить настройки брандмауэра Windows с помощью PowerShell, но не отображать вывод - PullRequest
0 голосов
/ 07 мая 2019

У меня есть сценарий PowerShell, который я использую для установки SQL Express, затем SQL Server Management Studio и, наконец, для изменения настроек брандмауэра Windows, чтобы разрешить удаленные подключения к базе данных. Для изменений брандмауэра, одна из строк, которые я запускаю:

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'

В идеале, я бы хотел, чтобы результат был просто:

Windows Firewall configured to allow incoming connections on TCP port 1433

Вместо этого я получаю:

Caption                 :
Description             :
ElementName             : MSSQL ENGINE TCP
InstanceID              : {752a3c18-298f-4639-a462-4cc5205b1016}
CommonName              :
PolicyKeywords          :
Enabled                 : True
PolicyDecisionStrategy  : 2
PolicyRoles             :
ConditionListType       : 3
CreationClassName       : MSFT|FW|FirewallRule|{752a3c18-298f-4639-a462- 
4cc5205b1016}
ExecutionStrategy       : 2
Mandatory               :
PolicyRuleName          :
Priority                :
RuleUsage               :
SequencedActions        : 3
SystemCreationClassName :
SystemName              :
Action                  : Allow
Direction               : Inbound
DisplayGroup            :
DisplayName             : MSSQL ENGINE TCP
EdgeTraversalPolicy     : Block
EnforcementStatus       : NotApplicable
LocalOnlyMapping        : False
LooseSourceMapping      : False
Owner                   :
Platforms               : {}
PolicyStoreSource       : PersistentStore
PolicyStoreSourceType   : Local
PrimaryStatus           : OK
Profiles                : 0
RuleGroup               :
Status                  : The rule was parsed successfully from the store. (65536)
StatusCode              : 65536
PSComputerName          :
Name                    : {752a3c18-298f-4639-a462-4cc5205b1016}
ID                      : {752a3c18-298f-4639-a462-4cc5205b1016}
Group                   :
Platform                : {}
LSM                     : False
Profile                 : Any

Windows Firewall configured to allow incoming connections on TCP port 1433

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

Ответы [ 2 ]

2 голосов
/ 07 мая 2019

Следующие команды будут подавлять вывод команды и по-прежнему выполнять команду:

$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
1 голос
/ 07 мая 2019

Запустите командлет. Трубопровод до Out-Null. Если предыдущая команда выполнена успешно, выведите сообщение.

New-NetFirewallRule -DisplayName "MSSQL ENGINE TCP" -Direction Inbound -LocalPort 1433 -Protocol TCP -Action Allow | Out-Null
if($?){Write-Host 'Windows Firewall configured to allow incoming connections on TCP port 1433'}

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

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