1、PS1文件
一个PowerShell脚本其实就是一个简单的文本文件,这个文件包含了一系列PowerShell命令,每个命令显示为独立的一行,对于被视为PowerShell脚本的文本文件,它的文件名需要使用.PS1扩展。
2、执行权限
为防止恶意脚本的执行,PowerShell有一个执行策略,默认情况下,这个执行策略被设为受限的(Restricted),意味着PowerShell脚本无法执行,你可以使用下面的cmdlet命令确定当前的执行策略:
Get-ExecutionPolicy
你可以选择使用的执行策略有:
- Restricted - 脚本不能运行。
- RemoteSigned - 本地创建的脚本可以运行,但从网上下载的脚本不能运行(除非它们拥有由受信任的发布者签署的数字签名)。
- AllSigned – 仅当脚本由受信任的发布者签名才能运行。
- Unrestricted – 脚本执行不受限制,不管来自哪里,也不管它们是否有签名。
你可以使用下面的cmdlet命令设置PowerShell的执行策略:
Set-ExecutionPolicy <policy name>
3、运行脚本
如果你想从命令行运行一个可执行文件,多年来一个永恒不变的方法是,在命令行转到该执行文件所在的位置,然后键入该执行文件的名称,但这个古老的方法现在却不能适用于PowerShell可执行脚本了。
如果你想执行一个PowerShell脚本,通常必须键入完整的路径和文件名,例如,假设你要运行一个名为SCRIPT.PS1的脚本,你可以键入:
C:\Scripts\Script.ps1
最大的例外是,如果PowerShell脚本文件刚好位于你的系统目录中,那么你可以直接在命令提示符后键入脚本文件名即可运行,如:
.\Script.ps1
注意前面需要加上.\,这和Linux下执行Shell脚本的方法如出一辙。
4、管道
管道的作用是将一个命令的输出作为另一个命令的输入,两个命令(或cmdlet)之间只需要用管道符号(|)连接即可。
为了帮助你了解管道是如何工作的,我们以一个例子进行说明,假设你想创建运行在服务器上的进程列表,并按进程的ID号进行排序,可以使用Get-Process cmdlet命令获得进程列表,但默认情况下列表不会排序,如果将这个cmdlet命令的输出用管道输送给Sort-Object ID命令,进程列表将会按进程ID号进行排序,如:
Get-Process | Sort-Object ID
5、变量
虽然可以使用管道将一个命令的输出输送给另一个命令,但管道本身也是有限制的,当你用管道从一个命令向另一个命令传递输出结果时,输出结果立即被使用,但有时候,你可能需要保存输出结果一段时间,以便以后可以使用(或重用),这个时候管道就应该下场,轮到变量上场了。
人们很容易将变量想象成一个仓库,但在PowerShell中,变量可以保存命令的完整输出,例如,假设你想保存服务器处于运行中的进程列表,你可以将它赋给一个变量,如:
$a = Get-Process
在这里,变量被命名为$a,如果你想使用这个变量,只需要简单地调用它的名称即可,例如,键入$a便可在屏幕上打印变量的内容。
你可以将多个用管道连接的命令的最终输出赋给一个变量,只需要用一对小括号将命令括起来即可,例如,假设你想按进程ID对运行中的进程进行排序,然后将结果输出给一个变量,你可以使用下面这个命令:
$a = (Get-Process | Sort-Object ID)
6、@符号
通过使用@符号,你可以将列表内容转换成一个数组,例如,下面的代码创建了一个名为$Procs的变量,它包含多行文本内容(一个数组):
$procs = @{name="explorer","svchost"}
使用变量时你也可以使用@符号,为了确保它作为数组而不是单个值处理,例如,下面的代码将在我前面定义的变量上运行Get-Process cmdlet命令:
Get-Process @procs
Windows将显示Windows资源管理器和Svchost使用的所有进程,注意变量前使用的@符号,而不是常见的$符号。
7、Split
Split操作符根据你指定的字符拆分一个文本字符串,例如,假设你想将一个句子拆分成一个单词组成的一个数组,你可以使用下面的命令做到:
"This is a test" -split " "
拆分后的结果如下:
This is a test
8、Join
就像Split可以将一个文本字符串拆分成多块一样,Join的操作则是逆向的,将多个独立的块连接成一个整体,例如,下面这行代码将会创建一个文本字符串,由我的名字和姓氏组成:
"Brien","Posey" -join " "
命令末尾双引号之间的空格告诉Windows在两个文本字符串之间插入一个空格。
9、断点
运行一个新创建的PowerShell脚本时,如果脚本有Bug,会遇到意想不到的后果,保护自己的一个方法是在脚本的关键位置插入断点,这样你就可以确保脚本正常运行先,然后再处理可能存在的问题。
插入断点最简单的方法是根据行号插入,例如,假设你要在第10行插入一个断点,可以使用下面的命令:
New-PSBreakpoint -Script C:\Scripts\Script.ps1 -Line 10
你也可以将断点绑定到变量上,如果你希望你的脚本任何时候都可以修改a$的内容,可以使用下面的命令:
New-PSBreakpoint -Script C:\scripts\Script.ps1 -variables a
注意,我在变量名后并没有包括美元符号。
可以和PSBreakpoint一起使用的动词包括New,Get,Enable,Disable和Remove。
10、Step
调试一个脚本时,有时可能需要逐行运行脚本,这时你可以使用Step-Into cmdlet命令,它会使脚本一行一行地执行,不管有没有设置断点,如果你想从这种步进式运行模式退出来,使用Step-Out cmdlet命令即可,但需要注意的是,使用Step-Out cmdlet命令后,断点仍然有效。
顺便说一句,如果你的脚本使用了函数,你可能对Step-Out cmdlet更感兴趣,Step-Out的工作方式和Step-Into一样,不过,如果调用了一个函数,Windows不会逐步执行,整个函数将会一次性执行。
原文:10 fundamental concepts for PowerShell scripting
再补充几个好用的powershell编辑调试IDE:
工欲善其事,必先利其器。有个得心应手的工具会使你的学习事半功倍。使用什么工具来编辑 Powershell指令比较方便呢?笔者前后使用过几个编辑器,有几个比较不错推荐给大家试用。
Powershell ISE
Powershell PowerGUI
PowershellPlus
相关推荐
本书分为多个章节,详细介绍了PowerShell的基础概念、核心功能以及高级技巧。首先,书中讲解了PowerShell的工作环境,包括如何启动PowerShell、理解PowerShell的命令行界面和ISE(集成脚本环境),以及如何使用...
1. **PowerShell基础**:介绍PowerShell的基础概念,包括如何启动PowerShell,理解PowerShell的命令行界面,以及如何使用基本的命令行操作,如列出文件和目录,进行文件操作等。 2. **PowerShell语法**:讲解...
10. **源码示例**:通过提供的源码,读者可以实践书中所讲解的概念和技巧,加深对PowerShell的理解。 总的来说,《Microsoft Windows PowerShell脚本指南》是一本全面而实用的教程,无论你是初学者还是经验丰富的...
- **Windows_PowerShell实用教程.pdf**:这可能是一本详细介绍PowerShell基本用法和高级特性的教程,涵盖了大量的实例和实践指导。 - **powershell 教程**:这可能是另一份教程资料,可能专注于特定的PowerShell...
5. **强大的脚本支持**:PowerShell支持使用PowerShell Scripting Language编写脚本,这是一种基于.NET的语法,结合了脚本语言的简便性和.NET的强大功能。 6. **模块化**:PowerShell引入了模块的概念,模块可以...
4. **PowerShell ISE和Visual Studio Code扩展**:熟悉PowerShell Integrated Scripting Environment (ISE)的使用,以及如何在Visual Studio Code中配置PowerShell扩展,进行更高效和友好的脚本编写。 5. **...
- **Windows PowerShell 5.0介绍**:这一章首先介绍了PowerShell的基本概念,包括它的历史背景、设计目标以及如何安装和配置PowerShell 5.0。读者将了解到PowerShell与传统命令行工具相比的优势,比如其强大的管道...
4. **PowerShell Pipeline**: 基于管道的概念,允许用户将一个cmdlet的输出作为另一个cmdlet的输入,实现命令的串联执行。 5. **PowerShell Scripting Language**: 支持脚本编写,具有丰富的语言特性,如变量、函数...
4. **脚本语言**:PowerShell 支持自己的脚本语言,称为PowerShell Scripting Language,允许编写复杂的脚本来执行自动化任务。 5. **模块化设计**:PowerShell 允许创建和导入模块,将相关Cmdlet、函数、变量等...
最后,别忘了PowerShell ISE(Integrated Scripting Environment),这是一个内置的开发环境,提供了语法高亮、调试工具和即时预览功能,极大地简化了脚本的编写和测试过程。 通过阅读"Windows PowerShell实战指南...
在这篇文章中,我们将介绍使用 Powershell 实现远控免杀的基本概念和技术。 Powershell 是一个强大的 shellSCRIPTING 语言,可以用来实现各种自动化任务。通过使用 Powershell,我们可以实现远控免杀,绕过安全软件...
1. **PowerShell基础概念**: PowerShell基于.NET Framework构建,它提供了交互式命令行接口和脚本语言,用于执行系统管理任务。PowerShell的命令称为cmdlets(command-lets),这些是小型、专门的工具,通过管道...
Windows PowerShell 是微软为系统管理员和IT专业...总的来说,Windows PowerShell是一个功能强大的工具,通过学习和掌握它的核心概念,IT专业人员能够更有效地管理他们的Windows环境,实现自动化运维,提高工作效率。
通过这个“Windows PowerShell实战”教程,你将不仅能够理解PowerShell的基本概念,还能学会利用其强大的功能来解决实际问题,提升工作效率。无论你是初学者还是经验丰富的管理员,这都将是一份宝贵的资源。
总的来说,Windows PowerShell是Windows环境中进行系统管理和自动化的重要工具,掌握其基本概念和使用技巧,对于提升IT专业人员的工作效率至关重要。通过深入学习和实践,你可以利用PowerShell的强大功能解决日常...
10. **集成ISE(Integrated Scripting Environment)**:PowerShell ISE是一个内置的集成开发环境,提供语法高亮、调试功能和多文档编辑,方便用户编写和测试PowerShell脚本。 PowerShell的学习曲线可能比传统的...
4. 高级功能:PowerShell还提供了管道(Pipeline)概念,允许你将一个cmdlet的输出作为另一个cmdlet的输入,实现命令的串联。此外,PowerShell支持重定向、筛选和脚本模块,以及通过PowerShell Remoting进行远程管理...