Использование пространства имен System.DirectoryServices.AccountManagement, PrincipalContext класс в PowerShell. Я не могу назвать PrincipalContext Constructor (ContextType, String)
через.NET синтаксис для вызова конструктора в PowerShell
[System.DirectoryServices.AccountManagement.PrincipalContext]::PrincipalContext($ContextType, $ContextName)
Я получаю ошибку "Method invocation failed because [System.DirectoryServices.AccountManagement.PrincipalContext] does not contain a method named 'PrincipalContext'.
"
Может это только можно назвать следующим образом?
New-Object -TypeName System.DirectoryServices.AccountManagement.PrincipalContext -ArgumentList $ContextType, $ContextName
Хотел бы понять, почему это работает второй путь, но не первый способ. Есть ли способ сделать это с помощью квадратных скобок?
Полный код:
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
$ContextName = $env:COMPUTERNAME
$ContextType = [System.DirectoryServices.AccountManagement.ContextType]::Machine
$PrincipalContext = [System.DirectoryServices.AccountManagement.PrincipalContext]::PrincipalContext($ContextType, $ContextName)
$IdentityType = [System.DirectoryServices.AccountManagement.IdentityType]::SamAccountName
[System.DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity($PrincipalContext, $IdentityType, 'Administrators')
Пожалуйста, оставьте это. Я не знаю, что это значит для меня в этом контексте. –
@ Entbark - Я расширил свой первоначальный ответ. – dugas
Для тех, кто находит это, в Powershell v5.1 (возможно, даже 5.0 - но не раньше) классы имеют конструкторы, доступные из нотации квадратной скобки. Это позволяет Powershell ISE использовать Intellisense для подписей конструктора. Вызывается так: '[System.DirectoryServices.AccountManagement.PrincipalContext] :: new ($ ContextType, $ ContextName)'. –