繁体   English   中英

使用Powershell从本地组中获取域用户

[英]Fetching domain users from local groups with powershell

我想从一台服务器迁移到另一台服务器,因此需要在新服务器中添加一些本地组。 在这些本地组中,添加的用户属于该域。

例如:

          Server           | Members

---------------------------|------------------

Server\Group1              | Domain\User1, Domain\User2
Server\Group2              | Domain\User2, Domain\User3

以下链接https://www.petri.com/use-powershell-to-find-local-groups-and-members似乎可以解决此问题,但是我得到了意外的结果

这是PowerShell脚本

# set variables
$server = $env:COMPUTERNAME
$localgroup = "Administrators"
$Group= [ADSI]"WinNT://$Server/$LocalGroup,group"

# get users name
$members = $Group.psbase.Invoke("Members")
$members | ForEach-Object 
{ 
    $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null) 
}

Get-WMIObject win32_group -filter "LocalAccount='True'" -computername $Server | Select PSComputername,Name,@{Name="Members";Expression={$_.GetRelated("Win32_UserAccount").Name -join ";"}}

显示的输出是两列(尽管应该是3列,但是在PSComputerName空的地方未显示PSComputerName

好吧,这就是我实现输出并将其导出到* .csv文件的方式

# set variables
$server = $env:COMPUTERNAME

$tableOutput = New-Object System.Collections.ArrayList

# get members
Function Get-Members($groupName){
    $testgroup = [ADSI]"WinNT://$Server/$tmpGroupName,group"
    $members = New-Object System.Collections.ArrayList
    $testgroup.psbase.Invoke("Members") | ForEach-Object{
    $searchFilter = $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null) -replace "\."," "
        $tmpUser = Get-ADUser -Filter {(Name -like $searchFilter) -or (SamAccountName -like $searchFilter)}
        if($tmpUser){
            [void]$members.Add($tmpUser.UserPrincipalName)
        }
    }       
    $members
}

Get-WMIObject win32_group -Filter { (LocalAccount='True') } -computername $Server | ForEach-Object{         
    $tmpGroup = $_ 

    # get data
    $tmpGroupName = $tmpGroup.Name
    $members = Get-Members($tmpGroupName)             
    $tmpGroupDescription = $tmpGroup.Description        

    # save into object        
    $groupObject = New-Object -TypeName PSObject
    $groupObject | Add-Member -MemberType NoteProperty -Name GroupName -Value $tmpGroupName
    $groupObject | Add-Member -MemberType NoteProperty -Name GroupDescription -Value $tmpGroupDescription
    $groupObject | Add-Member -MemberType NoteProperty -Name UsersList -Value $members      

    [void]$tableOutput.Add($groupObject)
}

$tableOutput | Select GroupName, GroupDescription, @{Name='Users';Expression={$_.UsersList -join ','}} | Export-CSV -Path 'C:\test\users.csv' -Delimiter ';' -NoTypeInformation

任何纠正将不胜感激。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM