微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从注册表而不是if语句中的硬代码读取值

如何解决从注册表而不是if语句中的硬代码读取值

我在powershell行下面。当在管理员组中找到除内置管理员group1,group2,group3以外的帐户时,它将返回1。

If ((Get-LocalGroupMember -Group Administrators | Where-Object {($_.ObjectClass -eq 'User' -or $_.ObjectClass -eq 'Group') -and (($_.Name -notlike "$env:computername\administrator") -and ($_.Name -notlike 'group1')  -and ($_.Name -notlike 'group2')  -and ($_.Name -notlike 'group3') )}).Count -gt 0) {
echo 1
}else{
echo 0
}

如何更改上述if语句以读取注册表中的字符串值(带有逗号),所以我不需要在if语句中对group1,group2,group3进行硬编码?谢谢

示例我已将其设置为hklm:\ system \ test,命名为adm并指定了group1,group2,group3的字符串值

我能够使用此行提取我在注册表中设置的值。

$listofadm = (Get-ItemProperty -Path "HKLM:\system\test" -ErrorAction Stop -Name adm).adm

解决方法

不确定是否要检查用户或组,如果可以省略,它将简化检查。为了简化此过程,我将对所有组(包括computer \ adminsitrator帐户)制作一个正则表达式。如果这些组确实没有空格,则可以简单地用逗号|替换逗号。

$listofadm = "$env:computername\administrator|" +
    (Get-ItemProperty -Path "HKLM:\system\test" -ErrorAction Stop -Name adm).adm -replace ',','|'

这将使$listofadm包含类似内容

DESKTOP-NEKK74J\administrator|group1|group2|group3

现在,如果您只想查找名称不是4个对象中的任何一个的对象

Get-LocalGroupMember -Group Administrators | where name -NotMatch $listofadm

Where子句中的单个项目检查可以省略{ }大括号。如果确实需要确保它是用户或组对象,则外观将如此。

Get-LocalGroupMember -Group Administrators |
    Where-Object {($_.ObjectClass -eq 'User' -or $_.ObjectClass -eq 'Group') -and $_.name -NotMatch $listofadm}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。