"User is already a member of group" 时结束脚本
End Script when "User is already a member of group"
我有一个脚本可以用来自动将域用户添加到特定组中。它还包含一个 stop/restart 的第 3 方服务,将它们添加到安全的用户文件中。我希望此脚本在发现用户已经是组的一部分而不是 stop/start 服务时结束。这是我目前所拥有的:
Invoke-Command -ComputerName ServerNameHere -ScriptBlock {add-LocalGroupMember -Group "GroupNameHere" -Member $env:USERDOMAIN$env:USERNAME }
*--Add in line here that terminates the script once user is found to already be a member and not restart the service below*
Stop-Service -Name "ServiceNameHere"
timeout /t 5 /nobreak
Start-Service -Name "ServiceNameHere"
当我 运行 脚本时,我收到以下消息,这是正常的,然后脚本继续 运行,因此无论如何都会重新启动服务。
Domain\User is already a member of group GroupName
+ CategoryInfo : ResourceExists: (GroupName:String) [Add-LocalGroupMember], MemberExistsException
+ FullyQualifiedErrorId : MemberExists,Microsoft.PowerShell.Commands.AddLocalGroupMemberCommand
+ PSComputerName : ServerName
提前感谢您的帮助!
您可以在重新启动服务之前检查 Invoke-Command
的输出:
$Result = Invoke-Command -ComputerName ServerNameHere -ScriptBlock {
# Check whether user is already a member of group
If ((Get-LocalGroupMember 'GroupNameHere').Name -notcontains "$env:USERDOMAIN$env:USERNAME") {
Add-LocalGroupMember -Group 'GroupNameHere' -Member "$env:USERDOMAIN$env:USERNAME"
Write-Output $True
}
Else { Write-Output $False }
}
# If group membership changed, restart service:
If ($Result) {
Stop-Service -Name "ServiceNameHere"
timeout /t 5 /nobreak
Start-Service -Name "ServiceNameHere"
}
感谢@Cpt.Whale 帮助我。
我 运行正在进入 PowerShell“Get-LocalGroupMember - 无法比较数组中的两个元素。” here when you have orphaned SIDs. I came across this post here 中描述的错误帮助我弄清楚如何删除孤立的 SID。下面是新的完全可用的脚本。
重要说明:为此您需要 PowerShell V5.1。此外,您必须启用远程签名。从 Powershell 首先检查一个简单的“Set-ExecutionPolicy RemoteSigned”(也可以 运行“winrm quickconfig”)。
工作脚本:
$strComputer = 'ServerNameHere'
$serviceName = 'ServiceNameHere'
#Remove orphaned SIDs from Windows Local Groups
$computer = [ADSI]("WinNT://" + $strComputer + ",computer")
$group = $computer.psbase.children.find("LocalGroupNameHere")
$group.Name
$Userlist = ([ADSI]"WinNT://$strComputer/LocalGroupNameHere").psbase.Invoke('Members') | % { ([ADSI]$_).InvokeGet('AdsPath') }
#For each user in that list, if the name is a SID, Remove the specific SID from the group.
foreach ($user in $Userlist) {
if ($user -like "WinNT://S-1-5-*") {
#Remove the specific SID from the group, as passed as a string (not an object).
$group.remove($user)}
}
$Result = Invoke-Command -ComputerName $strComputer -ScriptBlock {
# Check whether user is already a member of group
If ((Get-LocalGroupMember 'LocalGroupNameHere').Name -notcontains "$env:USERDOMAIN$env:USERNAME") {
Add-LocalGroupMember -Group 'LocalGroupNameHere' -Member "$env:USERDOMAIN$env:USERNAME"
Write-Output $True
}
Else { Write-Output $False }
}
# If group membership changed, restart service:
If ($Result) {
(get-service -ComputerName $strComputer -Name $serviceName).Stop()
timeout /t 5 /nobreak
(get-service -ComputerName $strComputer -Name $serviceName).Start()
}
我有一个脚本可以用来自动将域用户添加到特定组中。它还包含一个 stop/restart 的第 3 方服务,将它们添加到安全的用户文件中。我希望此脚本在发现用户已经是组的一部分而不是 stop/start 服务时结束。这是我目前所拥有的:
Invoke-Command -ComputerName ServerNameHere -ScriptBlock {add-LocalGroupMember -Group "GroupNameHere" -Member $env:USERDOMAIN$env:USERNAME } *--Add in line here that terminates the script once user is found to already be a member and not restart the service below* Stop-Service -Name "ServiceNameHere" timeout /t 5 /nobreak Start-Service -Name "ServiceNameHere"
当我 运行 脚本时,我收到以下消息,这是正常的,然后脚本继续 运行,因此无论如何都会重新启动服务。
Domain\User is already a member of group GroupName
+ CategoryInfo : ResourceExists: (GroupName:String) [Add-LocalGroupMember], MemberExistsException
+ FullyQualifiedErrorId : MemberExists,Microsoft.PowerShell.Commands.AddLocalGroupMemberCommand
+ PSComputerName : ServerName
提前感谢您的帮助!
您可以在重新启动服务之前检查 Invoke-Command
的输出:
$Result = Invoke-Command -ComputerName ServerNameHere -ScriptBlock {
# Check whether user is already a member of group
If ((Get-LocalGroupMember 'GroupNameHere').Name -notcontains "$env:USERDOMAIN$env:USERNAME") {
Add-LocalGroupMember -Group 'GroupNameHere' -Member "$env:USERDOMAIN$env:USERNAME"
Write-Output $True
}
Else { Write-Output $False }
}
# If group membership changed, restart service:
If ($Result) {
Stop-Service -Name "ServiceNameHere"
timeout /t 5 /nobreak
Start-Service -Name "ServiceNameHere"
}
感谢@Cpt.Whale 帮助我。
我 运行正在进入 PowerShell“Get-LocalGroupMember - 无法比较数组中的两个元素。” here when you have orphaned SIDs. I came across this post here 中描述的错误帮助我弄清楚如何删除孤立的 SID。下面是新的完全可用的脚本。
重要说明:为此您需要 PowerShell V5.1。此外,您必须启用远程签名。从 Powershell 首先检查一个简单的“Set-ExecutionPolicy RemoteSigned”(也可以 运行“winrm quickconfig”)。
工作脚本:
$strComputer = 'ServerNameHere'
$serviceName = 'ServiceNameHere'
#Remove orphaned SIDs from Windows Local Groups
$computer = [ADSI]("WinNT://" + $strComputer + ",computer")
$group = $computer.psbase.children.find("LocalGroupNameHere")
$group.Name
$Userlist = ([ADSI]"WinNT://$strComputer/LocalGroupNameHere").psbase.Invoke('Members') | % { ([ADSI]$_).InvokeGet('AdsPath') }
#For each user in that list, if the name is a SID, Remove the specific SID from the group.
foreach ($user in $Userlist) {
if ($user -like "WinNT://S-1-5-*") {
#Remove the specific SID from the group, as passed as a string (not an object).
$group.remove($user)}
}
$Result = Invoke-Command -ComputerName $strComputer -ScriptBlock {
# Check whether user is already a member of group
If ((Get-LocalGroupMember 'LocalGroupNameHere').Name -notcontains "$env:USERDOMAIN$env:USERNAME") {
Add-LocalGroupMember -Group 'LocalGroupNameHere' -Member "$env:USERDOMAIN$env:USERNAME"
Write-Output $True
}
Else { Write-Output $False }
}
# If group membership changed, restart service:
If ($Result) {
(get-service -ComputerName $strComputer -Name $serviceName).Stop()
timeout /t 5 /nobreak
(get-service -ComputerName $strComputer -Name $serviceName).Start()
}