2012-06-21 22 views
5

実行中のコンピュータの完全識別名(CN=MyComputer, OU=Computers, DC=vw, DC=local)を見つける必要があるスクリプトがありますが、ActiveDirectoryモジュールがこのスクリプトが実行されるすべてのコンピュータで使用できます。 Get-ADComputer $Env:COMPUTERNAMEを使用せずに現在のコンピュータの完全識別名を取得する方法はありますか?ActiveDirectoryモジュールを使用せずに、PowerShellで現在のコンピュータの識別名を取得


念のために、これはXYの問題で、私は何をしようとしていることは、特定のOUにコンピュータを移動しているが、私は私が実行しているコンピュータのASDIエントリを取得する方法が必要です。

$computer = gc env:computername 

それとも、これはあなたがしたくない正確に何であるの:

[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は必要ありません。2行目を '$ computer = [ADSI](([adsisearcher] $ filter).FindOne()。Path)'に変更しました。 'MoveTo'コマンドです。 –

+2

ありがとうございます。また、([adsisearcher] $ filter).FindOne()。GetDirectoryEntry() –

+0

これは私のためにnullを返しました。 –

-1

私はあなたが使用することにより、環境からそれを得ることができると思いますか?私はパワーシェルにひどいです。

+0

これはコンピュータの一般的な名前ではありません。私はその識別名**が必要です。 "CN = MyComputあなたの答えは "MyComputer" –

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'がnullの場合、FindAll()も結果を返しません。変数展開後に得られるフィルタは '(&(objectCategory = computer)(objectClass = computer)(samAccountName =(VWDEV)$))'です。私は完全にLDAPのqueiresでスピードアップしていませんが、それはコンピュータ名と$ –

+0

の間にかっこを持っている私に奇妙に思えますいいえ、VWDEVの周りに冗談はありません。フィルタを ''(&(objectCategory = computer)(objectClass = computer)(samAccountName = $($ env:ComputerName)$)に変更してください。 "" –

+0

どちらも私のために働いていません。 –

3

コマンドレットは、Get-ADComputer(2.0版PS)を助けることができます。

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

コンピュータの名前は、$ env:COMPUTERNAMEのように短い名前にする必要があります。

+1

FYI:Windows 7でRSATが必要です –

1

ADSIsearcherメソッドには注意してください。同じフォレストの異なるドメインに同じ名前のコンピュータが2台ある場合(この記事の返された検索を実行する原因となった問題)、この方法では正しい名前が返されるとは限りません。このメソッドは、単にComputerName環境変数によって返された名前のコンピュータをADで検索します。フォレスト内に複数のドメインを持つ環境にある場合は、コンピュータが接続されているドメインを相互参照するようにしてください。

司会者、これは本当にShay Levyの答えに対するコメントになるはずですが、私が新しいのでコメントできません。

+0

ボードにようこそ。評判が50に達すると、どこにでもコメントすることができます。コメントありがとう。 – Onots

0

これを試してみてください...

​​

$cnObj = Get-ADComputer $cn

$ou = $cnObj.distinguishedname

$ou

"コンピュータ名を入力します" .....理解しやすいし、同様に覚えやすいです
+1

Get-ADComputerはアクティブディレクトリモジュールの一部で、システムにインストールされていてもインストールされていなくてもかまいません(問題の全体的なポイントは常に機能し、 "オプション"モジュールに依存しない方法です) –

関連する問題