PowerShell简介

PowerShell


简介:PowerShell 是一种命令行 shell 和脚本语言一体化工具。 它被设计为任务引擎,使用 cmdlet 来包装用户需要执行的任务。 在 PowerShell 中,可以在本地或远程计算机上运行命令。 可以执行管理用户和自动执行工作流等任务
**

什么是 PowerShell?

**

  1. PowerShell 由命令行 shell 和脚本语言两部分组成。 它最初是一种框架,用于在 Windows 中自动执行管理任务。
  2. PowerShell 现已发展为一种跨平台工具,用于执行多种任务。
  3. 命令行 shell 缺少图形界面,让你无法使用鼠标与图形元素进行交互。 相反,你需要在计算机控制台中键入文本命令。 下面是使用控制台的一些优点:
  4. 与控制台交互通常比使用图形界面快。
  5. 在控制台中,可以运行成批命令,因此它非常适合用于持续集成管道的任务自动化。
  6. 你可使用控制台与云资源和其他资源交互。
  7. 可在文本文件中存储命令和脚本,并使用源代码管理系统。 这可能是最大的优点之一,因为你的命令可重复且可审核。
    在许多系统(特别是政府系统)中,必须跟踪和评估或审核一切内容。 审核涵盖了从数据库更改到脚本所做的更改的所有内容。

功能


PowerShell 通过传统 shell 共享某些功能:

  1. 内置帮助系统:大多数 shell 都有一些帮助系统,你可以在其中了解有关命令的详细信息。 例如,你可以了解命令的作用以及它支持的参数。 PowerShell 中的帮助系统提供有关命令的信息,并与联机帮助文章集成。
  2. 管道:传统 shell 使用管道按顺序运行多个命令。 一个命令的输出是下一个命令的输入。 PowerShell 实现了传统 shell
  3. 传达的这种概念,但它又有所不同,因为它对文本上的对象进行操作。 本模块稍后会详细介绍此功能。
  4. 别名:别名是可用于运行命令的替代名称。 PowerShell 支持使用常见别名,如 cls(清除屏幕)和 ls(列出文件)。 因此,对于熟悉的命令,新用户可利用其对其他框架的知识,而不必记住 PowerShell 名称。

PowerShell 不同于传统的命令行 shell,具体体现在以下几方面:

  1. 它对文本上的对象进行操作。 在命令行 shell 中,你必须运行输出和输入可能不同的脚本,因此你最终会对输出进行格式化并提取所需的数据。 而在 PowerShell 中,可以使用对象作为输入和输出。 这意味着格式设置和数据提取所需时间会更少。
  2. 它具有 cmdlet。 PowerShell 中的命令称为 cmdlet(念作 commandlet)。 与其他许多 shell 环境不同,在 PowerShell 中,cmdlet 是在常见运行时而不是单独的可执行文件上生成的。 此特性在参数分析和管道行为方面提供了一致的体验。
  3. Cmdlet 通常采用对象输入并返回对象。 PowerShell 中的核心 cmdlet 是在 .NET Core 中生成的,采用的是开放源代码形式。 你可以使用来自社区和其他来源的更多 cmdlet、脚本和函数来扩展 PowerShell,也可以在 .NET Core 或 PowerShell 中生成自己的 cmdlet。
  4. 它具有多种类型的命令。 PowerShell 中的命令可以是本机可执行文件、cmdlet、函数、脚本或别名。 运行的每个命令都属于这些类型之一。 由于 cmdlet 是一种命令,因此,命令和 cmdlet 通常可互换使用。

安装

在此模块中,你将练习如何在计算机上使用 PowerShell。 PowerShell 可用于多种平台,但如果你使用的计算机运行的是 Linux、macOS 或早期版本的 Windows,则需要安装它。
每个 OS 对安装 PowerShell 的说明各不相同。 在继续之前,请花几分钟时间安装 PowerShell 或验证 PowerShell 安装。 此模块的下一个单元将介绍如何验证你的安装。


Windows

如果运行的是 Windows 8 或更高版本,则应已安装名为 Windows PowerShell 的 PowerShell 版本。 此版本与最新的 PowerShell 版本略有不同,但它可用于学习目的。

可从“开始”菜单打开 Windows PowerShell。

其他操作系统

如果你的计算机运行的不是 Windows 8 或更高版本,则需要安装 PowerShell。 若要查找针对你的 OS 的安装说明,请参阅安装各种版本的 PowerShell。

PowerShell使用

启动PowerShell
方法一: 直接在cmd中执行powershell,切换为powershell
PowerShell简介_第1张图片
方法二: 开始菜单中输入powershell启动powershell
方法三: 开始菜单----附件----powershell启动

使用powershell

powershell启动后界面如下:
PowerShell简介_第2张图片

get-help查看帮助

我们一无所知,所以我们输入help试一下,很好,powershell确实支持help(不过我们前边说过powershell命令是cmdlet格式,help也使用cmdlet格式,help只是get-help的一个别名)
PowerShell简介_第3张图片

get-command查看有哪些命令

在确定powershell支持get-help之后,首先我们需要知道powershell支持哪些命令,在上图get-help中可以看到可以使用get-command查看powershell支持的命令
CommandType列,表示命令类型,Alias是别名、Cmdlet是powershell格式的命令、Function是函数
Name列,就是命令
Definition列,命令功能的简单描述
PowerShell简介_第4张图片

get-command缩小范围

上面的命令太多了,我们需要缩小范围以确定类似ps功能的命令在powershell中是什么(当然我们说过powershell兼容cmd所以可以直接用ps,但这不是我们这里想要的)
查看信息都是get-开头,所以我们猜测查看进程的命令也以get-开头,执行get-command get-*试一下
结果如下图所示,列出了所有get开头的命令,其中我们看到有一个叫get-process的命令,一看就是获取进程信息的
PowerShell简介_第5张图片
或者我们直接尝试获取进程(process)相关的命令:get-command "*process*"
PowerShell简介_第6张图片

get-process查找进程

我们将命令锁定在了get-process但是我们不知道这个命令怎么用,可以通过get-help command的形式查看帮助,我们也试一下
PowerShell简介_第7张图片可以看到所有选项都是带中括号的,所以直接执行get-process就可以了
但是可以猜测,没有任何过滤条件返回的肯定是所有进程列表这需要过滤,可以看到-name参数可以过滤进程名,为保险起见我们还加上号通配符
整个要执行的命令就是:get-process -name *notepad

PowerShell简介_第8张图片

stop-process杀除进程

第一个思路是:在get-help get-process中已看到相关链接中有stop-process,这大概率是杀除进程的命令
第二个思路是:获取进程是get-process,那么杀除进程也大概率是xxx-process
执行:get-command *process
PowerShell简介_第9张图片

可以看到就5个命令,而其中只有stop-process比较像,一样使用get-help来查看帮助顺便确认是不是
PowerShell简介_第10张图片
显而易见确实是,而且杀除命令就是:stop-process -id pid
PowerShell简介_第11张图片

好了,现在我们开始进入主题


在哪里可以找到 PowerShell?

查找 PowerShell 的最简单方法是在搜索栏中键入“PowerShell”***

PowerShell简介_第12张图片

如何启动 PowerShell?

我通过单击“Windows PowerShell”快捷方式启动了 PowerShell 控制台
PowerShell简介_第13张图片
请注意,PowerShell 控制台的标题栏显示为“Windows PowerShell”

正在运行的是哪个版本的 PowerShell?

PowerShell 中有许多用于存储状态信息的自动变量。 其中某个变量是 $PSVersionTable,它包含可用于显示相关 PowerShell 版本信息的哈希表:

$PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.19041.1
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.1
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

执行策略

与通常的看法相反,PowerShell 中的执行策略不是安全边界。 它的作用是防止用户无意间运行脚本。 已确定的用户可以轻松绕过 PowerShell 中的执行策略。
无论采用怎样的执行策略设置,任何 PowerShell 命令都可以通过交互方式运行。 执行策略仅影响脚本中运行的命令。 Get-ExecutionPolicy cmdlet 用于确定当前的执行策略设置,而 Set-ExecutionPolicy cmdlet 用于更改执行策略。 建议使用 RemoteSigned 策略,该策略要求下载的脚本必须由受信任的发布者签名才能运行。

检查当前的执行策略:Get-ExecutionPolicy
Output
Restricted

当执行策略设置为“受限”时,PowerShell 脚本根本无法运行。 这是所有 Windows 客户端操作系统上的默认设置。 为了演示该问题,将以下代码另存为名为 Stop-TimeService.ps1.ps1 文件。

Get-Service -Name W32Time | Stop-Service -PassThru

只要以管理员身份运行提升的 PowerShell,该命令就可通过交互方式运行而不会出错。 不过,一旦将其保存为脚本文件并尝试执行该脚本,就会生成错误:

.\Stop-TimeService.ps1
.\Stop-TimeService.ps1 : File C:\demo\Stop-TimeService.ps1 cannot be loaded because
running scripts is disabled on this system. For more information, see
about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Stop-TimeService.ps1
+
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

请注意,上一组结果中显示的错误明确指示了发生了什么问题(在此系统上禁用了运行脚本)。 在 PowerShell 中运行命令后如果生成错误消息,请确保阅读该错误消息,而不是只重新运行该命令并希望它成功运行。
将 PowerShell 执行策略更改为远程签名。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Output
Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution
policy might expose you to the security risks described in the about_Execution_Policies help topic
at http://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"):y

务必阅读更改执行策略时显示的警告。 另外建议查看 about_Execution_Policies 帮助主题,确保已了解更改执行策略带来的安全影响。
由于已将执行策略设置为 RemoteSignedStop-TimeService.ps1 脚本将正常运行。

.\Stop-TimeService.ps1
output
Status   Name               DisplayName
------   ----               -----------
Stopped  W32Time            Windows Time

在继续之前,请务必启动 Windows 时间服务,否则可能会遇到无法预料的问题。

Start-Service -Name w32time

总结

在本章中,你了解了如何查找和启动 PowerShell,以及如何创建以管理员身份启动 PowerShell 的快捷方式。 你还了解了默认执行策略及其更改方式。

你可能感兴趣的:(powershell,linux,运维,服务器)