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