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 ID5、变量

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

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

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

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

$a = (Get-Process | Sort-Object ID)6、@符号

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

$procs = @{name="explorer","svchost"}使用变量时你也可以使用@符号,为了确保它作为数组而不是单个值处理,例如,下面的代码将在我前面定义的变量上运行Get-Process cmdlet命令:

Get-Process @procsWindows将显示Windows资源管理器和Svchost使用的所有进程,注意变量前使用的@符号,而不是常见的$符号。

7、Split

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

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

This is a test8、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不会逐步执行,整个函数将会一次性执行。

有关PowerShell脚本你必须知道的十个基本概念相关推荐

  1. nuget打包文件丢失如何使用powershell脚本解决

    本文介绍的是在使用nuget打包的过程中遇到丢失文件的问题的时候使用powershell脚本实现的解决办法,非常的巧妙 对于进行nuget打包时,有时我们需要添加一个配置文件,就是一些文本文件,而这些 ...

  2. 设定Windows计划任务定期执行PowerShell脚本

    因PowerShel有这特殊的安全策略,在设定Windows计划任务定期执行PowerShell脚本时有些细节需要注意. (1)在本机编写一个测试脚本,保存为PS1脚本: (2)设置Powershel ...

  3. 开机自启动Powershell脚本

    目录 目录 前言 修改注册表 写批处理 以管理员方式打开Posershell程序 修改PS-profile 最后 前言 这绝B是个非常受用的技能. 修改注册表 Open Registry Editor ...

  4. 通过DNS通道传输的交互式PowerShell脚本

    摘自:http://www.freebuf.com/sectool/90616.html 欢迎来到一周PowerShell脚本的第五天,今天我们将讨论使用ICMP和DNS的交互式PowerShell脚 ...

  5. PowerShell脚本遇到的问题汇总

    PowerShell脚本遇到的问题汇总 PowerSploit: Exception calling "GetMethod" with "1" argument ...

  6. bat脚本交互输入_测评 | 不使用powershell运行 PowerShell 脚本的工具汇总

    不使用 powershell.exe 的情况下,可以运行 powershell 脚本和命令么? 可以的! 本文总结了6款可直接运行 powershell 脚本和命令的工具,献给所有的渗透测试人员和红队 ...

  7. [论文阅读] (17)CCS2019 针对PowerShell脚本的轻量级去混淆和语义感知攻击检测(经典)

    <娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...

  8. 两款【linux字符界面下】显示【菜单】,【选项】的powershell脚本模块介绍

    两款[linux字符界面下]显示[菜单],[选项]的powershell脚本模块介绍 powershell linux  ps1 menu choice Multiselect 传教士 菜单 powe ...

  9. linux脚本转换exe,Ps1 To Exe(powershell脚本转换EXE工具) V3.0.6 官方版

    Ps1 To Exe是款将PowerShell脚本转换为EXE可执行文件的软件.同时软件非常小巧,功能实用,软件还支持各国的语言,有需要的小伙伴们不要错过了. (点击图片查看高清大图) [软件特色] ...

最新文章

  1. pyqtdeploy教程_PyQtdeploy-V2.4 User Guide 中文 (一)
  2. 理解正向代理与反向代理的区别
  3. 笔记-项目配置管理-配置项
  4. Android复习11【service-音乐播放器、定时器、IntentService、ALDL使用】
  5. everything安装版和便携版有什么区别_国行版爱他美卓萃和普通版有什么区别,一定要选卓萃吗?...
  6. 记,NSProxy需要实现哪些方法?
  7. 移动端canvas_web前端开发分享-css,js移动篇
  8. Linux第二周学习笔记(12)
  9. 基本数据类型与格式化输出
  10. 最全计算机基础知识竞赛试题及答案,计算机基础知识竞赛试题.doc
  11. JAVA-反射面试题及答案
  12. ubuntu16.04安装搭建RED5流媒体服务器
  13. Oracle RAC 11g实战指南
  14. oracle sqlldr原理,oracle sqlldr 参数说明
  15. 软件测试预演环境,什么是软件测试用例预演 有何优点?[3]
  16. 259-数据明文传输的安全问题
  17. 下月苹果“小春晚”,M2 芯片终于要来了?
  18. 百度地图——多点标记及路线
  19. 【漫步计算机系统】:发展概览Ⅲ
  20. matlab 动态识别,基于matlab脸部动态特征的人脸表情识别程序

热门文章

  1. 公务员注册账号,密码
  2. ●BZOJ 3129 [Sdoi2013]方程
  3. iOS-笔记 字符编码
  4. struts2 零配置
  5. 利用xcode6做出牛的一逼的计算器
  6. linux 安装vbox增强工具
  7. KlayGE的Virtual Texturing技术定名
  8. QML 界面切换的几种方法
  9. 云服务器上mysql数据库环境安装配置
  10. 代码区,初始化全局数据区,BSS,堆区,栈区,程序环境变量区简介