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

[经验分享] Windows PowerShell学习笔记

[复制链接]
发表于 2018-6-27 06:00:14 | 显示全部楼层 |阅读模式
  一、命令帮助
  PowerShell是专为系统管理员设计的全新的 Windows 命令行外壳程序。其构建在 .NET 公共语言运行时 (CLR) 和 .NET Framework 的基础之上,为您提供了对计算机上文件系统、注册表和数字签名证书的访问。
  PowerShell引入了cmdlet(读作“command-let”)的概念,每个cmdlet是内置的,可以分别使用,但是组合使用它们时更能发挥其作用。PowerShell 包括一百多个基本的核心 cmdlet,是用于操作对象的单功能命令。
  cmdlet由短划线 (-) 分隔的动词和名词,如 Get-Help、Get-Process 和 Start-Service。在PowerShell 中,大多数cmdlet 都非常简单,它们设计为与其他 cmdlet 组合使用。例如,“get”cmdlet 仅检索数据,“set”cmdlet
  仅建立或更改数据,“format”cmdlet 仅设置数据格式,“out”mdlet 仅将输出定向到指定的目标。每个 cmdlet 都具有一个帮助文件,可以通过键入以下内容访问它:
  get-help <cmdlet 名称>
  您最初可能没有意识到,在PowerShell 中工作时,所使用的是 .NET 对象。但是随着经验的增加,您会发现自己使用的是对象,甚至用对象进行思考。
  从技术上讲,.NET 对象是 .NET 类的实例,包含数据以及与该数据关联的操作,可以将对象视为具有属性和方法的数据实体。 例如,在PowerShell 中获取服务时,实际上是获取表示该服务的对象。查看有关服务的信息时,所查看的是其服务对象的属性,启动服务时,所使用的是服务对象的方法。类型相同的所有对象都具有相同的属性和方法,但是对象的每个实例可能具有不同的属性值。例如,每个服务对象都具有
  Name 和 Status 属性。但是,每个服务都可以具有不同的名称和不同的状态。
  使用对象的一个主要优点是,它使得用管道传输命令(即,将一个命令的输出作为输入传递到另一命令)容易得多。通信通常需要字符串操作,以便将输出从一种格式转换为另一种格式,并删除标题和列标题。
  PowerShell提供了一个基于对象而不是基于文本的新交互模型。接收对象的 cmdlet 可以直接作用于其属性和方法,而无需进行转换或操作。用户可以通过名称引用对象的属性和方法,而不是计算数据在输出中的位置。
  在以下示例中,将 IpConfig 命令的结果传递到 Findstr 命令。管道运算符 (|) 将其左侧命令的结果发送到其右侧的命令。在PowerShell 中,无需操作字符串或计算数据偏移量。
  PS> ipconfig | findstr &quot;Address&quot;
  IP Address. . . . . . . . . . . . : 172.28.21.5
  IP Address. . . . . . . . . . . . : 172.30.160.225
  在PowerShell 中,脚本文件的文件扩展名为
  .ps1,在命令提示符下键入脚本的名称即可运行脚本,扩展名是可选的。例如:c:/test/testscript.ps1或c:/test/testscript即使脚本在当前目录中,也必须指定脚本文件的完全路径。可以使用点 (.) 表示当前目录。例如:./testscript.ps1由于脚本可以用于传播恶意代码。因此PowerShell 中的安全策略允许您确定脚本是否可以运行,以及它们是否必须包括数字签名。PowerShell 中的执行策略都不允许通过双击脚本的图标来运行它。PowerShell包括一种非常丰富的脚本语言,使用该语言可以创建从最简单到非常复杂的脚本。它支持用于循环、条件、流控制和变量赋值的语言结构。
  若要显示 cmdlet 的帮助,请键入“get-help”,后跟该 cmdlet 的名称。例如:get-help get-command(如 Get-Help、Get-Command、Get-Process、Get-Service 和 Get-Eventlog)若要显示 cmdlet的详细帮助,包括参数说明和示例,请使用 Get-Help 的 Detailed 参数。例如:
  get-help get-command -detailed
  若要仅查看示例,请使用 Examples 参数。例如,若要显示 Get-Command cmdlet 的示例,请键入:
  get-help get-command -examples
  若要仅查看详细的参数说明,请使用 Get-Help 的 Parameter 参数。可以指定参数的名称,或者使用通配符 (*) 指定所有参数。例如,若要查看 Get-Command 的 TotalCount 参数说明,请键入:
  get-help get-command -parameter totalcount
  若要查看 Get-Command cmdlet 的所有参数,请键入:
  get-help get-command -parameter *
  也可以使用调用 Get-Help 的 PowerShell函数之一。Help 函数一次显示一整屏帮助内容。Man 函数显示与 Unix 中的手册页类似的帮助。若要使用 Help 和 Man 函数显示 Get-Command cmdlet 的帮助,请键入:man get-command 或help get-command
  
  
    以下笔记
转自桃花岛
  假定文件夹为c:/restored, 列出文件夹中所有文件:
  get-childitem c:/restored
  注:get-childitem执行起来有点像dir,但是dir能够列出注册表中某特定键值的子键吗?先别急,我们慢慢来。:)
  列出文件夹中所有文件,不包括后缀为tmp的文件:
  get-childitem c:/restored -exclude *.tmp
  列出文件夹中所有文件,不包括后缀为tmp和temp的文件:
  get-childitem c:/restored -exclude *.tmp, *.temp
  列出当前文件夹中所有文件,只包括后缀为doc和xls的文件:
  get-childitem c:/restored/*.* -include *.doc, *.xls
  列出当前文件夹以及所有子文件夹中所有文件,只包括后缀为pdf的文件:
  get-childitem c:/restored -recurse -include *.pdf
  列出文件夹中所有文件,不包括后缀为tmp的文件、只显示文件名和长度:
  get-childitem c:/restored -exclude *.tmp | select-object name, length
  列出文件夹中所有文件,不包括后缀为tmp的文件、显示所有属性、以列表方式输出:
  get-childitem c:/restored -exclude *.tmp | select-object * | format-list
  改变当前目录位置到c:/restored:
  set-location c:/restored
  注:也可以用cd命令以及sl,这是set-location的别名
  返回Home目录:
  cd ~
  
  把c:/restored映射为x盘:
  new-psdrive x -psprovider filesystem -root c:/restored
  把以下注册表键值映射为y盘:
  new-psdrive -name y -psprovider registry -root
  HKCU:/Software/Microsoft/Windows/CurrentVersion
  列出别名,根据定义排序:
  get-alias | sort-object definition
  还是假定c:/restored为我们执行操作的文件夹,
  列出文件夹中所有文件,以大小、文件名排序:
  get-childitem c:/restored | sort-object length, name
  列出文件夹中所有文件,以大小、文件名排序,倒序排列:
  get-childitem c:/restored | sort-object length, name -descending
  列出文件夹中所有文件,以大小、文件名排序,倒序排列,只显示前20个:
  get-childitem c:/restored | sort-object length, name -descending | select-object
  -first 20
  列出文件夹中所有文件,以大小、文件名排序,倒序排列,只显示后20个:
  get-childitem c:/restored | sort-object length, name -descending | select-object
  -last 20
  察看对象的属性和方法:
  get-childitem c:/restored | get-member
  想知道c:/restored目录里每种文件各有多少?
  get-childitem c:/restored | group-object extension
  根据文件创建的年、月分组:
  get-childitem c:/restored | group-object {$_.CreationTime.Year},
  {$_.CreationTime.Month}
  想知道c:/restored目录里文件的平均大小?总的大小?最大的文件大小?最小的文件大小?
  get-childitem c:/restored | measure-object length -average -sum -maximum
  -minimum
  只想知道总的大小?
  (get-childitem c:/restored | measure-object length -sum).sum
  注:比较一下这个命令和上述两个命令输出结果的不同:
  get-childitem c:/restored | measure-object length -sum
  删除所有.tmp文件:
  remove-item c:/restored/*.tmp
  删除所有大于1M的文件:
  get-childitem c:/restored | where-object {$_.length -gt 1048576} |
  foreach-object {remove-item $_.fullname}
  注:除了-gt,还有-lt, -le, -ge, -eq, -ne, -contains, -notcontains, -like, -notlike, -match, -notmatch这些参数可用,试试看他们各有啥作用。对了,如果有大小写敏感的要求,试着在这些参数前加c,例如-cgt。
  PowerShell理解KB, MB和GB,上面的命令可以简写成:
  get-childitem c:/restored | where-object {$_.length -gt 1MB} | foreach-object
  {remove-item $_.fullname}
  PowerShell也懂得:
  1MB + 1MB
  
  新建一个文件夹:
  new-item c:/restored/test -type directory
  验证文件夹(路径)是否已经存在:
  test-path c:/restored/test
  如果存在,PowerShell返回True;否则返回false
  想知道c:/restored下面是否有bat文件也可以用上面的命令:
  test-path c:/restored/*.bat
  如果存在,PowerShell返回True;否则返回false
  根据文件扩展名自动创建文件夹:
  get-childitem c:/restored | select-object extension | sort-object extension
  -unique | foreach-object {new-item (&quot;c:/restored/&quot;+$_.extension) -type
  directory}
  根据文件扩展名移动文件:
  get-childitem c:/restored | where-object {$_.mode -notmatch &quot;d&quot;} |
  foreach-object {$b = &quot;c:/restored/&quot; + $_.extension; move-item $_.fullname $b}
  假定工作目录为c:/test,
  列出工作目录及其子目录下所有文件:
  get-childitem c:/test -recurse
  只列出目录和子目录名:
  get-childitem c:/test -recurse | where-object {$_.mode -match &quot;d&quot;}
  列出工作目录及其子目录下所有文件,将输出结果保存到文本文件:
  1) get-childitem c:/test -recurse > c:/test/output.txt
  2) get-childitem c:/test -recurse | out-file c:/test/output.txt
  察看该文本内容:
  get-content c:/test/output.txt
  追加文件内容:
  get-childitem c:/test -recurse >> c:/test/output.txt
  保存文件同时在屏幕上显示输出结果:
  get-childitem c:/test -recurse | tee-object c:/test/output2.txt
  修改属性值(把c:/test及其子目录中所有文件的LastWriteTime属性都改为一致):
  get-childitem c:/test -recurse | foreach-object {$b=get-date; $_.lastwritetime = $b}

运维网声明 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-531058-1-1.html 上篇帖子: Windows Server 2008 更改域名 下篇帖子: Windows补丁GDR与QFE的区别
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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