7

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


これが 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);
}
4

8 に答える 8

11

これを試してください(v2が必要です):

$filter = "(&(objectCategory=computer)(objectClass=computer)(cn=$env:COMPUTERNAME))"
([adsisearcher]$filter).FindOne().Properties.distinguishedname
于 2012-06-21T21:22:32.653 に答える
5

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

モデレーター、これは本当に Shay Levy の回答に対するコメントのはずですが、私は新しいのでコメントできません。

于 2014-01-31T04:28:05.547 に答える
4

コマンドレット Get-ADComputer (PS バージョン 2.0) が役に立ちます。

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

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

于 2013-05-14T08:43:07.407 に答える
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
于 2012-06-21T20:51:31.000 に答える
-1

以下を使用して、環境から取得できると思います。

$computer = gc env:computername

それとも、これはまさにあなたが望んでいないことですか?私はpowershellがひどいです。

于 2012-06-21T20:34:54.960 に答える