PowerShell学习笔记(1):基础
前段时间在知乎上得知Windows下的一款强大的命令行工具PowerShell(原谅我刚刚得知)。 其强大的功能,令人惊叹,兴趣盎然,这么优秀的工具值得我去学习、了解, 虽然我并不是程序猿。我的测试练习环境:win7 PowerShell v1.0
基础内容
命令的概念与术语
基本命令形式如下:
command -parameter1 -parameter2 arg1 arg2
- command:命令名称
- parameter1:开关参数
- parameter2 arg1:带参数变量的参数
- arg2:位置参数
例:Write-Output -InputObject HelloWorld
dir -Recurse -Filter *.ps1 D:\Test
,其中开关参数-Recuse指定dir命令显示指定目录及其子目录下的所有文件,-Filter *.ps1过滤出后缀为ps1的文件。
命令分类
PowerShell中的命令可以分为四类:cmdlets、functions、scripts、native Win32 executables。
cmdlet C#源码例子:
[Cmdlet("Write", "InputObject")]
public class MyWriteInputObjectCmdlet : Cmdlet
{
[Parameter]
public string Parameter1;
[Parameter(Mandatory = true, ValueFromPipeline=true)]
public string InputObject;
protected override void ProcessRecord()
{
if (Parameter1 != null)
WriteObject(Parameter1 + ":" + InputObject);
else
WriteObject(InputObject);
}
}
shell函数命令源码例子:
function Write-InputObject
{
param($Parameter1)
process
{
if ($Parameter1)
{
"$Parameter1: $_"
}
else
{
"$_"
}
}
}
shell脚本命令源码例子:
param($Parameter1)
process
{
if ($Parameter1)
{
"$Parameter1:$_"
}
else
{
"$_"
}
}
native Win32 executables也被称作为本地命令,是能被操作系统执行的外部程序。
别名与弹性语法
PowerShell中实现了大量的预定义别名,这些别名可以分为两个基本的类别:transitional别名和convenience别名。使用Get-Command
命令可以查看别名的具体的定义。
PowerShell语句解析
双引号、单引号与反引号之间的区别。
转义序列,如下:
`n 换行
`r 回车
`t 水平制表符
`a 警铃
`b 退格
`' 单引号
`" 双引号
'0 空
`` 单反引号
表达式模式与命令模式。在表达式模式中,字符串必须由引号括起,数字始终解析为数字等等。在命令模式中,数字被视为数字,但是其它的参数则被视为字符串(除非参数以$,@,’,”,(开头,当以这些特殊字符开头时,其后的参数被解析为值表达式)。
模式解析例子,如下:
2+2 表达式模式,结果是4.
write-output 2+2 命令模式,结果是 “2+2”.
$a=2+2 表达式模式,变量$a被赋值为值4
write-output (2+2) 表达式模式,2+2被作为表达式计算得到值4,然后作为参数传给write-output
write-output $a 表达式模式,参数前有特殊字符
write-output $a.Equals(4) 表达式模式,$a.Equals(4)计算得到Boolean值True
write-output $a/dir.txt 命令模式,首先参数被计算为4/dir.txt,然后解释器发现并不是一个合法的表达式,然后将其转换为命令模式
有两种语句终止方式:一种是以分号”;”终止,还有一种是以换行符终止。
管线是由管线操作符”|”分割的一系列命令,如:
dir -recurse -filter *.cpp | format-table name,length
格式化与输出。可以通过$PSHOME查看所安装的默认格式数据库的所在路径。
类型处理
基本类型与字面值
PowerShell中的字面值:strings,numbers,array,dictionaries,hashtables。
PowerShell中,字符串是一个16位的Unicode字符序列,其直接由.NET System.String类型直接实现。单引号、双引号字符串,例:"Double quoted string"
,"Single quoted string"
。here-strings:以@<quote><newline>
开头,并以<quote><newline>@
结尾。
数值字面值。PowerShell支持所有基本的.NET数值类型并可在需要时完成不同类型之间的转换。数值字面值如下:
数值字面值 | .NET全类型名 | 短类型名 |
---|---|---|
1 | System.Int32 | [int] |
10000000 | System.Int64 | [long] |
1.1 | S |