我需要能够拉出当前机器 OU。我找到了一些可以做到这一点的 VB 代码,但我希望能够在脚本中执行此操作而不必调用 VB。任何想法,VB代码如下。
Set objSysInfo = CreateObject("ADSystemInfo")
DN = objSysInfo.ComputerName
WScript.Echo DN
-乔什
我需要能够拉出当前机器 OU。我找到了一些可以做到这一点的 VB 代码,但我希望能够在脚本中执行此操作而不必调用 VB。任何想法,VB代码如下。
Set objSysInfo = CreateObject("ADSystemInfo")
DN = objSysInfo.ComputerName
WScript.Echo DN
-乔什
您可以使用此函数获取 ADSystemInfo。
function Get-LocalLogonInformation
{
try
{
$ADSystemInfo = New-Object -ComObject ADSystemInfo
$type = $ADSystemInfo.GetType()
New-Object -TypeName PSObject -Property @{
UserDistinguishedName = $type.InvokeMember('UserName','GetProperty',$null,$ADSystemInfo,$null)
ComputerDistinguishedName = $type.InvokeMember('ComputerName','GetProperty',$null,$ADSystemInfo,$null)
SiteName = $type.InvokeMember('SiteName','GetProperty',$null,$ADSystemInfo,$null)
DomainShortName = $type.InvokeMember('DomainShortName','GetProperty',$null,$ADSystemInfo,$null)
DomainDNSName = $type.InvokeMember('DomainDNSName','GetProperty',$null,$ADSystemInfo,$null)
ForestDNSName = $type.InvokeMember('ForestDNSName','GetProperty',$null,$ADSystemInfo,$null)
PDCRoleOwnerDistinguishedName = $type.InvokeMember('PDCRoleOwner','GetProperty',$null,$ADSystemInfo,$null)
SchemaRoleOwnerDistinguishedName = $type.InvokeMember('SchemaRoleOwner','GetProperty',$null,$ADSystemInfo,$null)
IsNativeModeDomain = $type.InvokeMember('IsNativeMode','GetProperty',$null,$ADSystemInfo,$null)
}
}
catch
{
throw
}
}
根据this page ,您不能ADSystemInfo
直接在Powershell中使用(或者至少不容易)
好吧,这并不完全正确。可以在 PowerShell 中使用 ADSystemInfo;然而,这个过程远非简单,甚至远非直观。这是因为 ADSystemInfo 缺少一个“包装器”,它使得从 Windows PowerShell 等 .NET 语言访问对象变得容易。这导致了很多涉及 .NET Reflection 类、InvokeMember 方法的旋转,并且,据我们所知,很多祈祷。
System.DirectoryServices.DirectorySearcher
但该页面确实提供了使用.NET 对象执行 AD 查询的示例。这是页面中的一个示例,该示例稍作修改以匹配您的 VB 脚本:
$strName = $env:computername
$strFilter = "(&(objectCategory=Computer)(Name=$strName))"
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.Filter = $strFilter
$objPath = $objSearcher.FindOne()
$objPath.GetDirectoryEntry().distinguishedname