6

これは奇妙なものです。System.DirectoryServicesアセンブリを読み込んでから、System.DirectoryServices.DirectoryEntryクラスのインスタンスを作成しようとしています。

これが私がやろうとしていることです:

PS C:> [System.Reflection.Assembly]::LoadWithPartialName("System.DirectoryServices")

GAC    Version        Location
---    -------        --------
True   v2.0.50727     C:\Windows\assembly\GAC_MSIL\System.DirectoryServices\2.0.0.0__b03f5f7f11d50a3a\System.Directo...

アセンブリを正常にロードしたようですが、新しいオブジェクトをインスタンス化しようとすると失敗します:

PS C:\> $computer = new-object [System.DirectoryServices.DirectoryEntry]("WinNT://localhost,computer")
New-Object : Cannot find type [[System.DirectoryServices.DirectoryEntry]]: make sure the assembly containing this type
is loaded.
At line:1 char:23
+ $computer = new-object <<<<  [System.DirectoryServices.DirectoryEntry]("WinNT://localhost,computer")
    + CategoryInfo          : InvalidType: (:) [New-Object], PSArgumentException
    + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand

ただし、もう少し鈍感な方法でやろうとすると、うまくいくようです。

$directoryServices = [System.Reflection.Assembly]::LoadWithPartialName("System.DirectoryServices")
$directoryEntryType = $directoryServices.GetType("System.DirectoryServices.DirectoryEntry")
$machine = New-Object $directoryEntryType("WinNT://localhost,computer")
$machine

オブジェクトが正常に作成されたことを示しています。

distinguishedName :
Path              : WinNT://localhost,computer

これを行う適切な方法は何ですか?私は何を間違っていますか?

4

3 に答える 3

7

あなたのnew-object構文は少しずれています。これを試して:

[System.Reflection.Assembly]::LoadWithPartialName("System.DirectoryServices")
$machine = new-object -typeName System.DirectoryServices.DirectoryEntry -argumentList "WinNT://localhost,computer"
于 2012-05-24T14:16:03.940 に答える
4

何もロードする必要はありません。adsi 型アクセラレータを使用します。

[adsi]"WinNT://localhost,computer"
于 2012-05-24T15:23:02.863 に答える
0

New-Objectの構文が間違っていると思います。[New-Objectに関するいくつかのドキュメント]からの抜粋:1

New-Object System.DirectoryServices.DirectoryEntry("WinNT://localhost,computer")
于 2012-05-24T14:25:36.293 に答える