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

PowerShell基本教程

[复制链接]

尚未签到

发表于 2018-9-3 06:42:00 | 显示全部楼层 |阅读模式
好久不见, 我又食言了, 一直没有更新教程, 我也不想找借口, 因为我花了很多时间跑去玩大蛇无双和魔王再临.  今天, 我将为您介绍如何使用格式化和输出命令. 在PowerShell中,负责进行格式化和输出的是三类cmdlet。他们分别是:Format-*、Out-*和 Write-* 。顾名思义,Format-* 主要是用来对信息进行格式化操作,Out-*用于指定输出设备,而 Write-* 为 PowerShell 宿主(Host)输出的更多有用信息提供了快捷访问接口。
  我们要将对象输出到控制台或打印机等位置前,我们首先必须将对象格式化成为字符串的形式。一个对象可能包含几十种属性信息,PowerShell的开发者已经考虑到我们在日常使用时,不会使用一个对象的所有信息,因此默认情况下只保留该对象上最主要的几种属性。让我们来看看进程对象默认会显示哪些属性。首先看看进程对象究竟有多少个属性:
  PS C:/> (Get-Process Idle | Get-Member -MemberType Property).Count
  51
  在上面例子,首先使用Get-Process命令返回表示Idle进程的对象,并通过Get-Member命令返回该对象上所有属性,最后我们给出该对象的属性个数(打印这些属性太占地方了,你可以把Count去掉,检查返回的结果)。让我们看看PowerShell默认情况下会输出哪些属性吧:
  PS C:/> Get-Process Idle
  Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
  -------  ------    -----      ----- -----   ------     -- -----------
  0       0        0         16     0               0 Idle
  正如前面所介绍的,PowerShell默认只会返回对象上一部分属性信息,究竟显示哪些属性是通过定义在ETS系统中的信息决定的。
  Format族包含了:Format-Custom、Format-List、Format-Table和Format-Wide四个命令。在大多数情况下,Format-Table是PowerShell默认使用的格式器。Format-List的输出类似上面输出进程属性的格式,每个对象将会占一行。一行内包括该对象的多个主要属性,如果该属性信息太长,PowerShell就会将该信息截断。让我们看几个管理PowerShell最常用的例子:
  PS C:/> Get-EventLog -LogName 'Windows PowerShell' -Newest 10 | Format-Table
  Index Time          Type        Source                 InstanceID Message
  ----- ----          ----        ------                 ---------- -------
  1029 五月 31 21:38 Information PowerShell                    400 Engine state is changed from None to Available....
  1028 五月 31 21:38 Information PowerShell                    400 Engine state is changed from None to Available....
  1027 五月 31 21:38 Information PowerShell                    600 Provider "Certificate" is Started. ...
  1026 五月 31 21:38 Information PowerShell                    600 Provider "Variable" is Started. ...
  1025 五月 31 21:38 Information PowerShell                    600 Provider "Registry" is Started. ...
  1024 五月 31 21:38 Information PowerShell                    600 Provider "Function" is Started. ...
  1023 五月 31 21:38 Information PowerShell                    600 Provider "FileSystem" is Started. ...
  1022 五月 31 21:38 Information PowerShell                    600 Provider "Environment" is Started. ...
  1021 五月 31 21:38 Information PowerShell                    600 Provider "Alias" is Started. ...
  1020 五月 31 15:43 Information PowerShell                    403 Engine state is changed from Available to Stopp...
  这个例子显示PowerShell最近10个日志的日志信息. Format-Table为了保证每个对象只输出一行,只会输出那些较重要的信息,一般对对象的检索,使用Format-Table就是最好的办法。
  其他几个命令, 您可以参照PowerShell的帮助, 或我翻译的帮助信息详细学习.
  看完了负责格式化对象输出信息的cmdlet,我们需要考虑该把这些信息输出到什么位置了。Out族包括了:Out-Default、Out-File、 Out-Host、Out-Null、Out-Printer、Out-GridView和Out-String。
  Out-Host命令,就是将显示结果返回给宿主程序,由宿主程序展现给使用者。Out-Default默认就是使用Out-Host进行输出,但是根据 PowerShell文档的描述,Out-Default用来提供一种占位符的特性,你可以在脚本完成后,重新修改Out-Default来控制整个程序的输出。
  Out-Null的作用就是将输出丢弃,在很多时候,如果我们不关心命令的返回结果,而只关一条命令产生的某些影响时,我们可以将该命令的输出通过管道发送给Out-Null。例如:
  PS C:/> New-Item TestIt -Type dir
  Directory: Microsoft.PowerShell.Core/FileSystem::C:/
  Mode                LastWriteTime     Length Name
  ----                -------------     ------ ----
  d----         2007-9-16     21:10            TestIt
  PS C:/> New-Item TestIt -Type dir | Out-Null
  New-Item : Item with specified name C:/TestIt already exists.
  At line:1 char:9
  + New-Item  
  我们首先创建了TestIt的目录,默认情况下,New-Item返回新创建的目录,该对象被输出到控制台上。我们接下来试图再创建一次该目录,并将输出信息丢弃。然而,由于该目录已经存在,因此创建失败,命令给出了错误提示。这里我们需要注意错误信息并没有被丢弃!接下来我们删除目录TestIt,再次执行创建命令,这次,屏幕上没有显示创建的目录信息。
  最后,我们来看看Out-File。很多时候,我们需要将某种编码的字符串存储为其他编码形式。我们可以简单的使用Out-File的参数 Encoding来设置输出信息的编码格式。这些编码包括了:“Unicode”、“UTF7”、“UTF8”、“UTF32”、“ASCII”等等。有时候,我们还会遇到如果将信息写入文件中。如果该文件已经存在,我们可能希望信息继续追加到文件的末尾,或者当文件已经存在时,我们希望覆盖这个文件。通过参数Append,我们可以告诉Out-File究竟是覆盖文件,还是在文件的末尾进行追加。让我们看看简单的例子:
  PS C:/> "我是第一行!" | Out-File append.txt
  PS C:/> Get-Content C:/append.txt
  我是第一行!
  PS C:/> "我是第二行,但是我要试试覆盖第一个行!!" | Out-File append.txt
  PS C:/> Get-Content C:/append.txt
  我是第二行,但是我要试试覆盖第一个行!!
  PS C:/> "我是第三行,让我跟在第二行后面吧!!!" | Out-File -Append append.txt
  PS C:/> Get-Content C:/append.txt
  我是第二行,但是我要试试覆盖第一个行!!
  我是第三行,让我跟在第二行后面吧!!!
  Write族的命令我将会在下一讲为大家详细介绍. 希望大家喜欢我的教程.


运维网声明 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-561740-1-1.html 上篇帖子: Powershell进阶学习(5)关于Session和自动化 下篇帖子: powershell最常用的命令之(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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