AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 878791
Accepted
fiat
fiat
Asked: 2017-10-17 15:57:05 +0800 CST2017-10-17 15:57:05 +0800 CST 2017-10-17 15:57:05 +0800 CST

Powershell - Add-LocalGroupMember - 成员存在时保持沉默

  • 772

我可以使用Add-LocalGroupMember将用户添加到本地组:

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

但它不是幂等的。如果用户已经存在,那么您会收到此错误

Add-LocalGroupMember : foobar 已经是管理员组的成员

当您想重复运行此命令时,使此命令不出错的最佳方法是什么?

原因是这是 Octopus 部署的一部分,我不想为如此简单的事情使用预烘焙步骤。

powershell-v5.0
  • 3 3 个回答
  • 7984 Views

3 个回答

  • Voted
  1. Best Answer
    jscott
    2017-10-17T16:33:32+08:002017-10-17T16:33:32+08:00

    您可以将包装器简化为 try/catch 块。此示例仅在成员已存在时捕获,因此您仍然可以评估和处理其他错误。

    try {
        Add-LocalGroupMember -Group $group -Member $member -ErrorAction Stop
    } catch [Microsoft.PowerShell.Commands.MemberExistsException] {
        Write-Warning "$member already in $group"
    }
    
    • 6
  2. fiat
    2017-10-17T15:57:05+08:002017-10-17T15:57:05+08:00

    我想出了这个函数来包装它

    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"
        }
    }
    

    但我觉得可能有一种更优雅的方式让我难以捉摸

    • 1
  3. Kyp
    2017-10-17T16:41:30+08:002017-10-17T16:41:30+08:00

    我想你可能正在寻找“erroractionpreference”,这篇文章通过几个例子来解释它是如何工作的。

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

    鉴于另一个答案,如果您的脚本大于此函数并且您需要继续进行故障排除,那么您需要通过在开头设置它并在完成处理后将其设置回“继续”来包装这段代码. 这将抑制类似的非终止错误,因此它们不会打印到您的主机。

    • 1

相关问题

  • 如何使用 Powershell 更改远程虚拟机的 IP 地址?

  • 启用 Powershell 日志记录 - 缺少 GPO

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve