Windows PowerShell和.NET框架:点连接

日期: 2011-02-14 作者:Brandon Shell翻译:Mark 来源:TechTarget中国 英文

Windows PowerShell最好的功能之一就是它对.NET对象模式的直接访问。不幸的是,由于我不是开发人员,且大部分编程概念对我来说也很陌生,这是我在学习PowerShell时最大的障碍。   在我最初用PowerShell工作时,我不知道类别、端口、构造或成员的不同,对对象的概念(来自一个程序员的观点)也不是真得了解。但我确实认为这些概念对学习和使用有Windows PowerShell的.NET很重要。

我还发现,了解一些C#(或至少能读懂它)也非常有帮助。   因此,我将试着通过举例来简短地解释下这些概念并在这个过程中提供一些代码来帮助你。我还会试着(用我有限的能力)来提供一些C#……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

Windows PowerShell最好的功能之一就是它对.NET对象模式的直接访问。不幸的是,由于我不是开发人员,且大部分编程概念对我来说也很陌生,这是我在学习PowerShell时最大的障碍。

  在我最初用PowerShell工作时,我不知道类别、端口、构造或成员的不同,对对象的概念(来自一个程序员的观点)也不是真得了解。但我确实认为这些概念对学习和使用有Windows PowerShell的.NET很重要。我还发现,了解一些C#(或至少能读懂它)也非常有帮助。

  因此,我将试着通过举例来简短地解释下这些概念并在这个过程中提供一些代码来帮助你。我还会试着(用我有限的能力)来提供一些C# PowerShell转换的基本指导。

  让我们从定义开始。此外,如果你是一个开发人员,对于我接下来说的所有事情都请随意发表意见。这些定义都是我对于这些概念推导出来的意见。

  .NET:它是有黑箱代码的架构,这些代码接受特定的输入并返回一个值或对象。基本上,微软为你完成了所有编码——你只须要正确调用它。MSDN是.NET架构的无价资源。

  类别(Class):我在.NET中提及的几乎所有事情都是一个类别。我倾向于认为一个类别是一个样板,示范对象应该是什么样子和它应该有什么特性和类函数。举例来说,一个Microsoft.Win32.RegistryKey对象应该有命名特性和GetValue方法。

  成员(Member):每个类别都有成员,它们是连结起来的特性和类函数。如果你只想看看一个类别必须提供物的概况,这会是个好地方。

  特性(Property):特性是类别两类成员之一。简言之,可以认为它们是对象的属性。举例来说,Microsoft.Win32.RegistryKey类别有Name、SubKeyCount和Value Count等特性,所以每个Microsoft.Win32.RegistryKey对象都能有这些特性。

  类函数(Method):类函数是类别两类成员之一。和特性一样,类函数也由类别限制,但是和属性相反,它们更像类别的功能。Microsoft.Win32.RegistryKey类别有CreateSubKey、DeleteSubkey、SetValue等类函数。和特性一样,每个Microsoft.Win32.RegistryKey对象都能有这些类函数。

  构造函数(Constructor):构造函数是类别的一个类函数,它收集创建一个类别实例所需的信息。我更喜欢将构造定义为使对象有用所需的信息或对象。用System.Data.SqlClient.SqlCommand来举例,有四个不同方法可以让你从该类中创建一个对象。每一方法创建出的对象都有些微不同的数据。

  静态域(Static field):它们和特性相似,但无须创建对象实例就可以获得。在PowerShell中,访问静态成员确实简单。你所要做的就是运用[.NET Class]::StaticField。

  在接下来的例子中,.NET类别System.Math会返回PI值:
[System.Math]::PI.
  静态类函数(Static method):它们就像类函数,但无须创建对象实例就可获得。和你访问静态域的方式相似,你只须运用[.NET Class]::StaticMethods。

  接下来的例子中,Microsoft.Win32.RegistryKey将为一个叫做MyServer的远程机返回Microsoft.Win32.RegistryKey对象。
[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine,”MyServer”)
  现在我们已经涵盖了基本的.NET框架,让我们详细检查下某些PowerShell特性,如创建类别并发现这些类别可得到哪些特性和类函数。

  新对象(New-Object),创建微软.NET框架或COM对象的实例。

  接下来的例子中我会创建一个System.DirectoryServices.ActiveDirectory.DirectoryContext实例:
$Context = new-object System.DirectoryServices.ActiveDirectory.DirectoryContext("DirectoryServer",$Name)
  获取成员(Get-Member),访问对象的特性和类函数。

  接下来的例子将返回$Context对象的所有成员:
$Context | Get-Member
  收集所有.NET问题

  以下是工作中的.NET实例。它运用新对象、构造函数和静态类函数返回活动目录域控制器对象。

function Get-DC
{
    Param($Name,$Domain)     
if($Name)
    {
        $Context = new-object
System.DirectoryServices.
ActiveDirectory.DirectoryContext
("DirectoryServer",$Name)

[System.DirectoryServices.
ActiveDirectory.DomainController]
::GetDomainController($Context)
    }
    if($Domain)
    {
        $Context = new-object
 System.DirectoryServices.
ActiveDirectory.DirectoryContext
("Domain",$Domain)

[System.DirectoryServices.ActiveDirectory.
DomainController]::FindAll($Context)
    }
    if(!$Name -and !$Domain)
    {
        $DCName = ([adsi]"
LDAP://rootDSE")
.dnsHostname.ToString()
        $Context = new-object
System.DirectoryServices.ActiveDirectory.
DirectoryContext("DirectoryServer",$DCName)

[System.DirectoryServices.ActiveDirectory.
DomainController]::GetDomainController($Context)
    }
}

相关推荐