powershell 之hashtable

hashtable的构造:

注意:

  1. 使用 花括号, 数组使用圆括号
  2. 使用 等于号 (=), 而非 ( =>
  3. key不需要引号
  4. 元素分隔符为分号, 而非 逗号,数组使用逗号
  5. 最后一个元素后面的分号可有可无
  6. 多个空的分号等于没有
  7. 使用Count方法计算数量, 数组使用Length ; 方法后面的圆括号可以省略

遍历:

使用cmdlet版的foreach遍历:

注意:

  1. 必须 使用GetEnumerator() 方法后才能foreach,且括号不能省略

遍历出key信息:

注意:

  1. 遍历的其实是keys

powershell 之 foreach

原材料:

 

foreach有三种形态:

cmdlet形态,如下:

foreach 语句形态,如下:

foreach方法形态,如下:

 

 

参考:

https://ss64.com/ps/foreach.html

https://ss64.com/ps/foreach-method.html

 

注意: foreach一般是看不到key的,如何才能看到key呢?

powershell之for循环

注意: 大小比较不能直接使用大于号、小于号

powershell 之 a-z

字符之 0~9:

数字之0~9:

a~z :

两个圆点的扩展需要是能计算出大小的字符(int或等价于int的char),毕竟shell中的单引号和双引号都是字符串,而不是字符,所以,单个字符需要显式转换为char,如下:

因为字符串可以取下标,取下标之后就是字符了,那么,可以如下写法:

如何再添加一个char的强制类型转换就可以输出字符了,如下:

注意: 这个转换为的是字符数组(char[])而不是字符(char)哦

 

使用常规的for循环输出A~C:

注意: ++ 运算只能用于number,不能用于char,所以,这里先转成int

Powershell 之split

如下脚本,通过where cmdlet过滤出来netstat中已连接状态的连接:

可以发现, 使用字符串的split选项可以凑效,但是,使用字符串的split方法不能凑效; 因为split选项支持正则分隔符,split方法不支持正则分隔符,其实第二种写法是不对的。split方法只能按照单个字符分隔

参考: https://msdn.microsoft.com/en-us/library/System.String.Split(v=vs.110).aspx

统计每种tcp状态的数量:

 

其中,begin、end都很类似awk的用法

改进: 如何按照名字的升序进行输出呢:

注意这里sort的使用,需要使用 GetEnumerator(), 因为$arr 本身是一个大对象,本没有迭代为多个对象输出,是不会被sort的,所以需要$arr.GetEnumerator() ,然后输出给sort

tips: sort的 -Property 可以不写,直接 sort name (或)sort value

参考: https://blogs.technet.microsoft.com/heyscriptingguy/2014/09/28/weekend-scripter-sorting-powershell-hash-tables/

 

格式化输出: