我正在研究使用Powershell将安全设置从一台服务器复制到另一台服务器的最简单方法,我很好奇它是否可以导入整个组,包括它的Description
和Members
属性?通过Powershell从远程服务器导入本地组
下面是我目前使用的脚本。看来,我可以用下面的错误信息
异常调用“创建”与“2”参数(S)访问本地组使用
ADSI
适配器的远程服务器上,但是Create
命令炸弹:“类型(“HRESULT异常:0x80020005(DISP_E_TYPEMISMATCH)”) At \ prdhilfs02 \ install \ Monet \ ServerUpgrade \ DEVHILWB119 \ Scripts \ LocalUsersAndGroups.ps1:25 char:1+ $ objCreate = $ cn.Create(“Group”,$ objRemote)
$computerName = "DEVWB89"
$objRemote = [ADSI]("WinNT://$computerName/$groupName")
$cn = [ADSI]"WinNT://localhost"
$cn.Create("Group", $objRemote)
编辑
所以我可以通过使用下面的脚本完成我想要的。我可以使用来自远程服务器的组名和说明以及组信息。但是,有没有办法使用Powershell简单地将System.DirectoryServices.DirectoryEntry
对象及其所有属性添加到本地计算机?此外,另一个缺点是我必须为本集团的用户硬编码域名。
$cn = [ADSI]"WinNT://localhost"
$computerName = "DEVWB89"
foreach($groupName in $groupArray)
{
$objRemote = [ADSI]("WinNT://$computerName/$groupName")
$objGroup = $cn.Create("Group", $($objRemote.Name))
$objGroup.setinfo()
$objGroup.description = $objGroup.Description
$objGroup.setinfo()
$Members = @($objRemote.psbase.Invoke("Members"))
$Members | ForEach-Object {$MemberNames += $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null) + ",";}
$tempArray = $MemberNames -split ","
foreach($member in $tempArray)
{
$objGroup.Add("WinNT://SYMETRA/$member, user")
}
}
要启动的Create()可能想要一个字符串,而不是一个'系统。 DirectoryServices.DirectoryEntry'这是什么'$ objRemote' – Matt 2015-03-02 19:14:52
是的,想通了。你知道是否有可能使用System.DirectoryServices.DirectoryEntry对象来创建一个本地组..如果可能和/或语法是什么? – NealR 2015-03-02 19:49:17
'$ cn.Create(“Group”,$ objRemote.Name)'可能会成为组,但不会有你正在寻找的细节。 '$ objRemote.Description'有说明,我不确定是否在会员名单或可用的位置。 – Matt 2015-03-02 19:51:37