我想获取 Active Directory 上的服务器列表,还想包括它们的 IP、操作系统以及它们所属的组织单位。这是我的服务器所属的直接父 OU
我想出了以下 PS 脚本,它几乎满足了我的需要:
> Get-ADComputer -filter * -Properties ipv4Address, OperatingSystem,DistinguishedName | select-object Name, ipv4Address, OperatingSystem, DistinguishedName
但是,OU 名称实际上是 DistinguishedName,很难看清,我真正想要的是该 DistinguishedName 上的第二个 OU 值。我只想显示黄色框中的值,而不是全名。
我尝试使用 Get-ADOrganizationUnit,但结果总是空白。这是我最近的尝试,你能发现我的 PS 脚本是否有错误吗?
> Get-ADComputer -filter * -Properties ipv4Address, OperatingSystem,DistinguishedName | select-object Name, ipv4Address, OperatingSystem, @{label='DistinguishedName';expression={(Get-ADOrganizationUnit $_.DistinguishedName -Property DistinguishedName).Name}}
答案1
字符串操作是你的朋友。
假设:
$dn = "CN=ComputerName,OU=OU1,OU=OU2,OU=OU3,DC=domain,DC=org"
然后:
$OU = $dn.Split(',')[1].Split('=')[1]
它的作用是:
- 在每个“,”处拆分“dn”字符串
- 取第二个元素(“OU=OU1”)
- 在每个“=”处拆分
- 取第二个元素
- 将结果赋给变量‘$OU’
最后,变量 $OU 包含对象所在路径中第一个 OU 的名称(“OU1”)。
是的,您也可以在格式化输出时使用它:
Get-ADComputer -filter * -Properties ipv4Address, OperatingSystem,DistinguishedName | select-object Name, ipv4Address, OperatingSystem, @{label='OU';expression={$_.DistinguishedName.Split(',')[1].Split('=')[1]}}