現在のマシンの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
}
}
このページによると、Powershellで直接使用することはできませんADSystemInfo
(または少なくとも簡単ではありません)
ええと、それは完全に真実ではありません。PowerShell内からADSystemInfoを使用することが可能です。ただし、このプロセスは簡単ではなく、直感的でもありません。これは、ADSystemInfoに、WindowsPowerShellなどの.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