.Net类型中的方法功能很强大。可以通过类型的构造函数创建新的对象,也可以将已存在的对象转换成指定的类型。

通过New-Object创建新对象

如果使用构造函数创建一个指定类型的实例对象,该类型必须至少包含一个签名相匹配的构造函数。例如可以通过字符和数字创建一个包含指定个数字符的字符串:

PS C:Powershell> New-Object String(‘*’,100)
*******************************************************************************
*********************

为什么支持上面的方法,原因是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)

通过类型转换创建对象

通过类型转换可以替代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

如果条件允许,也可以直接将对象转换成数组

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

加载程序集

自定义一个简单的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);
}
}
}

在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

使用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
......
怎样使用COM对象

一旦得到了COM对象的ProgID,就可以使用New-Object创建COM对象,只需要指定参数为-comObject。

PS C:Powershell> New-Object -ComObject DAO.Relation.36

Properties     : System.__ComObject
Name :
Table :
ForeignTable :
Attributes : 0
Fields : System.__ComObject
PartialReplica :

COM对象的和.NET对象相似,任然可是使用Get-Member 得到该对象的所有熟悉和方法:

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对象中有WScript.Shell,
WScript.Network,
Scripting.FileSystemObject,
InternetExplorer.Application,
Word.Application,
Shell.Application

下面的例子使用WScript.shell COM对象和它的方法CreateShortcut()做桌面上创建一个Powershell快捷方式:

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="启动Powershell"
PS C:Powershell> $link.WorkingDirectory=$PROFILE
PS C:Powershell> $link.IconLocation='Powershell.exe'
PS C:Powershell> $link.Save()

Powershell创建对象的更多相关文章

  1. powershell命令大全

    Name Category Synopsis ---- -------- -------- ac Alias Add-Content asnp Alias Add-PSSnapin clc Alias ...

  2. Powershell使用管道

    管道并不是什么新事物,以前的Cmd控制台也有重定向的命令,例如Dir | More可以将结果分屏显示.传统的Cmd管道是基于文本的,但是Powershell是基于对象. PS> ls | Sor ...

  3. Powershell --在线学习

    介绍和安装 自定义控制台 快速编辑模式和标准模式 快捷键 管道和重定向 Powershell交互式 数学运算 执行外部命令 命令集 别名 通过函数扩展别名 执行文件和脚本 Powershell变量 定 ...

  4. PowerShell 在线教程 4

    PowerShell 在线教程 4   认识Powershell 介绍和安装 自定义控制台 快速编辑模式和标准模式 快捷键 管道和重定向 Powershell交互式 数学运算 执行外部命令 命令集 别 ...

  5. PowerShell管道入门,看看你都会不(管道例子大全)

    PowerShell的一个重中之重的功能就是管道(pipeline),本文从浅入深,一步一步详解管道的使用方法和例子,来看看有没有你所不知道的吧,如果全知道,恭喜你已经很厉害啦--适用于所有Power ...

  6. Powershell:关于hashtable你想知道的一切

    译者语:本篇为一篇译文,详细介绍了在powershell中如何使用hashtable这种数据类型.本文为本人2018年最后一篇博文(哈哈,一年内写没写几篇),也是本人的第一次译文,有不足之处还请指教. ...

  7. Powershell使用真实的对象工作

    Powershell使用真实的对象工作 来源 https://www.pstips.net/powershell-work-with-reallife-objects.html 每一个Powershe ...

  8. 【193】◀▶ PowerShell 官方资料索引

    Microsoft.PowerShell.Core 模块 Windows PowerShell 核心 Cmdlet Windows PowerShell 核心函数 Windows PowerShell ...

  9. 【189】◀▶ PowerShell 系统学习

    参考网站如下: PowerShell 中文博客      PowerShell 博客——叹为观止 Mater-PowerShell      通过 PowerShell 编写脚本      Power ...

随机推荐

  1. EF 5.0 帮助类 增删改查

    原文地址:http://www.cnblogs.com/luomingui/p/3362813.html EF 5.0 帮助类 加入命名空间: using System; using System.D ...

  2. HDU_2040——判断亲和数

    Problem Description 古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为: 1+2+4+5+10+11+20+22+44+55+110=284.  ...

  3. C++ deepin

    访问类成员函数(cin.getline())方式是从访问结构成员变量方式衍生而来; C++结构体变量申明 struct关键字可省略; c++结构体变量声明初始化, = 可省略;但此需用在c++,大家都 ...

  4. 基于年纪和成本(Age & Cost)的缓存替换(cache replacement)机制

    一.客户端的缓存与缓存替换机制 客户端的资源缓存: 在客户端游戏中,通常有大量的资源要处理,这些可能包括贴图.动作.模型.特效等等,这些资源往往存在着磁盘文件->内存(->显存)的数据通路 ...

  5. 用IO流发送Http请求

    package com.j1.mai.action; import java.io.BufferedReader; import java.io.DataOutputStream; import ja ...

  6. HTML基础总结<链接>

    HTML 超链接(链接) HTML使用标签 <a>来设置超文本链接. 超链接可以是一个字,一个词,或者一组词,也可以是一幅图像,您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分. ...

  7. GridView 和 Access数据库实现数据绑定(asp.net)

    前台代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="主页.aspx.cs ...

  8. MVC路由规则以及前后台获取Action、Controller、ID名方法

    1.前后台获取Action.Controller.ID名方法 前台页面:ViewContext.RouteData.Values["Action"].ToString(); Vie ...

  9. 如何发布Web项目到互联网

    比如我们有个项目想要发布到互联网上,我们首先需要购买域名以及主机,主机的话,推荐云主机(本人推荐西部数码或者阿里云),性能好: 我们先在云主机上搭建环境,比如Mysql,Jdk,Tomcat: 然后我 ...

  10. Qt之信号连接,你Out了吗?

    在遇到多信号问题的时候,你是否经常会连接多个槽函数呢?如果你的答案是绝对的,那么你已经Out很久了.多信号连接多个槽,实现不同的槽就在潜意识的加大程序的开销!那么为什么不去链接同一个槽呢?     今 ...