通過(guò)New-Object創(chuàng)建新對(duì)象
如果使用構(gòu)造函數(shù)創(chuàng)建一個(gè)指定類型的實(shí)例對(duì)象,該類型必須至少包含一個(gè)簽名相匹配的構(gòu)造函數(shù)。例如可以通過(guò)字符和數(shù)字創(chuàng)建一個(gè)包含指定個(gè)數(shù)字符的字符串:
復(fù)制代碼 代碼如下:
PS C:Powershell> New-Object String(‘*',100)
*******************************************************************************
*********************
為什么支持上面的方法,原因是String類中包含一個(gè)Void .ctor(Char, Int32) 構(gòu)造函數(shù)
復(fù)制代碼 代碼如下:
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)
通過(guò)類型轉(zhuǎn)換創(chuàng)建對(duì)象
通過(guò)類型轉(zhuǎn)換可以替代New-Object
復(fù)制代碼 代碼如下:
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
如果條件允許,也可以直接將對(duì)象轉(zhuǎn)換成數(shù)組
復(fù)制代碼 代碼如下:
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
加載程序集
自定義一個(gè)簡(jiǎn)單的C#類庫(kù)編譯為Test.dll:
復(fù)制代碼 代碼如下:
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);
}
}
}
在Powershell中加載這個(gè)dll并使用其中的Student類的構(gòu)造函數(shù)生成一個(gè)實(shí)例,最后調(diào)用ToString()方法。
復(fù)制代碼 代碼如下:
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
使用COM對(duì)象
作為.NET的補(bǔ)充,Powershell可以加載和訪問(wèn)COM對(duì)象。
查看可用的COM對(duì)象
每一個(gè)COM對(duì)象都有存儲(chǔ)在注冊(cè)表中的唯一標(biāo)識(shí)符,想遍歷訪問(wèn)可用的COM對(duì)象,可是直接訪問(wèn)注冊(cè)表。
復(fù)制代碼 代碼如下:
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
......
怎樣使用COM對(duì)象
一旦得到了COM對(duì)象的ProgID,就可以使用New-Object創(chuàng)建COM對(duì)象,只需要指定參數(shù)為-comObject。
復(fù)制代碼 代碼如下:
PS C:Powershell> New-Object -ComObject DAO.Relation.36
Properties : System.__ComObject
Name :
Table :
ForeignTable :
Attributes : 0
Fields : System.__ComObject
PartialReplica :
COM對(duì)象的和.NET對(duì)象相似,任然可是使用Get-Member 得到該對(duì)象的所有熟悉和方法:
PS C:Powershell> $DBEng=New-Object -ComObject DAO.PrivateDBEngine.36
PS C:Powershell> $DBEng | Get-Member -me *method
TypeName: System.__ComObject#{00000021-0000-0010-8000-00aa006d2ea4}
Name MemberType Definition
---- ---------- ----------
BeginTrans Method void BeginTrans ()
CommitTrans Method void CommitTrans (int)
CompactDatabase Method void CompactDatabase (string, string, Variant...
CreateDatabase Method Database CreateDatabase (string, string, Vari...
CreateWorkspace Method Workspace CreateWorkspace (string, string, st...
FreeLocks Method void FreeLocks ()
Idle Method void Idle (Variant)
ISAMStats Method int ISAMStats (int, Variant)
OpenConnection Method Connection OpenConnection (string, Variant, V...
OpenDatabase Method Database OpenDatabase (string, Variant, Varia...
RegisterDatabase Method void RegisterDatabase (string, string, bool, ...
RepairDatabase Method void RepairDatabase (string)
Rollback Method void Rollback ()
SetDataAccessOption Method void SetDataAccessOption (short, Variant)
SetDefaultWorkspace Method void SetDefaultWorkspace (string, string)
SetOption Method void SetOption (int, Variant)
_30_CreateWorkspace Method Workspace _30_CreateWorkspace (string, string...
PS C:Powershell> $DBEng | Get-Member -me *property
TypeName: System.__ComObject#{00000021-0000-0010-8000-00aa006d2ea4}
Name MemberType Definition
---- ---------- ----------
DefaultPassword Property string DefaultPassword () {set}
DefaultType Property int DefaultType () {get} {set}
DefaultUser Property string DefaultUser () {set}
Errors Property Errors Errors () {get}
IniPath Property string IniPath () {get} {set}
LoginTimeout Property short LoginTimeout () {get} {set}
Properties Property Properties Properties () {get}
SystemDB Property string SystemDB () {get} {set}
Version Property string Version () {get}
Workspaces Property Workspaces Workspaces () {get}
常用的COM對(duì)象中有
WScript.Shell,
WScript.Network,
Scripting.FileSystemObject,
InternetExplorer.Application,
Word.Application,
Shell.Application
下面的例子使用WScript.shell COM對(duì)象和它的方法CreateShortcut()做桌面上創(chuàng)建一個(gè)Powershell快捷方式:
復(fù)制代碼 代碼如下:
PS C:Powershell> $wshell=New-Object -ComObject WScript.shell
PS C:Powershell> $path=[environment]::GetFolderPath('Desktop')
PS C:Powershell> $link=$wshell.CreateShortcut("$pathPowershell.lnk")
PS C:Powershell> $link | Get-Member
TypeName: System.__ComObject#{f935dc23-1cf0-11d0-adb9-00c04fd58a0b}
Name MemberType Definition
---- ---------- ----------
Load Method void Load (string)
Save Method void Save ()
Arguments Property string Arguments () {get} {set}
Description Property string Description () {get} {set}
FullName Property string FullName () {get}
Hotkey Property string Hotkey () {get} {set}
IconLocation Property string IconLocation () {get} {set}
RelativePath Property string RelativePath () {set}
TargetPath Property string TargetPath () {get} {set}
WindowStyle Property int WindowStyle () {get} {set}
WorkingDirectory Property string WorkingDirectory () {get} {set}
PS C:Powershell> $link.TargetPath='Powershell.exe'
PS C:Powershell> $link.Description="啟動(dòng)Powershell"
PS C:Powershell> $link.WorkingDirectory=$PROFILE
PS C:Powershell> $link.IconLocation='Powershell.exe'
PS C:Powershell> $link.Save()
您可能感興趣的文章:- Windows Powershell條件表達(dá)式之條件操作符
- Windows Powershell Where-Object 條件過(guò)濾