PowerShell是Microsoft的一种交互式Shell和脚本语言,它重新考虑了命令Shell的全部含义。 它在熟悉的Unix shell之上和之外具有非常有趣的功能,并且有一个强大的生态系统和社区。

在这个由两部分组成的教程中,您将学习一些可以使用PowerShell进行的出色操作,其历史记录,其体系结构,概念以及如何与Bash这样的Unix shell进行比较。 准备一个激动人心的旅程!

安装PowerShell

如果您使用的是Windows 10,那就很好了。 否则,请从Microsoft网站下载它。

一旦安装了PowerShell,您要做的第一件事就是启用脚本执行。 以管理员身份启动PowerShell,然后键入: Set-ExecutionPolicy RemoteSigned 。 您只需要执行一次。 现在,更新帮助文件: Update-Help -Force

您可以使用PowerShell做的很酷的东西

让我们从快速演示PowerShell的广度和深度开始。 这只是一个有点随意的清单,可以激发您的胃口。 它并不全面,也不一定是您可以使用PowerShell做的最令人印象深刻的事情。

播放影片

这是播放视频文件(或任何媒体文件)的一种好方法:

(New-object –COM WMPlayer.OCX).openPlayer("Path to your video")

它将打开媒体播放器窗口,并立即开始播放视频。

这里的字符串

PowerShell为多行字符串提供了一种最易读,视觉上令人愉悦的解决方案,也称为“此处字符串”。 您只需以@"开头,然后以"@结束"@ 。 请注意,开始标记和结束标记必须位于自己的行上,且两者之间的内容必须分开。 这是一个例子:

$x = "@
123
456
789
@"

产生随机数

选择一个介于1到100之间的随机数:

1..50 | Get-Random

这是一个简单的管道。 左侧可以生成1到50(含)之间的所有整数,然后将其馈送到选择其中一个的Get-Random cmdlet。

使用剪贴板

PowerShell深入支持剪贴板。 您可以获取和设置不同格式的对象。 显然,纯文本是可能的,但是您也可以使用图像,HTML,RTF甚至文件。

在这里,我在资源管理器中选择了一些文件,然后从PowerShell中的剪贴板中获取它们:

23:43:05 C:\Users\the_g> Get-Clipboard -FilesMode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        9/15/2016  11:41 PM         135890 Capture.PNG
-a----        9/16/2016  10:09 PM        3179548 20160917_110605.jpg
-a----        9/16/2016  10:09 PM        4623977 20160917_110734.jpg

说话

PowerShell也可以说话!

Add-Type -AssemblyName System.speech
$synth = New-Object -TypeName System.Speech.Synthesis.SpeechSynthesizer
$synth.Speak("PowerShell to the people")

获取所有正在运行的虚拟机

这是一个列出所有正在运行的虚拟机的管道:

Get-VM | Where-Object { $_.State -eq "Running" }

显示进度条

在长时间操作期间,PowerShell可以显示一个不错的进度栏。 这是一个递归计算当前目录下所有文件总大小的示例:

$files = Get-ChildItem . -Recurse
$total = 0
For ($i = 1; $i -le $files.Count-1; $i++)
{ Write-Progress -Activity "Calculating total size..." -status $files[$i].Name -PercentComplete ($i / $files.Count * 100)$total += $files[$i].LengthStart-Sleep -Milliseconds 50
}Write-Host "Total size: $($total / 1MB)"

PowerShell历史记录

PowerShell 1.0于2006年发布,但其发明者Jeffery Snover早就开始进行开发。 查看2002年宣言 。 PowerShell已走了很长一段路。 Windows在命令行功能方面落后于其他人。 系统管理员和高级用户不得不依靠cmd.exe和批处理文件的微薄产品。 曾经有一些微妙的尝试来改善Windows脚本宿主的状况,这些宿主允许使用VBScript或JScript对系统对象进行脚本编写,但是这种方法存在很多问题。

PowerShell很快改变了这一切。 它不仅与* nix环境的命令行功能匹配,而且在多项创新,前所未有的一致性和易用性方面跃居了领先地位。

今天,PowerShell的版本为5.1。 多年来,PowerShell的功能和托管环境得到了显着增长。

PowerShell 1.0支持Windows计算机(包括Windows Server 2003)的本地管理。

PowerShell 2.0已与Windows 7和Windows Server 2008 R2集成。 它增加了对远程的支持,并通过后台作业,事务,事件,调试,GUI开发环境和许多新的cmdlet大大增强了PowerShell的功能。

PowerShell 3.0是Windows管理框架的一部分。 它安装在Windows 8和Windows Server 2012上。它添加了计划的作业,会话连接,自动模块加载和许多新命令。

PowerShell 4.0已与Windows 8.1和Windows Server 2012 R2集成。 它增加了对所需状态配置,增强的调试,网络诊断和-PipelineVariable开关的支持。

PowerShell 5.0是Windows管理框架5的一部分。PowerShell 5.1是Windows 10周年更新的一部分。 新功能包括PowerShell类定义,.NET枚举,远程调试和调试后台作业,DSC本地配置管理器以及许多其他DSC改进。

PowerShell:脚本语言

PowerShell是一种非常强大的编程语言。 显然,它可以运行脚本,但是它也具有更高级的机制,例如模块,自定义cmdlet和类。 PowerShell是一种多范式语言,支持面向对象,功能和过程范式。

但是,PowerShell最重要的方面可能是它是一种成熟的.NET语言。 它创建并使用以任何语言编程的.NET程序集对象,并且通过PowerShell管道传递的对象是.NET对象。 PowerShell也具有强类型,但是在方便时,您可以忽略它,如果不需要,也不必指定类型。

程序脚本

要进行程序编程,您需要函数,条件和循环。 PowerShell拥有所有这些。 比较运算符不使用典型符号,可能会令您感到惊讶。 相反,您具有: -eq (等于), -lt (小于), -gt (大于),- -ge (大于或等于)等。

这是一个条件逻辑示例,该示例从用户那里获取输入并验证其是否有效。 请注意,使用-as运算符尝试将输入转换为整数。 如果失败,则结果为$null

$value = 44
$in = Read-Host "Guess a number between 1 - 100"
$guess = $in -as [int]
if ((($guess -eq $null) -or ($guess -lt 1)) -or ($guess -gt 100))
{Write-Host "$guess is NOT an integer between 1 - 100"Exit
}if ($guess -eq $value)
{Write-Host "You Win!"
}
elseif ($guess -lt $value)
{Write-Host "Too low"
}
else
{Write-Host "Too high"
}

PowerShell有许多功能和cmdlet可以与集合一起工作,并对它们进行切片和切块,因此通常不需要循环。 但是,以防万一,您可以在PowerShell中使用大量循环结构。 您可以使用For循环,ForEach循环,While循环,Do-While循环,甚至特殊的ForEach-Object循环。 这里有些例子。

For ( $i = 0; $i -lt 100; $i += 20 ) { $i }
0
20
40
60
80$list = 1..5
ForEach ($item in $list) { $item * 3}
3
6
9
12
15$later = $(Get-Date).AddSeconds(5)
while ($(Get-Date) -lt $later)
{"Are we there yet?" sleep 1
}PS C:\WINDOWS\system32> $later = $(Get-Date).AddSeconds(5)
while ($(Get-Date) -lt $later)
{"Are we there yet?" sleep 1
}Are we there yet?
Are we there yet?
Are we there yet?
Are we there yet?
Are we there yet?

功能编程

PowerShell全部与功能编程有关。 管道是功能执行环境,您可以在其中动态地编写功能/ cmdlet。 您可以以交互方式进行操作,也可以在脚本中进行操作。 如果要进行显式的函数式编程,也可以执行,但是语法有点麻烦。 查看本文: PowerShell中的函数式编程 。

面向对象编程

您已经了解了如何使用.NET对象以及通过管道传递的对象。 让我们在PowerShell中定义一个类并执行一些基本的OO。 我在这里为具有健康和盔甲的游戏角色创建一个类,该类可以受到伤害并计算其健康。 还有一个IsAlive()方法,用于检查运行状况是否大于0。我使用构造函数。

请注意,您必须使用[<class name>]::new()实例化PowerShell类。 从PowerShell 5.1开始,不支持New-Object语法。

class Character
{[string] $Name[int]    $Health[int]    $AttackDamage[float]  $Armor Character([string] $name,[int] $health,[int] $attackDamage,[float] $armor){$this.Name = $name$this.Health = $health$this.AttackDamage = $attackDamage$this.Armor = $armor}[bool] IsAlive(){return $this.Health -gt 0}[void] TakeDamage([int] $damage){if ($this.armor -gt 0){$damage = $damage - 0.4 * $this.Armor * $damage}$this.Health -= $damage}
}$c = [Character]::new("xxx", 50, 10, 1.0)
$c.TakeDamage(20)
$c.IsAlive()
True$c.Health
38$c.TakeDamage(40)
$c.Health
14$c.TakeDamage(40)
$c.Health
-10$c.IsAlive()
False

如果愿意,您甚至可以继承,但是我觉得此时您可能应该使用其他语言。

交互式脚本环境

PowerShell附带了自己的脚本开发IDE,该IDE包括一个交互式窗口,具有代码完成功能的脚本的多选项卡,所有cmdlet的内置帮助等等。 这是一个非常出色的工具,建议您尝试一下。

结论

您现在已经了解了PowerShell作为脚本语言的功能,并了解了一些有关其设计目标和历史的信息。 在第二部分中,我将深入介绍PowerShell的交互方面。

翻译自: https://code.tutsplus.com/tutorials/the-power-of-powershell-part-1--cms-27419

PowerShell的力量,第1部分相关推荐

  1. windows睡眠(休眠)唤醒助手_解决电脑在睡眠/休眠状态下无故被唤醒的情况

    电脑总是无故被唤醒?是谁动了我的电脑?大家难免遇到过睡眠/休眠不正常,无故被唤醒的情况,经常性的话,无疑会增加耗电量进而影响电脑的续航时间,怎么让电脑恢复持久呢! 命令提示符 想要查看究竟是哪些硬件设 ...

  2. 开源力量:微软竟开源 PowerShell

    导读 曾经有段时间,微软称 Linux 是"癌症",但是随着时光流逝,现在微软已经认识到了开源世界的不断增长,除了在这个领域加大投入之外别无选择.微软已经启动了几个开源项目,希望能 ...

  3. 脚本的力量:MSDN中一段代码的IronPython与PowerShell实现

    下面的示例说明如何创建 WebRequest 实例并返回响应. :-) ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.NETDEVFX.v20.chs/cpr ...

  4. 从零开始学PowerShell(3)筛选的力量

    在之前的几篇里我们已经学会了如何使用Get-Help命令来查看指定命令的帮助信息,以及如何使用"管道"符将多个命令连接在一起组合使用. 今天要说的另一个极为非常有用的命令就是Whe ...

  5. 卍解,开放基础架构的力量--9月26日免费大型讲座预告

    纯属预告,不属广告: 在windows server 2008这一块博客已经出了第一部"[为企业部署 Windows Server 2008 系列]",总结如下: 一.window ...

  6. vim 文本编辑器_Vim Windows安装指南–如何在PC上的PowerShell中运行Vim文本编辑器

    vim 文本编辑器 Vim is a powerful code editor. So powerful that both Linux and Mac have it installed by de ...

  7. powershell文章汇总

    3分钟带你了解PowerShell发展历程 从零开始--PowerShell应用入门(全例子入门讲解) Powershell变量的类型和强类型 – PowerShell 中文博客 Powershell ...

  8. powershell牛逼啊.

    继承是代码复用,多态是接口复用-花. 怎么牛逼. 我下载了个vcpkg,然后随便测试一下vcpkg install sdl2 于是问题来了: https://github.com/PowerShell ...

  9. powershell 编程_如何使用PowerShell以编程方式更改Visual Studio中的默认浏览器,并可能使自己陷入困境...

    powershell 编程 UPDATE: Why my own MacGyver solution was brilliant in its horrible way, the folks over ...

最新文章

  1. 报错You may use special comments to disable some warnings.vue-cli脚手架关闭eslint的步骤
  2. 安装显卡驱动后分辨率低的办法
  3. 大厂产品专家是怎么做项目的?
  4. 外卖平台降费,能否成为“全村人的希望”?
  5. Python自动化运维之高级函数
  6. Caffe100数据集使用
  7. 情报使能 合作共赢 | TI INSIDE计划发布会即将开始
  8. FPGA_四选一数据选择器
  9. 推荐一个数据可视化大屏幕报表开源系统
  10. Ubuntu 18.04缺少libstdc++.so.6共享库解决方案
  11. Pytorch每日一练——预测泰坦尼克号船上的生存乘客
  12. 川师计算机类专业收分安徽,四川师范大学专业收分
  13. 阿里云发短信错误SignatureDoesNotMatch
  14. Matlab的数据导入与拟合
  15. 如何设计一个结构合理的java项目
  16. 最新Cfree5.0免费版下载
  17. 双十一结束第一天,这是阿里新零售的AI想象力给买家带来的意外
  18. dict和defaultdict
  19. python小项目: 海龟库模拟弹幕古诗词
  20. 怎么样才能变得自律呢?

热门文章

  1. 一篇文章搞定DX9.0c 环境里的3DXSpriet !!
  2. fbx模型导入unity,绑了骨骼加蒙皮法线就反
  3. Java学习笔记---Lambda表达式及Stream流Api
  4. git 设置别名 git alias
  5. python 练习洗牌
  6. 崩坏3服务器维护2月8号,新版本上线!《崩坏3》2月8日新版本更新内容一览
  7. Java代码调试(jer的问题)
  8. 计算机命中率的概念,命中率
  9. zip压缩到指定目录
  10. 朴素贝叶斯算法(python 实现)