#powershell #if-statement
#powershell #if-statement
Вопрос:
у меня есть строка powershell ниже. Он вернет 1, если в группе администраторов найдена учетная запись, отличная от встроенного администратора, group1, group2, group3.
If ((Get-LocalGroupMember -Group Administrators | Where-Object {($_.ObjectClass -eq 'User' -or $_.ObjectClass -eq 'Group') -and (($_.Name -notlike "$env:computernameadministrator") -and ($_.Name -notlike 'group1') -and ($_.Name -notlike 'group2') -and ($_.Name -notlike 'group3') )}).Count -gt 0) {
echo 1
}else{
echo 0
}
как мне изменить приведенную выше инструкцию if для чтения в строковом значении (с запятыми) в реестре, чтобы мне не нужно было жестко кодировать group1, group2, group3 в инструкции if?? Спасибо
пример, который я установил в hklm:system test , с именем adm и строковым значением group1, group2, group3
я могу извлечь значение, которое я установил в реестре, используя эту строку.
$listofadm = (Get-ItemProperty -Path "HKLM:systemtest" -ErrorAction Stop -Name adm).adm
Комментарии:
1.
$listofadm[0]
shuold предоставит вам первый элемент в этом списке.
Ответ №1:
Не уверен, почему вы проверяете пользователя или группу, если вы можете опустить это, это упростит вашу проверку. Чтобы упростить это, я бы создал шаблон регулярных выражений для всех групп, включая учетную запись computer adminsitrator. Если в группах действительно нет пробела, вы можете просто заменить запятые символом канала |
.
$listofadm = "$env:computernameadministrator|"
(Get-ItemProperty -Path "HKLM:systemtest" -ErrorAction Stop -Name adm).adm -replace ',','|'
Это заставит $listofadm
содержать что-то вроде
DESKTOP-NEKK74Jadministrator|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}