powershell - 列出所有域计算机上的本地管理员组成员身份

标签 powershell dns active-directory

完整的Powershell和脚本编写菜鸟-我什至不了解危险。我需要查询域中的所有PC,以确定它们的本地Administrators组成员身份是什么,并将该输出发送到text / csv文件。

我已经尝试了很多类似的事情:

Import-Module -Name ActiveDirectory
Get-ADComputer -filter * |
Foreach-Object {
 invoke-command {net localgroup administrators} -EA silentlyContinue |
} |
Out-File c:\users\ftcadmin\test.txt

这使我重复了相同的列表,但似乎影响了每台域PC。我猜它实际上并没有在远程PC上运行。还尝试了:
$computers = Get-Content -Path c:\users\ftcadmin\computers.txt
invoke-command {net localgroup administrators} -cn $computers -EA silentlyContinue
Get-Process | Out-File c:\users\ftcadmin\test.txt

它受computer.txt文件中PC的预定列表的限制。我尝试的第三件事是:
$a = Get-Content "C:\users\ftcadmin\computers.txt"
Start-Transcript -path C:\users\ftcadmin\output.txt -append
foreach ($i in $a)
  { $i + "`n" + "===="; net localgroup "Administrators"}
Stop-Transcript

除了输出只是
computername1
====
computername2
====

等等,但没有列出小组成员。

社区有什么想法吗?

最佳答案

将此函数复制并粘贴到PowerShell控制台中。

function Get-LocalGroupMember
{
    [CmdletBinding()]
    param
    (
        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [string]$Name,

        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [string]$ComputerName = 'localhost',

        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [pscredential]$Credential
    )
    process
    {
        try
        {
            $params = @{
                'ComputerName' = $ComputerName
            }
            if ($PSBoundParameters.ContainsKey('Credential'))
            {
                $params.Credential = $Credential
            }

            $sb = {
                $group = [ADSI]"WinNT://./$using:Name"
                @($group.Invoke("Members")) | foreach {
                    $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)
                }
            }
            Invoke-Command @params -ScriptBlock $sb
        }
        catch
        {
            Write-Error $_.Exception.Message
        }
    }
}

然后,尝试使用它:
Get-ADComputer -filter * | foreach {Get-LocalGroupMember -Name 'Administrators' -ComputerName $_.Name }

如果您想进行某种格式化,则可以获取计算机列表,并将所有成员放在每台计算机旁边。
Get-ADComputer -filter * | foreach {
    $members = Get-LocalGroupMember -Name 'Administrators' -ComputerName $_.Name
    [pscustomobject]@{
        'ComputerName' = $_.Name
        'Members' = $members    
    }   
}

这至少需要PowerShell v3。如果没有,我仍然强烈建议您升级到PowerShell v4。

关于powershell - 列出所有域计算机上的本地管理员组成员身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35898423/

相关文章:

powershell - 在 Powershell 中加载 F# 程序集并创建记录表达式

Powershell Get-ChildItem 输出延迟?

powershell - 在文本编辑器中打开所有搜索结果

SQL Server Management Studio 2008 Runas 用户在不同的域上通过 VPN

为创建 AD 帐户编写了 Java 代码,但发生 LDAP 异常

.net - F# 环境集成(用于脚本)

java - 如何更改本地机器/以太网IP地址

Python网络速度极慢

c# - Active Directory 成员与 memberOf

python - 使用 ldap 库的 python 中的 LDAP 身份验证问题