用于在PowerShell中调用构造函数的.NET语法

时间:2015-04-27 15:31:41

标签: .net powershell

在PowerShell中使用System.DirectoryServices.AccountManagement命名空间,PrincipalContext类。我无法通过

致电PrincipalContext Constructor (ContextType, String)
[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')

1 个答案:

答案 0 :(得分:4)

在.net类之后使用双冒号用于在该类上调用静态方法。

请参阅:Using Static Classes and Methods

使用以下语法:

[System.DirectoryServices.AccountManagement.PrincipalContext]::PrincipalContext($ContextType, $ContextName)

您正尝试在PrincipalContext类而不是构造函数上调用名为PrincipalContext的静态方法。

  

只能按以下方式调用吗?

AFAIK,您需要使用New-Object cmdlet创建类的实例(调用构造函数)。

  

想要理解为什么它以第二种方式起作用而不是第一种方式。有方法用方括号吗?

它以第二种方式工作,因为您正确地创建了一个新对象并调用了构造函数。它不是第一种方式,因为你没有调用构造函数 - 你试图调用一个静态方法。