设为首页 收藏本站
查看: 1402|回复: 0

[经验分享] 5. Windows Powershell Cmdlets 介绍

[复制链接]

尚未签到

发表于 2018-6-14 07:31:00 | 显示全部楼层 |阅读模式
5. Windows Powershell Cmdlets 介绍
  在使用Powershell的时候,你可以直接的在shell的命令行里面输入命令,你也可以直接把相同的命令保存为一个文本文件。这个脚本文件被称为cmdlet,可以在Powershell中直接调用。
  和其他的脚本语言一样,用记事本来创建和编写脚本足够够用的。在Powershell中,你只需要把cmdlet保存为PS1格式的文件 即可。写脚本文件有两个额外的好处,它可以对你的命令归档,这样你就不会忘掉;另外cmdlet文件也见证了你使用Powershell所取得的成果。
  
Powershell Cmdlets (读command lets)

  一般来说,cmdlet有两层意思
  第一层意思:它是 Powershell脚本的同义词,一个Powershell Cmdlets是一系列的命令组成,它可能多过一行,并且保存在PS1格式的文本文件中。这,就是我们今天需要讲的Cmdlets
  第二层意思:在微软的文档中,cmdlet 意思就是Powershell中的内置命令,它具有简单的动-名词格式,这类cmdlet一般都有别名(alias), 比如 get-member就有个别名是GM
  cmdlets的优势
  如果你曾初步的接触过Powershell的命令行,你可能很希望把你的代码保存为自己的Cmdlet文件。这样你以后就可以直接使用,并且如果代码变得越来越复杂,那这种方法就变得更加实用了。
  我的做法是,一旦某个cmdlet能够满足基本目的,我就把他复制下来“另存为”,这样以后的开发也可以用得到。我的经验是,在调试的时候,十有七八都会出错,但是由于我有“复件”cmdlet, 我可以马上调整过来。
  我希望你对Cmdlet有了个初步的了解。尽量完善你的Powershell命令,一旦完成后就把他保存为文本文件,以后再调用。这种办法能够帮你节省输入代码和命令行的时间。另外,你可以直接的通过.\文件名来调用,比如,.\memory.
  这样,使用Powershell的cmdlet已经成为我编写脚本的重要方法之一。
  

三步快速上手Powershell cmdlets

  创建Windows Powershell Cmdlets很简单直接,也相当有价值。如果想让你的脚本执行顺利,你需要遵守三个重要步骤
  

  • 1. 出于安全考虑,操作系统默认不会自动执行Powershell 脚本,因此,我们需要调整 ExecutionPolicy 来确保Powershell脚本运行。最佳方法是使用下列命令:set-ExecutionPolicy RemoteSigned.

   DSC0000.jpg
   DSC0001.jpg
  当然修改对应的注册表也可以
  

  • 2. 确保你的文件后扩展是.ps1
  • 3. 从Powershell命令行调用该文件的办法是:输入完整路径 D:\script\filename
  • 如果你已经在D:\scripts, 只要输入.\filename

   DSC0002.jpg
  

  • 提示1:如何快速调用子目录的cmdlet。比如D:\scripts是我的主脚本目录,我把cmdlets保存在里面的子目录,比如D:\scripts\wmi\32proc.ps1。而我现在的Powershell命令行就在D:\scripts目录下,这样我只要在命令行输入 .\wmi\32proc 即可
  • 提示2:在调用cmdlet文件时候,没有必要把文件扩展名.ps1也加上去, .\文件名足够了。
  • 提示3 :cmdlets脚本只能在Powershell命令行中使用.\ 才能够调用,这种方法尽管看起来很麻烦,微软是出于安全考虑的才这样做。***,钓鱼者可能会诱使人们去执行恶意的Powershell代码,但是如果直接双击的话并不会执行--- 除非你使用“.\ ”方法来执行

      细介绍Powershell Cmdlets

  下面的介绍和上面差不多,但我们将一步一步来演示
  1PowershellExecutionPolicy命令
  我偏向这种方法,这样可以通过Powershell的命令来控制脚本的执行策略,在Powershell命令行中输入下面代码
  # PowerShell set-ExecutionPolicy
get-ExecutionPolicy
# Now try:
set-ExecutionPolicy -?
# Here is the crucial command:
set-ExecutionPolicy RemoteSigned



  简单来说,你可以直接输入set-executionpolicy remotedsigned

即可


   DSC0003.jpg
  1b更改对应Powershell注册表
  出于安全因素考虑,在默认设置中,微软阻止Powershell直接运行cmdlets脚本。因此我们需要更改特定的注册表键值来允许cmdlets的执行。如果你直接运行cmdlet脚本,你会看到如下的错误信息:“The execution of scripts is disabled on this system"
  为此,我们需要更改注册表REG_SZ_ExecutionPolicy的键值,将其更改为RemoteSigned。还有另外两种选择Unrestricted 和Allsigned. 但是,RemoteSigned是最推荐的,因为它允许你运行本地的脚本,而会阻止其他人从另外机器上(比如互联网)***你。
  请浏览到下面的键值去更改
  HKLM\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
  把键值更改为
  REG_SZ ExecutionPolicy RemoteSigned
   DSC0004.jpg
  
2a)文件名和.ps1扩展名
  当你使用记事本来创建Powershell Cmdlet时候,文件名必须是以.ps1作为扩展名的,如runningprocess.ps1. 有一种办法把你的Powershell命令保存到记事本是,通过菜单,选择另存,选择所有文件,runningprocess.ps1.
  为了确认,你可以把“”加入进去,如“RunningProcess.ps1”,请确认文件不是RunningProcess.txt或RunningProcess.ps1.txt
  在你filename.ps1的内容就是你在Powershell命令行里面输入的命令。你可以尝试输入get-process在你的测试ps1文件中,然后再执行 (可能看起来太简单,但是我的方法就是保持事件简单而成功)
  下面是一些高级演示,只是让你感觉到cmdlet的强大
  

# RunningServices.ps1 PowerShell Cmdlet
# This script generates a report about Running Services
# Guy Thomas September 2007
# Version 1.5
"" # Insert a blank line
"Report generated at " + (get-date)
"" # Insert blank line
"Services that are running"
get-service | where-object { $_.status -eq "Running"}



   DSC0005.jpg
  学习要点

  

  • 提示1:实例中最关键的命令就是get-service,
  • 提示2:让我们看看Where 这个参数,{$_. 是一个需要介绍的特殊变量。在当前的管道中,美元符号$表明我们正在使用变量,下划线符号表明变量值在后面。进程对象有很多属性,我们这边使用的是.status, -eq 意思是左边的值等于右边的值。这个句子也就是,我们在找这样的值,值的条件是status是Running的。
  • 除-eq外,我们还有比较符, -match, -contain (等于以及包含)

  • 提示2b调用文件
  • 设想:你把cmdlets脚本文件保存在一个目录里,目录是D:\scripts,在这个例子里,文件是为runningservices.ps1
  • 当通过调用文件名来执行cmdlet,你并不需要加入.ps1扩展名。但是你还是需要注意路径,你需要在命令行里面输入完整路径,如D:\scripts\runningservices. 这样可以执行。

  在成功的基础上,我们再进一步。 通过下面方法在Powershell里面定位到D:\Scripts目录,
  set-location d:\scripts



  现在你就可以简单输入命令 .\runningservices, 而不用输入 d:\scripts\runningservices
   DSC0006.jpg
  在输入的时候,你还可以考虑使用Tap键的自动完成功能来填写路径以及文件名
  下面还有些Powershell Cmdlets 的例子
  Powershell中的复制粘贴
  如果,不管什么原因,你不想使用cmdlet了。我们也可以执行它,把命令从记事本里面复制出来,粘贴到Powershell的命令行中。
  复制和粘贴办法
  
       
  • · 复制代码到内存   
  • · 启动Windows Powershell   
  • · 编辑---〉粘贴   
  • · 按“回车”来执行代码   
  • · 你可以参考下面的截图
   DSC0007.jpg
  总结:Windows Powershell的Cmdlets
  当你执行Powershell命令的时候,你可以直接在Powershell命令行中输入相关命令,或者你可以创建村民dlets脚本,然后你通过Powershell命令行来调用。
  请记住,不管你要使用什么Powershell脚本,把ExecutionPolicy 设为RemoteSigned,这样你就可以执行本地的脚本了。
  你可以直接在命令行里输入
  Set-executionpolicy remotesigned
  当然,修改对应的Powershell注册表键值也可以允许通过Powershell命令行来执行.ps1文件

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-523462-1-1.html 上篇帖子: 性能测试之“Windows性能监视器” 下篇帖子: 用cacti来监控windows 服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表