Powershell 开放端口配置文件,全部(私有公共域)

Der*_*nch 5 powershell

我有一个打开端口 5555 的 powershell 脚本,但它默认为 profile = private,当我希望它全部为(私有、公共、域)时。如何修改脚本以实现此目的?

$port = New-Object -ComObject HNetCfg.FWOpenPort
$port.Port = 5555
$port.Name = 'MyPort'
$port.Enabled = $true

$fwMgr = New-Object -ComObject HNetCfg.FwMgr
$profile = $fwMgr.LocalPolicy.CurrentProfile
$profile.GloballyOpenPorts.Add($port)

$port = New-Object -ComObject HNetCfg.FWOpenPort
$port.Port = 6521
$port.Name = 'ArkleSQL'
$port.Enabled = $true

$fwMgr = New-Object -ComObject HNetCfg.FwMgr
$profile = $fwMgr.LocalPolicy.CurrentProfile
$profile.GloballyOpenPorts.Add($port)
Run Code Online (Sandbox Code Playgroud)

Ste*_*ski 2

用于防火墙管理的 COM 对象有两个值。0代表域网络,1代表标准网络。(在此 API 中)此公共配置文件和私有配置文件之间似乎没有区别。

您可以替换最后一部分

$fwMgr = New-Object -ComObject HNetCfg.FwMgr
$profile = $fwMgr.LocalPolicy.CurrentProfile
$profile.GloballyOpenPorts.Add($port)
Run Code Online (Sandbox Code Playgroud)

$Profiles = @{
    NET_FW_PROFILE_DOMAIN = 0
    NET_FW_PROFILE_STANDARD = 1
}

$fwMgr = New-Object -ComObject HNetCfg.FwMgr

$profile.GloballyOpenPorts.Add($port)
foreach ($ProfileKey in $Profiles.Keys)
{
    $Profile = $fwMgr.LocalPolicy.GetProfileByType($profiles[$ProfileKey])
    $Profile.GloballyOpenPorts.Add($Port)
}
Run Code Online (Sandbox Code Playgroud)