2012-06-21 38 views
5

我有一個腳本,我需要找到計算機的運行它的完整專有名稱(CN=MyComputer, OU=Computers, DC=vw, DC=local),但我不能保證ActiveDirectory模塊會在該腳本將運行的所有計算機上均可用。有沒有辦法在不使用Get-ADComputer $Env:COMPUTERNAME的情況下獲取當前計算機的完整專有名稱?獲取在PowerShell中當前計算機的專有名稱,而不使用的ActiveDirectory模塊


以防萬一,這是一個XY問題,我所要做的是將計算機移動到特定的OU,但我需要一個方式來獲得我上運行的計算機的ASDI項目。

[ADSI]$computer = ("LDAP://" + $localDN) 
if($Production) 
{ 
    [ADSI]$destination = 'LDAP://ou=Production,ou=Computers,ou=VetWeb,dc=vw,dc=local' 
    $computer.MoveTo($destination); 
} 
else 
{ 
    [ADSI]$destination = 'LDAP://ou=Test,ou=Computers,ou=VetWeb,dc=vw,dc=local' 
    $computer.MoveTo($destination); 
} 

回答

9

試試這個(需要V2):

$filter = "(&(objectCategory=computer)(objectClass=computer)(cn=$env:COMPUTERNAME))" 
([adsisearcher]$filter).FindOne().Properties.distinguishedname 
+0

謝謝,那個作品完美。實際上,我甚至不需要Properties.distingushedname,我只是將第二行更改爲'$ computer = [ADSI](([adsisearcher] $ filter).FindOne().Path)',我可以將它與我的'MoveTo'命令。 –

+2

謝謝。你也可以通過以下方式獲得計算機對象:([adsisearcher] $ filter).FindOne()。GetDirectoryEntry() –

+0

這對我而言返回null。 –

-1

我想你可以從環境中通過使用獲得它:

$computer = gc env:computername 

或者這正是你不想要什麼?我非常害怕PowerShell。

+0

沒有那是計算機的通用名稱,我需要它的**專有名稱**,我需要「CN = MyComput呃,DC = example,DC = com「,你的回答只是返回」我的計算機「 –

0

嘗試這樣:

$de = New-Object System.DirectoryServices.DirectoryEntry 
$ds = New-Object System.DirectoryServices.DirectorySearcher 
$ds.SearchRoot = $de 
$ds.Filter = "(&(objectCategory=computer)(objectClass=computer)(samAccountName=($($env:ComputerName))$))" 
$ds.SearchScope = "SubTree" 

$r = $ds.FindOne() 

$r.Path 
+0

我嘗試過,但是在FindOne()後''r'爲空,'FindAll()'也返回結果。我在變量擴展後得到的過濾器是'(&(objectCategory = computer)(objectClass = computer)(samAccountName =(VWDEV)$))'看起來是否正確?我並沒有完全瞭解LDAP queires的速度,但在計算機名稱和$ –

+0

之間插入括號似乎很奇怪,不應該在VWDEV周圍留下空位。將過濾器更改爲'「(&(objectCategory = computer)(objectClass = computer)(samAccountName = $($ env:ComputerName)$))」' –

+0

這些都不適合我。 –

3

cmdlet將獲取-ADComputer(PS版2.0)可以提供幫助。

PS:\> $(Get-ADComputer 'mycomputer').distinguishedName 

計算機的名稱應該是短名稱,例如$ env:COMPUTERNAME。

+1

僅供參考:需要Windows 7上的RSAT –

1

請注意ADSIsearcher方法。如果在同一個林中的不同域中有兩臺具有相同名稱的計算機(這是導致我執行返回本文的搜索的問題),則此方法不能保證返回正確的一個。此方法將在AD中簡單搜索具有由ComputerName環境變量返回的名稱的計算機。如果您位於林中有多個域的環境中,則需要確保交叉引用計算機加入的域。

主持人,這真的應該是謝伊的回答,但我不能發表評論,因爲我是新的。

+0

歡迎參加。一旦你達到50的聲望,你將能夠在任何地方發表評論。感謝您的評論。 – Onots

0

試試這個...易理解,易記,以及.....

​​「輸入計算機名」

$cnObj = Get-ADComputer $cn

$ou = $cnObj.distinguishedname

$ou

+1

Get-ADComputer不是Active Directory模塊的一部分,它可能安裝在系統中或者可能不安裝在系統中(問題的關鍵在於要有一種方法,它總是能夠工作,而不依賴於「可選」模塊) –

相關問題