Назад | Перейти на главную страницу

Powershell - Add-LocalGroupMember - отключить звук, когда член существует

я могу использовать Добавить-LocalGroupMember для добавления пользователя в локальную группу:

Add-LocalGroupMember -Group  "Administrators" -Member  "foobar"

но это не идемпотентный. Если пользователь уже существует, вы получите эту ошибку

Add-LocalGroupMember: foobar уже является членом группы администраторов

Как лучше всего сделать так, чтобы эта команда не вызывала ошибку, если вы хотите запускать эту команду повторно?

Причина в том, что это часть развертывания Octopus, и я не хочу использовать заранее запеченный шаг для чего-то настолько простого.

Вы можете упростить свою оболочку до блока try / catch. В этом примере выполняется обнаружение только тогда, когда член уже существует, поэтому вы все еще можете оценивать и обрабатывать другие ошибки.

try {
    Add-LocalGroupMember -Group $group -Member $member -ErrorAction Stop
} catch [Microsoft.PowerShell.Commands.MemberExistsException] {
    Write-Warning "$member already in $group"
}

Я придумал эту функцию, чтобы обернуть ее

function Add-LocalGroupMemberSilent($groupName, $username)
{
    $existingMember = Get-LocalGroupMember -Name $groupName | Where {$_.Name -eq "$username"}

    if ($existingMember)
    {
        Write-Host "'$username' is already a member of '$groupName'"
    }
    else
    {
        Write-Host "Adding '$username' to '$groupName'"
        Add-LocalGroupMember -Group "$groupName" -Member "$username"
    }
}

но я чувствую, что может быть более элегантный способ ускользнуть от меня

я считать Возможно, вы ищете erroractionpreference, в этой статье приводится несколько примеров того, как это работает.

https://blogs.technet.microsoft.com/heyscriptingguy/2010/03/08/hey-scripting-guy-how-can-i-use-erroractionpreference-to-control-cmdlet-handling-of-errors/

Учитывая другой ответ, если ваш скрипт больше, чем эта функция, и вам нужно продолжить устранение неполадок, вам нужно будет обернуть этот фрагмент кода, установив его в начале и вернув его в состояние `` продолжить '' после того, как вы закончите обработку . Это подавит такие непрекращающиеся ошибки, чтобы они не выводились на ваш хост.