【问题标题】:Powershell Script to run querieis against Active Directory针对 Active Directory 运行查询的 Powershell 脚本
【发布时间】:2021-01-08 10:16:17
【问题描述】:

我有以下 Powershell 脚本:

$domainObj = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
$PDC = ($domainObj.PdcRoleOwner).Name
$SearchString = "LDAP://"
$SearchString += $PDC + "/"
$DistinguishedName = "DC=$($domainObj.Name.Replace('.', ',DC='))"
$SearchString += $DistinguishedName
$Searcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]$SearchString)
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$Searcher.SearchRoot = $objDomain
$Searcher.filter="samAccountType=805306368"
$Result = $Searcher.FindAll()
Foreach($obj in $Result)
{
    Foreach($prop in $obj.Properties)
    {  
        $prop
    }
    Write-Host "------------------------"
}

我需要对此进行修改以执行以下操作,但我不确定如何应用正确的过滤器,我认为需要进入$Searcher.filter

  1. 将脚本更改为仅返回 Domain Admins 组的成员。
  2. 更改脚本以返回域中的所有计算机。
  3. 添加过滤器以仅返回运行 Windows 10 的计算机。

【问题讨论】:

  • 你有什么理由不使用Get-ADComputerGet-ADUser/Get-ADGroup
  • Get-ADUser 等 cmdlet 默认仅在 DC 上。脚本的重点是能够在没有这些的情况下进行查询。
  • 您可以安装 rsat 工具以使用这些功能
  • 脚本的重点是能够在没有这些的情况下进行查询。
  • 看看脚本github.com/lazywinadmin/PowerShell/blob/master/… 它确实查询计算机,然后您可以过滤输出,如Get-Domaincomputer -DomainDN 'DOMAINNAME' -ComputerName * | where {operatingsystem -like 'Windows 10*'}

标签: powershell active-directory


【解决方案1】:

您可以执行以下操作:

$domainObj = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
$PDC = ($domainObj.PdcRoleOwner).Name
$searchString = "LDAP://{0}/DC={1}" -f $PDC,$domainObj.Name.Replace('.', ',DC=')
$Searcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]$SearchString)
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$Searcher.SearchRoot = $objDomain

# Domain Admins
$Searcher.filter='samAccountName=Domain Admins'
$DAs = $Searcher.FindAll().Properties.Member

# All Computers
$Searcher.filter='objectClass=Computer'
$Computers = $Searcher.FindAll()

# Windows 10
$Computers | Where {
    $_.Properties.OperatingSystemVerison -match '^10\D' -and $_.Properties.OperatingSystem -notmatch 'Server'
}

【讨论】:

  • 您好,谢谢,但我无法让它工作。不过,我确实找到了解决方案,我会尽快发布。我确实使用了您的解决方案来返回域中的所有计算机。
【解决方案2】:

获取所有域管理员(在广告组“管理员”中):

Get-ADGroupMember -Identity Administrators

获取使用 Windows 10 的计算机

Get-ADComputer -Filter {operatingsystem -like 'Windows 10*'}

参考请看:

【讨论】:

  • 这不是答案。我确实特别说我需要修改脚本。默认情况下,Get-ADComputer 等 cmdlet 仅安装在 DC 上。
  • 您可以访问 DC 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 2019-01-26
  • 2018-09-29
相关资源
最近更新 更多