roger 发表于 2020-10-18 20:06:45

Active Directory PowerShell


文章前言  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查看可用DCGet-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]
查看完整版本: Active Directory PowerShell