[英]Select Single XML Node to check Node is already added using PowerShell
[英]Powershell Check if a User or Role is added to .Net authorization rules
我正在尝试自动化将用户或角色添加到 .NET 授权规则的过程。 我可以成功执行这个命令来添加用户和角色。
.\appcmd set config 'Default Web Site/TestApp' /section:system.webServer/security/authorization /+"[accessType='Allow',roles='Admin,Guest',users='User1,User2,User3']"
但是,我希望能够在运行上述命令之前检查用户或角色是否已添加到“允许”规则中。
当我运行“列表配置”命令时:
.\appcmd list config 'Default Web Site/TestApp' /section:system.webServer/security/authorization
我得到这个结果:
PS C:\windows\system32\inetsrv> .\appcmd list config 'Default Web Site/TestApp' /section:system.webServer/security/authorization
<system.webServer>
<security>
<authorization>
<add accessType="Allow" users="User1,User2" roles="Admin,Guest" />
<add accessType="Allow" users="User3" roles="" />
</authorization>
</security>
</system.webServer>
但是如果 $user 已经存在或不存在,我不知道如何返回“true”或“false”。 请帮忙。
您可以使用Select-Xml
从 xml 中获取添加对象。 然后您可以检查您的用户、角色或用户/角色组合。 我用下面的 function 证明了这一点
Function Check-UserOrRoleExists {
[cmdletbinding()]
param(
$User,
$Role,
$AppAuthConfig
)
$authorizations = Select-Xml -Content $AppAuthConfig -XPath '//authorization//add' | Select-Object -ExpandProperty node
$result = if ($User -and $Role) {
$authorizations | Where-Object { ($_.users -match $User + '(?:,|$)') -and ($_.roles -match $Role + '(?:,|$)') }
}
elseif ($User) {
$authorizations | Where-Object { ($_.users -match $User + '(?:,|$)') }
}
elseif ($Role) {
$authorizations | Where-Object { $_.roles -match $Role + '(?:,|$)' }
}
[bool]$result
}
用法和Output
# Capture response from appcmd
$response = .\appcmd list config 'Default Web Site/TestApp' /section:system.webServer/security/authorization
PS > Check-UserOrRoleExists -AppAuthConfig $response -User User1
True
PS > Check-UserOrRoleExists -AppAuthConfig $response -User User4
False
PS > Check-UserOrRoleExists -AppAuthConfig $response -User User3 -Role admin
False
PS > Check-UserOrRoleExists -AppAuthConfig $response -User User1 -Role admin
True
PS > Check-UserOrRoleExists -AppAuthConfig $response -Role admin
True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.