PowerShell v3 – Creating Objects With [pscustomobject] – it’s fast!

*****Warning. This is from a preview release******

PowerShell v2 brought the ability to create a custom object via the following method:

1 $CustomObject1 New-Object psobject -Property @{a=1; b=2; c=3; d=4}
2  
3 $CustomObject1 Format-List

PowerShell v3 brings the possibility to create a custom object via

[pscustomobject]

1 $CustomObject2 = [pscustomobject]@{a=1; b=2; c=3; d=4}
2  
3 $CustomObject2 Format-List

Note: both methods create a PSCustomObject with NoteProperties, not a hashtable object

1 $CustomObject1 Get-Member
2  
3 $CustomObject2 Get-Member

So, why would you want to do it this way? Well firstly it preserves the insertion order,which helps with my OCD issues again. However, the main reason I have seen so far is that it is also a lot quicker. Fellow PowerShell MVP Tome Tanasovski carried out some basic performance testing which I thought I would highlight here.

There are four different ways you can create a custom object and a typical use case would be using PowerShell for reporting purposes, e.g. iterating through a list of VMs and pulling out various properties of them to create a report. With a very basic example, let’s have a look at the speed differences:

1) Select-Object

Not everybody knows that it’s possible to create a custom object with Select-Object. This was a handy trick since v1 days and was pretty quick too.

1 $TestSelect = {
2 (0..5000) | ForEach-Object {$CustomObject "" Select-Object Name,ID
3 $CustomObject.Name = "Test Name"
4 $CustomObject.ID = $_
5 $CustomObject
6 }
7 }
8 Measure-Command $TestSelect Format-Table TotalSeconds -Autosize

2) Add-Member

1 $TestAddMember = {
2 (0..5000) | ForEach-Object {$CustomObject New-Objectpsobject
3 $CustomObject Add-Member -Name "Name" -Value "Test Name"
4 $CustomObject Add-Member -Name "ID" -Value $_
5 $CustomObject
6 }
7 }
8 Measure-Command $TestAddMember Format-Table TotalSeconds -Autosize

3) Property Parameter

1 $TestProperty = {
2 (0..5000) | ForEach-Object {New-Object psobject -Property@{Name = "Test Name"; ID = $_}}
3 }
4 Measure-Command $TestProperty Format-Table TotalSeconds -Autosize

4) [pscustomobject]

1 $TestProperty = {
2 (0..5000) | ForEach-Object {[pscustomobject]@{Name = "Test Name"; ID = $_}}
3 }
4 Measure-Command $TestPSCustomObject Format-TableTotalSeconds -Autosize

So a summary of the these basic testing results looks pretty good for [pscustomobject]!

Select-Object = 7.74s

Add-Member = 28.87s

Property = 7.29

[pscustomobject] = 0.94s

I hope to try out [pscustomobject] on some of my reporting scripts and see what difference it makes to real world testing.

PowerShell 中使用json对象的性能比较的更多相关文章

  1. MVC中处理Json和JS中处理Json对象

    MVC中处理Json和JS中处理Json对象 ASP.NET MVC 很好的封装了Json,本文介绍MVC中处理Json和JS中处理Json对象,并提供详细的示例代码供参考. MVC中已经很好的封装了 ...

  2. js中的json对象详细介绍

    JSON一种简单的数据格式,比xml更轻巧,在JavaScript中处理JSON数据不需要任何特殊的API或工具包,下面为大家详细介绍下js中的json对象, 1.JSON(JavaScript Ob ...

  3. 简单使用JSON,JavaScript中创建 JSON 对象(一)

    JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML 更小.更快,更易解析. ...

  4. js中 给json对象添加属性和json数组添加元素

    js中 给json对象添加新的属性 比如现在有一个json对象为jsonObj,需要给这个对象添加新的属性newParam,同时给newParam赋值为pre.做法如下: var obj={ &quo ...

  5. 利用reduce方法,对数组中的json对象去重

    数组中的json对象去重 var arr = [{ "name": "ZYTX", "age": "Y13xG_4wQnOWK1Q ...

  6. js中解析json对象:JSON.parse()用于从一个字符串中解析出json对象, JSON.stringify()用于从一个对象解析出字符串。

    JSON.parse()用于从一个字符串中解析出json对象. var str = '{"name":"huangxiaojian","age&quo ...

  7. java中的JSON对象的使用

    申明:没工作之前都没听过JSON,可能是自己太菜了.可能在前台AJAX接触到JSON,这几天要求在纯java的编程中,返回JSON字符串形式. 网上有两种解析JSON对象的jar包:JSON-lib. ...

  8. js中的json对象

    1.JSON(JavaScript Object  Notation)一种简单的数据格式,比xml更轻巧.JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不须要 ...

  9. ios中解析json对象基类

    这个是对上面一篇写的一个解析json对象的基类 @interface BaseObjectFromJson : NSObject + (id) objectWithDict:(NSDictionary ...

随机推荐

  1. 2014-08-04 BBS主页页面的设计

    今天是在吾索实习的第19天.这天,开始参照一开始设计的界面原型,真真正正地进行BBS界面的设计.在运用.NET进行界面设计时,发现没有用RP进行界面设计来得容易,很多都要再进行更精细的操作,才能达到原 ...

  2. Java---设计模块(值对象)

    ★ 场景和问题 在Java开发时,需要来回交换大量的数据,比如要为方法传入参数,也要获取方法的返回值,该如何能更好的进行数据的交互? ★ 基本的编写步骤 ◎第1步:写一个类,实现可序列化(如果以后数据 ...

  3. Windows服务器Pyton辅助运维--02.远程重启IIS服务器

    Windows服务器Pyton辅助运维 02.远程重启IIS服务器 开发环境: u  Web服务器: Windows Server 2008 R2 SP1 IIS 7.5 u  运维服务器: Pyth ...

  4. DLL模块例1:使用.def模块导出函数,规范修饰名称,显示连接调用dll中函数

    以下内容,我看了多篇文章,整合在一起,写的一个例子,关于dll工程的创建,请参考博客里另一篇文章:http://www.cnblogs.com/pingge/articles/3153571.html ...

  5. Design Tic-Tac-Toe 解答

    Question Design a Tic-tac-toe game that is played between two players on a n x n grid. You may assum ...

  6. GF(2^8)乘法

    最近在学AES,实现了一下伽罗瓦域(2^8)乘法. 至于什么是伽罗瓦域解释起来比较复杂,我也不一定能解释清楚,自行google.这里只是给出一个简单直观的实现. #include<iostrea ...

  7. SRM 583 DIV1

    A 裸最短路. class TravelOnMars { public: int minTimes(vector <int>, int, int); }; vector<int> ...

  8. JavaScript 对象属性的遍历

    ES6一共有5种方法可以遍历对象的属性. (1)for...in for...in循环遍历对象自身的和继承的可枚举属性(不含Symbol属性). (2)Object.keys(obj) Object. ...

  9. nexus5 root教程

    转载自: http://www.inexus.co/article-1280-1.html http://www.pc6.com/edu/71016.html https://download.cha ...

  10. Excel01-不同的单元格输入同一数据

    第一步:按住Ctrl键,选择不同的单元格 第二步:选择完最后一个单元格后,输入需要的数据“YES”,按Ctrl+Enter键结束. 提示:按Ctrl+; 输入当前日期,再按ctrl+Enter实现全部 ...