我可以用添加本地组成员将用户添加到本地组:
Add-LocalGroupMember -Group "Administrators" -Member "foobar"
但它不是幂等的。如果用户已经存在,则会出现此错误
Add-LocalGroupMember :foobar 已经是管理员组的成员
当您想重复运行此命令时,使该命令不出错的最佳方法是什么?
原因是这是 Octopus 部署的一部分,我不想对于如此简单的事情使用预先准备好的步骤。
答案1
您可以将包装器简化为 try/catch 块。此示例仅在成员已存在时捕获,因此您仍然可以评估和处理其他错误。
try {
Add-LocalGroupMember -Group $group -Member $member -ErrorAction Stop
} catch [Microsoft.PowerShell.Commands.MemberExistsException] {
Write-Warning "$member already in $group"
}
答案2
我想出了这个函数来包装它
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"
}
}
但我觉得可能有一种更优雅的方法,但我没找到
答案3
我思考您可能正在寻找“erroractionpreference”,本文通过几个示例解释了它的工作原理。
另一个答案是,如果您的脚本比这个函数大,并且您需要继续进行故障排除,那么您需要通过在开始时设置它并在完成处理后将其重新设置为“继续”来包装这段代码。这将抑制类似的非终止错误,因此它们不会打印到您的主机。