PS1文件

PS1文件

Ps1文件其实就是一个简单的文本文档,我们可以用记事本用进行查看编辑,这里面就是一条条PowerShell 命令。对于被视为PowerShell脚本的文本文件,它的文件名需要使用.PS1扩展 (不一定一行就是一跳完整语句)。

脚本运行策略

脚本运行策略

为了防止恶意脚本运行,PowerShell有脚本执行策略,默认情况下,这个执行策略被设为受限的(Restricted),意味着PowerShell脚本无法执行,Get-ExecutionPolicy命令确定当前的执行策略:

Restricted – 任何脚本不能运行。 

RemoteSigned - 本地创建的脚本可以运行,但从网上下载的脚本且拥有合法验证签名,可以运行,其他的都不能运行。

AllSigned – 仅当脚本由受信任的发布者签名才能运行。 

Unrestricted –脚本执行不受限制,不管来自哪里,也不管它们是否有签名。

当然我们也可以修改执行策略,使用Set-ExecutionPolicy 。

 

管道

管道的作用是将一个命令的输出作为另一个命令的输入,两个命令(或cmdlet)之间只需要用管道符号(|)连接即可。

为了帮助你了解管道是如何工作的,我们以一个例子进行说明,假设你想创建运行在服务器上的进程列表,并按进程的ID号进行排序,可以使用Get-Process cmdlet

命令获得进程列表,但默认情况下列表不会排序,如果将这个cmdlet命令的输出用管道输送给Sort-Object ID命令,进程列表将会按进程ID号进行排序,如:

Get-Process | Sort-Object ID

 

变量

虽然可以使用管道将一个命令的输出输送给另一个命令,但管道本身也是有限制的,当你用管道从一个命令向另一个命令传递输出结果时,输出结果立即被使用,但有时候,你可能需要保存输出结果一段时间,以便以后可以使用(或重用),这个时候管道就应该下场,轮到变量上场了。

人们很容易将变量想象成一个仓库,但在PowerShell中,变量可以保存命令的完整输出,例如,假设你想保存服务器处于运行中的进程列表,你可以将它赋给一个变量,如:

$a = Get-Process 在这里,变量被命名为$a,如果你想使用这个变量,只需要简单地调用它的名称即可,例如,键入$a便可在屏幕上打印变量的内容。

你可以将多个用管道连接的命令的最终输出赋给一个变量,只需要用一对小括号将命令括起来即可,例如,假设你想按进程ID对运行中的进程进行排序,然后将结果输出给一个变量,你可以使用下面这个命令:

$a = (Get-Process | Sort-Object ID)

 

@符号

通过使用@符号,你可以将列表内容转换成一个数组,例如,下面的代码创建了一个名为$Procs的变量,它包含多行文本内容(一个数组):$procs = @{name="explorer","svchost"}

Split

 

Split

Split操作符根据你指定的字符拆分一个文本字符串,例如,假设你想将一个句子拆分成一个单词组成的一个数组,你可以使用下面的命令做到:

"This is a test" -split " " 拆分后的结果如下:

This is a test

7 Join

就像Split可以将一个文本字符串拆分成多块一样,Join的操作则是逆向的,将多个独立的块连接成一个整体,例如,下面这行代码将会创建一个文本字符串,由我的名字和姓氏组成:

"Brien","Posey" -join " " 命令末尾双引号之间的空格告诉Windows在两个文本字符串之间插入一个空格。

 

断点

运行一个新创建的PowerShell脚本时,如果脚本有Bug,会遇到意想不到的后果,保护自己的一个方法是在脚本的关键位置插入断点,这样你就可以确保脚本正常运行先,然后再处理可能存在的问题。

插入断点最简单的方法是根据行号插入,例如,假设你要在第10行插入一个断点,可以使用下面的命令:

New-PSBreakpoint -Script C:Scriptsa.ps1 -Line 10 你也可以将断点绑定到变量上,如果你希望你的脚本任何时候都可以修改a$的内容,可以使用下面的命令:

New-PSBreakpoint -Script C:scriptsa.ps1 -variables a 。

可以和PSBreakpoint一起使用的动词包括New,Get,Enable,Disable和Remove。

 

Step(单步执行)

调试一个脚本时,有时可能需要逐行运行脚本,可以使用Step-Into cmdlet命令,它会使脚本一行一行地执行,不管有没有设置断点,如果你想从这种步进式运行模式退出来,使用Step-Out cmdlet命令即可,但需要注意的是,使用Step-Out cmdlet命令后,断点仍然有效。

顺便说一句,如果你的脚本使用了函数,你可能对Step-Out cmdlet更感兴趣,Step-Out的工作方式和Step-Into一样,不过,如果调用了一个函数,Windows不会逐步执行,整个函数将会一次性执行。

---本文档由联科教育(http://www.iLync.cn)学员田梦博原创提供,如有问题请咨询我们的专家团队!---