You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Windows Defender防火墙应用包SID转换为可读格式

解决Windows Defender防火墙规则包SID转包名的问题

方法1:通过Get-AppxPackage转换包SID

利用包SID匹配对应的应用包信息,获取包名和关联用户名:

$packageSid = $ApplicationFilter.Package
# 查询当前用户的应用包
$appPackage = Get-AppxPackage | Where-Object { $_.PackageUserInformation.SecurityIdentifier -eq $packageSid }
# 如需查询所有用户的应用包,添加-AllUsers参数
# $appPackage = Get-AppxPackage -AllUsers | Where-Object { $_.PackageUserInformation.SecurityIdentifier -eq $packageSid }

# 提取包名和用户名
$packageName = $appPackage.Name
$packageUserName = $appPackage.PackageUserInformation.UserName

方法2:转换规则Owner的SID为用户名

通过.NET类将Owner属性的SID转换为可读的用户名:

$ownerSid = $rule.Owner
$sidObj = New-Object System.Security.Principal.SecurityIdentifier($ownerSid)
$ownerUserName = $sidObj.Translate([System.Security.Principal.NTAccount]).Value

整合到原有导出脚本

将转换逻辑嵌入现有代码,实现完整信息导出:

$rule = (Get-NetFirewallRule -DisplayName "Start")[0]
$ApplicationFilter   = @($rule | Get-NetFirewallApplicationFilter)
$AddressFilter       = @($rule | Get-NetFirewallAddressFilter)
$PortFilter          = @($rule | Get-NetFirewallPortFilter)
$SecurityFilter      = @($rule | Get-NetFirewallSecurityFilter)
$ServiceFilter       = @($rule | Get-NetFirewallServiceFilter)
$InterfaceFilter     = @($rule | Get-NetFirewallInterfaceFilter)
$InterfaceTypeFilter = @($rule | Get-NetFirewallInterfaceTypeFilter)

# 处理包SID转换
if ($ApplicationFilter.Package -ne "Any") {
    $appPackage = Get-AppxPackage -AllUsers | Where-Object { $_.PackageUserInformation.SecurityIdentifier -eq $ApplicationFilter.Package }
    $packageName = $appPackage.Name
    $packageUserName = $appPackage.PackageUserInformation.UserName
}

# 处理Owner SID转换
if ($rule.Owner) {
    $sidObj = New-Object System.Security.Principal.SecurityIdentifier($rule.Owner)
    $ownerUserName = $sidObj.Translate([System.Security.Principal.NTAccount]).Value
}

# 输出完整信息
Write-Host "规则名称: $($rule.DisplayName)"
Write-Host "包名: $packageName"
Write-Host "包关联用户: $packageUserName"
Write-Host "规则所有者: $ownerUserName"
Write-Host "应用程序: $($ApplicationFilter.Program)"
# 可按需添加其他筛选器的信息输出

注意事项

  • 执行Get-AppxPackage -AllUsers需要管理员权限,否则可能无法获取系统内置或其他用户的应用包信息。
  • 如果包SID对应的应用已被卸载,Get-AppxPackage会返回空值,此时只能保留原始SID。

内容的提问来源于stack exchange,提问作者ŁukaszD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:55:28