文章前言

Microsoft为Windows Server 2008 R2以及更高版本提供了多个Active Directory PowerShell cmdlet,例如:Get-Aduser、Get-Adcomputer和Get-a object等等,这些cmdlet可以帮助我们检索AD的许多信息,本篇文章主要介绍通过Windows Server 2008 R2/2012/2016或更高版本下通过Active Directory PowerShell cmdlet来进行域内信息收集的方法。

使用前提

在使用Windows客户端上使用时,我们需要安装远程服务器管理工具(RSAT)并确保已安装Active Directory PowerShell模块,否则在导入模块时会出现以下报错提示:

关于确认是否已经安装Active Directory PowerShell我们可以通过以下命令来查看是否包含ActiveDirectory模块

Get-Module -ListAvailable


在Windows Server 2008 R2或者更高的版本的powershell控制台我们需要在使用之前执行以下命令将模块作为功能添加到服务器管理器中:

Import-Module ServerManager
Add-WindowsFeature RSAT-AD-PowerShell


下面的演示接在Windows Server 2012上进行~

简易示例

powershell v2.0及之前powershell版本,我们在使用时需要先导入ActiveDirectory模块,下面是一个简易的AD PowerShell cmdlet使用示例:

Import-Module ActiveDirectory
$UserID = "Al1ex"
Get-ADUser $UserID property *


在PowerShell v3版本以及高版本,无需运行第一行命令,因为PowerShell将识别必要的模块和自动加载它,而且一旦加载了Active Directory PowerShell模块,就可以像浏览文件系统那样浏览AD,例如:

Ps> Import-module ActiveDirectory
Ps> dir ad:
Ps> set-location ad:
Ps> set-location  "dc=hacke,dc=testlab"
Ps> dir

基本模块

PowerShell AD模块的Cmdlet个数在各个操作系统中如下:

  • Windows Server 2008 R2: 76 cmdlets
  • Windows Server 2012: 135 cmdlets
  • Windows Server 2012 R2: 147 cmdlets
  • Windows Server 2016: 147 cmdlets

可以通过在powershell中执行以下命令来查看:

(Get-Command -module ActiveDirectory).count


WINDOWS SERVER 2008 R2主要的cmdlets:

  • Get/Set-ADForest
  • Get/Set-ADDomain
  • Get/Set-ADDomainController
  • Get/Set-ADUser
  • Get/Set-ADComputer
  • Get/Set-ADGroup
  • Get/Set-ADGroupMember
  • Get/Set-ADObject
  • Get/Set-ADOrganizationalUnit
  • Enable-ADOptionalFeature
  • Disable/Enable-ADAccount
  • Move-ADDirectoryServerOperationMasterRole
  • New-ADUser
  • New-ADComputer
  • New-ADGroup
  • New-ADObject
  • New-ADOrganizationalUnit

WINDOWS SERVER 2012含以版本一些新的cmdlets:

  • Get/Set-ADResourcePropertyListMember
  • Get/Set-ADAuthenticationPolicy
  • Get/Set-ADAuthenticationPolicySilo
  • Get/Set-ADCentralAccessPolicy
  • Get/Set-ADCentralAccessRule
  • Get/Set-ADResourceProperty
  • Get/Set-ADResourcePropertyList
  • Get/Set-ADResourcePropertyValueType
  • Get/Set-ADDCCloneConfigFile
  • Get/Set-ADReplicationAttributeMetadata
  • Get/Set-ADReplicationConnection
  • Get/Set-ADReplicationFailure
  • Get/Set-ADReplicationPartnerMetadata
  • Get/Set-ADReplicationQueueOperation
  • Get/Set-ADReplicationSite
  • Get/Set-ADReplicationSiteLink
  • Get/Set-ADReplicationSiteLinkBridge
  • Get/Set-ADReplicationSubnet
  • Get/Set-ADReplicationUpToDatenessVectorTable
  • Sync-ADObject

我们可以通过在powershell下执行以下命令查看当前ActiveDirectory可用的cmdlet:

Get-Command -module ActiveDirectory

全局目录

森林全局目录

Import-Module ActiveDirectory
Get-ADForest
$ADForest.GlobalCatalogs

域DCS全局目录

Import-Module ActiveDirectory
Get-ADDomainController -filter { IsGlobalCatalog -eq $True}

非域DCS全局目录

Import-Module ActiveDirectory
Get-ADDomainController -filter { IsGlobalCatalog -eq $False }

基本使用

Get-ADForest

Get-ADForest用于获取森林信息,使用示例如下:

示例一:获取当前林信息

Import-Module ActiveDirectory
Get-ADForest


也可以通过以下指令来获取:

Get-ADForest -Current LocalComputer

示例二:获取登录用户所处林信息

Get-ADForest -Current LoggedOnUser

示例三:获取指定域的林信息

Get-ADForest hacke.testlab

Get-ADRootDSE

Get-ADRootDSE用于获取有关LDAP服务器的信息,使用示例如下:

Get-ADRootDSE

Get-ADDomain

Get-ADDomain用户获取域的信息,常用示例如下:

示例一:获取指定域信息

Get-ADDomain hacke.testlab

示例二:获取当前域信息

Get-ADDomain -Current LocalComputer

示例三:获取当前登录域信息

Get-ADDomain -Current LoggedOnUser

Get-ADDomainController

Get-ADDomainController用于获取域控信息,示例如下:

示例一:获取当域控信息

Get-ADDomainController

示例二:使用discovery查看可用DC

Get-ADDomainController -Discover -Site "Default-First-Site-Name"


或者也可以使用以下指令来查询:

Get-ADDomainController -Discover -Site "Default-First-Site-Name" -ForceDiscover

示例三:获取给定站点中的所有全局目录

Get-ADComputer

Get-AdComputer用于获取关于AD中计算机对象的信息,使用示例如下:

示例一:获取域中指定计算机信息

Get-ADComputer "WIN7-test" -Properties *

示例二:获取域中所有的计算机主机

Get-ADComputer -Filter *

Get-ADUser

Get-ADUser用于获取AD用户的信息,使用示例如下:

示例一:获取指定用户所有信息

Get-ADUser Al1ex -Properties *

示例二:模糊查询域用户账户

Get-ADUser -Filter 'Name -like "*Al1*"' | FT Name,SamAccountName -A


这其实也可以这样用:

Get-ADUser -Filter 'Name -like "*Al1*"' | FT Name,SamAccountName -A

示例三:获取AD Kerberos服务帐户

Get-ADUser -filter {ServicePrincipalName -like "*"} -property ServicePrincipalName

Get-ADGroup

Get-ADGroup用于获取AD组的信息,使用示例如下:

示例一:特定用户组信息

Get-ADGroup administrators

示例二:获取用户组成员

get-adgroup -Identity S-1-5-32-544 -Properties member

示例三:获取所有安全组信息

get-adgroup -Filter 'GroupCategory -eq "Security" -and GroupScope -ne "DomainLocal"'  //除去DomainLocal

Get-ADGroupMember

Get-ADGroupMember用于获取AD组成员信息,使用示例如下:

示例一:获取Administrator组成员信息

get-adgroupmember -Identity administrators

示例二:获取Enterprise Admins成员信息

get-adgroupmember "Enterprise Admins" -recursive

Get-ADDefaultDomainPasswordPolicy

Get-ADDefaultDomainPasswordPolicy用于获取当前域密码策略,使用示例如下:

示例一:获取域用户密码策略

Get-ADDefaultDomainPasswordPolicy -Current LoggedOnUser

示例二:获取指定域密码策略

Get-ADDefaultDomainPasswordPolicy -Identity hacke.testlab

Get-ADReplicationSite

Get-ADReplicationSite用于获取AD站点信息,示例如下:

Get-ADReplicationSite -Filter *

Get-ADPrincipalgroupmembership

get-adprincipalgroupmembership用于检索用户所属的组信息,使用示例如下:

Get-ADPrincipalgroupmembership -Identity Administrator

Get-ADTrust

Get-ADTrust用于获取域信任关系,示例如下(笔者这里为单域,所以信息为空)

Get-ADTrust -Filter *

参考链接

https://adsecurity.org/?p=3719
https://docs.microsoft.com/en-us/powershell/module/activedirectory/?view=winserver2012-ps
https://adsecurity.org/wp-content/uploads/2015/04/NoVaPowerShellUsersGroup2015-ActiveDirectoryPowerShell.pdf

点击收藏 | 1 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖