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. docx文件上传java_java上传文件通过mybatis存储到数据库的blob格式中.docx
  2. Squid反向代理加速缓存+负载均衡实验架构
  3. C# WPF MVVM模式Prism框架下事件发布与订阅
  4. Java性能优化方面的程序优化知识点归纳,希望对你有所帮助
  5. 提高篇 第五部分 动态规划 第6章 斜率优化动态规划
  6. pip下载安装与环境配置
  7. 前台和后台是要写两个工程吗_如何判断一个Bug属于前台还是后台
  8. oracle常用函数汇总【持续更新中...】
  9. CREO:CREO软件之零件【模型】之操作、基准、形状、扫描、工程、编辑、曲面的简介及其使用方法(图文教程)之详细攻略
  10. crt软件(crt软件安装)
  11. JUnit之Rule的使用
  12. 防摸鱼小软件——鼠标键盘检测器
  13. PPT文档打不开提示访问出错怎么办
  14. luogu1042 乒乓球(NOIP2003普及组第1题)
  15. 唱歌发声的基础知识与训练方法
  16. GPT3类自动补全助手,个体+超级团队成为可能 | 技术趋势
  17. 做人和做事哪个是前提
  18. 【HTML5系列教程】
  19. AnyBurn 免费专业的 CD/DVD/蓝光刻录和ISO编辑软件
  20. 基于51单片机的信号发生器

热门文章

  1. 我的Android进阶之旅------gt;/storage/sdcard0, /sdcard, /mnt/sdcard ,/storage/emulated/legacy 的区别...
  2. 3.6 Meterpreter 键盘记录
  3. SDCC软件开发者大会:编程马拉松团队火热招募中
  4. 家用路由器AP模式设置
  5. 各种说明方法的例句_初中常见的说明方法有哪些
  6. 安卓系统安全学习小结(二)
  7. 新浪微博是如何支撑百万 QPS 的?
  8. 神州信息郭为:以《数字化的力量》为锚,驶向数字文明的星辰大海
  9. 独特的电子邮箱地址-LeetCode练习(Java实现)
  10. 面向对象习题(附带解析)