Это мой первый пост. Я обычно сталкиваюсь с этим сайтом, когда нахожу другие вопросы или ответы, и он мне очень помог. Тем не менее, я не могу найти ответ на этот вопрос. Если я сделал что-то не так, пожалуйста, дайте мне знать. Отказ от ответственности: я все еще изучаю PowerShell, так что любая конструктивная критика также будет хороша.
Мне было поручено проверить членов группы AD. Проведя некоторые исследования, я нашел лучший способ сделать это как можно проще. Я продолжил копать и обнаружил, что цикл ForEach - лучший способ принять несколько записей.
Таким образом, весь смысл в том, чтобы использовать et-ADPrincipalGroupMembership для проверки того, в каких группах находится пользователь. У меня есть оператор if, чтобы проверить, есть ли они даже в AD. Я могу убедиться, что это работает просто отлично. Однако, когда я делаю несколько пользователей (то есть user1, user2, user3), он останавливается на первом пользователе, который НЕ находится в AD, и вообще останавливает функцию.
Однако, если я передаю содержимое через файл, используя Get-Content, он работает как обслуживаемый. Любые пользователи, не являющиеся пользователями AD, будут обнаружены, и отобразится правильная ошибка.
Вот несколько примеров (cltest & bcltest - реальные учетные записи AD):
PS C:\scripts> Get-Hscaccess cltest, cltest123, bcltest, bcltest123
CLTEST is NOT in HSCACCESS
CLTEST123 does not exist in AD
Если я запускаю одинаковые имена в текстовом файле, я получаю это:
PS C:\scripts> gc .\hsca.txt | Get-Hscaccess
CLTEST is NOT in HSCACCESS
CLTEST123 does not exist in AD
BCLTEST is NOT in HSCACCESS
BCLTEST123 does not exist in AD
вот контекст текстового файла:
cltest
cltest123
bcltest
bcltest123
Я попытался продолжить, вернуть, прервать ... он просто останавливает сценарий, вместо того, чтобы переходить к следующему объекту и снова проверять операторы. На самом деле использование continue проходит через следующие операторы if, но оно не будет выполнено, поскольку пользователь не находится в AD. Я надеюсь, что я понимаю, чего я пытаюсь достичь здесь.
Я понял, что использую $ user / $ users в обратном направлении. Это был всего $ user, прежде чем я понял, что могу иметь несколько входов. Ничего особенного, хотя, и я могу это исправить, когда я завершаю этот сценарий.
Итак, надеюсь, я все объяснил и привел примеры. Если я что-то упустил, дайте мне знать. Я знаю, что у всех нет доступа к AD, но если кто-то может помочь, это будет с благодарностью. Кроме того, я знаю, что BEGIN, PROCESS и END не нужны, но именно так я научился выполнять эту функцию. Также эта функция находится в файле .psm1 и является частью других функций в модуле.
Вот полная функция:
function Get-Hscaccess {
param (
[string[]]$user
)
BEGIN {}
PROCESS {
if ($_ -ne $null) {
$user = $_
}
foreach ($users in $user) {
$usrOBJ = Get-ADUser -LDAPFilter "(SAMAccountName=$users)"
if ($usrOBJ -eq $null) {
Write-Host "$($users.ToUpper()) does not exist in AD"
return
}
$memGroups = (Get-ADPrincipalGroupMembership $users | Select-Object -ExpandProperty name)
if ($memGroups.Contains("HSCACCESS")) {
Write-Host "$($users.ToUpper()) is in HSCACCESS"
}
else {
Write-Host "$($users.ToUpper()) is NOT in HSCACCESS"
}
} #end of foreach
}
END {}
}