Powershell是建立在.Net Framework之上的, .Net Frameword的好处和坏处争论不休, 多数人认为.Net Framework最大的弊端在于性能问题. 这句话的确不假, 但是目前计算机硬件无论从速度还是存储空间来说, 都为.Net Framework的推广提供了足够的硬件环境. 所以我们不需要害怕.Net Framework带来的性能损失, 相反, 我们应该能够认清.Net Framework究竟能够让我们在实现一些复杂任务中节省了多少人力.
powershell充分利用了现有的.Net Framework环境, 虽然PowerShell的开发者也承认PowerShell中还有很多很多没有完成的部分, 但是这些部分几乎都可以通过.Net Framework来解决. 在学习PowerShell的过程中, 你将会了解更多关于.Net Framework中的知识, 能够让你完成更多用其他工具无法完成的工作.
先来学习最常用的数据类型: 整数. 你只要在PowerShell.exe中随便输入一些数字就创建了整数对象:
PS C:Userseden> 13800138000
13800138000
PowerShell不需要像其他语言一样什么print之类的命令才能输出信息, 相反, 多数情况下, 你想到的结果就会展现在屏幕上, 就好像上面输出了整数值: 13800138000. 你需要记住, PowerShell中任何东西都是对象(Object). 对象是一种包含属性和方法的实体. 实体可以想象每个数值就好像每个人或者动物一样, 是真实存在的物体.
你可以通过使用点”.”来访问对象上的方法, 这些方法能够帮助你完成一些非常基础的操作. 我们可以使用下面的办法查看数字的类型:
PS C:UsersEden> 13800138000.GetType()
数字常量无效: 13800138000.GetType。
所在位置
行:1
字符: 19
+ 13800138000.GetType <<<< ()
PS C:UsersEden> (13800138000).GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int64 System.ValueType
注意, 第一种方法由于实现问题(词法分析或语法分析), PowerShell会产生错误信息. 我们可以在数值外面加上括号来避免. 我们可以看到PowerShell输出了很多信息, 大家只要注意看Name对应的Int64就好了, 它表名13800138000是一个64位的整数类型(.Net Framework中是System.Int64). 我们可以使用cmdlet: Get-Member来查看一个对象上的成员:
PS C:UsersEden> 13800138000 | Get-Member | ft Name,MemberType -AutoSize
Name MemberType
---- ----------
CompareTo Method
Equals Method
GetHashCode Method
GetType Method
GetTypeCode Method
ToString Method
Name表示了成员的名称, MemberType表示成员的类型. 这里我们看到了6个方法成员. 其中的Get-Type方法就是我们刚才例子中查看类型使用的, Get-Type可以返回一个表示类型的对象(过于细节了, 大家可以忽略^^).
因为数值13800138000已经很大了, 所以PowerShell选择了Int64来表示, 一般情况下PowerShell使用Int32表示大多数整数:
PS C:UsersEden> (0).GetType().FullName
System.Int32
Int32使用4个字节表示数值, 而Int64使用8个字节表示数值, 它们的范围是有限的:
PS C:UsersEden> [System.Int32]::MaxValue
2147483647
PS C:UsersEden> [System.Int32]::MinValue
-2147483648
PS C:UsersEden> [System.Int64]::MinValue
-9223372036854775808
PS C:UsersEden> [System.Int64]::MaxValue
9223372036854775807
如果两个Int32类型的数值的和或差超出了Int32的表示范围, PowerShell能够自动进行类型转换:
PS C:UsersEden> ([System.Int32]::MaxValue + 1).GetType().FullName
System.Double
默认PowerShell使用双精度浮点数 (Double)来表示计算的结果, 单精度浮点数(Float)是不提倡使用的, 主要原因在于其表现精度太低, 而且现在计算机内存容量较大, 因此一般情况下, 应该避免使用单精度浮点数. 如果两个整数不能整除, PowerShell也会聪明的选择浮点数来避免精度信息的丢失:
PS C:UsersEden> 19 / 3
6.33333333333333
PS C:UsersEden> (19 / 3).GetType().FullName