2012-06-05 3 views
2

Мне нужно убрать текущую машину OU. Я нашел код VB, который мог бы это сделать, но я хотел бы просто сделать это в скрипте, не имея необходимости называть VB. Любые идеи, код VB ниже.Powershell Pull Current OU

Set objSysInfo = CreateObject("ADSystemInfo") 
DN = objSysInfo.ComputerName 
WScript.Echo DN 

-Josh

ответ

1

Вы можете получить 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 
    } 
} 
+0

Привет, но это не работает. Извините, может быть, я что-то не замечаю, поскольку я новичок в PowerShell? – JoshP

+0

Никогда не думай, у меня было что-то закрытое, что мне было нужно: \ Все кажется хорошо сейчас СПАСИБО! :) – JoshP

+0

Ok столкнулся с другой проблемой, я пытаюсь использовать вывод в инструкции switch на основе OU. Однако, похоже, он не работает. – JoshP

0

Вы не можете использовать ADSystemInfo непосредственно в Powershell (или, по крайней мере, это не так просто) в соответствии с этим page

Ну, хорошо, что это не совсем верно; можно использовать ADSystemInfo из PowerShell; однако этот процесс далек от простого и даже не интуитивного. Это связано с тем, что в ADSystemInfo отсутствует «обертка», что упрощает доступ к объекту с .NET-языка, такого как Windows PowerShell. Это приводит к множеству кривых, включающих классы .NET Reflection, метод InvokeMember и, как можно ближе, много молитвы.

Но страница предоставляет примеры для выполнения запросов AD с использованием объекта .NET System.DirectoryServices.DirectorySearcher. Ниже приведен пример со страницы, слегка измененной в соответствии с вашим сценарием VB:

$strName = $env:computername 
$strFilter = "(&(objectCategory=Computer)(Name=$strName))" 

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher 
$objSearcher.Filter = $strFilter 

$objPath = $objSearcher.FindOne() 
$objPath.GetDirectoryEntry().distinguishedname 
Смежные вопросы