检测到用户已是用户组成员时终止PowerShell脚本且不重启服务的实现方法
解决方案
你可以通过提前检测远程服务器组成员身份的方式实现需求,该方案不会产生冗余报错,逻辑更可控,修改后的完整脚本如下:
# 远程执行组成员检测、用户添加操作,返回是否需要执行后续服务重启 $needServiceRestart = Invoke-Command -ComputerName ServerNameHere -ScriptBlock { $targetGroup = "GroupNameHere" $targetUser = "$env:USERDOMAIN\$env:USERNAME" # 校验用户是否已在目标组内 $userInGroup = Get-LocalGroupMember -Group $targetGroup | Where-Object { $_.Name -eq $targetUser } if ($userInGroup) { # 用户已存在,返回不需要重启 return $false } # 用户不存在则执行添加操作 Add-LocalGroupMember -Group $targetGroup -Member $targetUser # 添加完成,返回需要重启 return $true } # 不需要重启时直接终止脚本 if (-not $needServiceRestart) { exit } # 原有服务启停逻辑 Stop-Service -Name "ServiceNameHere" timeout /t 5 /nobreak Start-Service -Name "ServiceNameHere"
替代方案(错误捕获实现,改动量更小)
如果你不想调整原有添加逻辑的结构,也可以通过捕获MemberExistsException异常实现终止效果:
try { Invoke-Command -ComputerName ServerNameHere -ScriptBlock { # 加-ErrorAction Stop把非终止错误转为可捕获的终止错误 Add-LocalGroupMember -Group "GroupNameHere" -Member $env:USERDOMAIN\$env:USERNAME -ErrorAction Stop } } catch [Microsoft.PowerShell.Commands.MemberExistsException] { # 捕获到用户已存在的异常,直接退出脚本 exit } # 原有服务启停逻辑 Stop-Service -Name "ServiceNameHere" timeout /t 5 /nobreak Start-Service -Name "ServiceNameHere"
内容的提问来源于stack exchange,提问作者bubbafrombama
相关产品推荐
相关产品推荐

