PowerShell与.NET框架之间的点连接
创始人
2024-07-21 01:01:45
0

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)

}

}

【编辑推荐】

  1. WMI中的Windows PowerShell脚本使用方法
  2. 有关PowerShell脚本你必须知道的十个基本概念
  3. PowerShell与Unix Shell对比:八大实例
  4. 教你如何个性化PowerShell环境

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...