Задача: скопировать членов одной локальной группы в другую локальную группу на клиентском компьютере Windows
Собственно задача возникла в продолжении лечения SCCM Remote Connection Profiles – исправляем глюк с именем группы. Поэтому ниже скрипт приведён в виде для решения именно той задачи.
Казалось бы, можно просто включить одну группу в другую, но на локальной SAM это не работает!
Скопировать членов одной группы в другую звучит достаточно просто, но внезапно оказалось, что всё просто при работе с группами в Active Directory с помощью стандартного модуля Powershell, а вот в случае работы с локальной базой SAM возможности Powershell остались на уровне версии 1.0. В попытках сделать как-то попроще, перепробовал несколько API: ADSI, WMI, .Net – и решил, что первый наиболее простой.
############## # $Computer = $env:COMPUTERNAME # Get localized name of well-known "Remote Desktop Users" group # $a=Get-WmiObject -Query "Select * From Win32_Group Where LocalAccount = TRUE And SID = 'S-1-5-32-555' " $LocalGroup1 = $a.Name # Get members of "Remote Desktop Users" group # $g1 = [ADSI]"WinNT://$Computer/$LocalGroup1,group" $members1 = $g1.psbase.Invoke("Members") $members111 = $members1 | % { ([System.DirectoryServices.DirectoryEntry]$_).Path } # Get members of "Remote PC Connect" group # $LocalGroup2 = "Remote PC Connect" $g2 = [ADSI]"WinNT://$Computer/$LocalGroup2,group" $members2 = $g2.psbase.Invoke("Members") $members222 = $members2 | % { ([System.DirectoryServices.DirectoryEntry]$_).Path } # Find users who is in "Remote PC Connect" group and not in "Remote Desktop Users" group # and add them to "Remote Desktop Users" group # [array]$members3 = $members222 | ? { $members111 -notcontains $_ } # Unconmment for remediate phase (Add members to group) #$members3 | % { $g1.psbase.Invoke("Add", $_) } # Unconmment for check phase #$members3.Count -eq 0
Filed under: Configuration Manager, Powershell | Tagged: ConfigMgr, Configuration Manager, Powershell |
Добавить комментарий