通过New-Object创建新对象
如果使用构造函数创建一个指定类型的实例对象,该类型必须至少包含一个签名相匹配的构造函数。例如可以通过字符和数字创建一个包含指定个数字符的字符串:
PS C:Powershell> New-Object String(‘*',100)
</div>
*******************************************************************************
*********************
为什么支持上面的方法,原因是String类中包含一个Void .ctor(Char, Int32) 构造函数
PS C:Powershell> [String].GetConstructors() | foreach {$_.tostring()}
Void .ctor(Char*)
Void .ctor(Char*, Int32, Int32)
Void .ctor(SByte*)
Void .ctor(SByte*, Int32, Int32)
Void .ctor(SByte*, Int32, Int32, System.Text.Encoding)
Void .ctor(Char[], Int32, Int32)
Void .ctor(Char[])
Void .ctor(Char, Int32)
</div>
通过类型转换创建对象
通过类型转换可以替代New-Object
PS C:Powershell> $date="1999-9-1 10:23:44"
PS C:Powershell> $date.GetType().fullName
System.String
PS C:Powershell> $date
1999-9-1 10:23:44
PS C:Powershell> [DateTime]$date="1999-9-1 10:23:44"
PS C:Powershell> $date.GetType().FullName
System.DateTime
PS C:Powershell> $date
1999年9月1日 10:23:44
</div>
如果条件允许,也可以直接将对象转换成数组
PS C:Powershell> [char[]]"mossfly.com"
m
o
s
s
f
l
y
.
c
o
m
PS C:Powershell> [int[]][char[]]"mossfly.com"
109
111
115
115
102
108
121
46
99
111
109
</div>
加载程序集
自定义一个简单的C#类库编译为Test.dll:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
namespace Test
{
public class Student
{
public string Name { set; get; }
public int Age { set; get; }
public Student(string name, int age)
{
this.Name = name;
this.Age = age;
}
public override string ToString()
{
return string.Format("Name={0};Age={1}", this.Name,this.Age);
}
}
}
</div>
在Powershell中加载这个dll并使用其中的Student类的构造函数生成一个实例,最后调用ToString()方法。
PS C:Powershell> ls .Test.dll
目录: C:Powershell
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2012/1/13 10:49 4608 Test.dll
PS C:Powershell> $TestDLL=ls .Test.dll
PS C:Powershell> [reflection.assembly]::LoadFile($TestDLL.FullName)
GAC Version Location
--- ------- --------
False v2.0.50727 C:PowershellTest.dll
PS C:Powershell> $stu=New-Object Test.Student('Mosser',22)
PS C:Powershell> $stu
Name Age
---- ---
Mosser 22
PS C:Powershell> $stu.ToString()
Name=Mosser;Age=22
</div>
使用COM对象
作为.NET的补充,Powershell可以加载和访问COM对象。
查看可用的COM对象
每一个COM对象都有存储在注册表中的唯一标识符,想遍历访问可用的COM对象,可是直接访问注册表。
Dir REGISTRY::HKEY_CLASSES_ROOTCLSID -include PROGID -recurse | foreach {$_.GetValue("")}
DAO.DBEngine.36
DAO.PrivateDBEngine.36
DAO.TableDef.36
DAO.Field.36
DAO.Index.36
PS C:Powershell> Dir REGISTRY::HKEY_CLASSES_ROOTCLSID -include PROGID -recurse
| foreach {$_.GetValue("")} | select -First 10
DAO.DBEngine.36
DAO.PrivateDBEngine.36
DAO.TableDef.36
DAO.Field.36
DAO.Index.36
DAO.Group.36
DAO.User.36
DAO.QueryDef.36
DAO.Relation.36
file
......
</div>
怎样使用COM对象
一旦

