Esto es extraño. Estoy intentando cargar el ensamblaje System.DirectoryServices
y luego crear una instancia de la clase System.DirectoryServices.DirectoryEntry
.No se puede cargar un tipo .NET en PowerShell
Aquí es lo que estoy tratando de hacer:
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...
Parece que se ha cargado la multa montaje, pero ahora cuando intento crear una instancia de un nuevo objeto que falla:
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
Sin embargo , si trato de hacerlo de una manera un poco más obtusa, parece funcionar.
$directoryServices = [System.Reflection.Assembly]::LoadWithPartialName("System.DirectoryServices")
$directoryEntryType = $directoryServices.GetType("System.DirectoryServices.DirectoryEntry")
$machine = New-Object $directoryEntryType("WinNT://localhost,computer")
$machine
me demuestra que he creado con éxito el objeto:
distinguishedName :
Path : WinNT://localhost,computer
¿Cuál es la forma correcta de hacer esto? ¿Qué estoy haciendo mal?
Sí, usar el "constructor" de estilo C# no es técnicamente válido en PowerShell. Use los parámetros -TypeName y -ArgumentList en el cmdlet New-Object de la forma en que se diseñaron. –