如何将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
相关产品推荐
相关产品推荐

