简介:PowerShell 是一种命令行 shell 和脚本语言一体化工具。 它被设计为任务引擎,使用 cmdlet 来包装用户需要执行的任务。 在 PowerShell 中,可以在本地或远程计算机上运行命令。 可以执行管理用户和自动执行工作流等任务。
**
**
在此模块中,你将练习如何在计算机上使用 PowerShell。 PowerShell 可用于多种平台,但如果你使用的计算机运行的是 Linux、macOS 或早期版本的 Windows,则需要安装它。
每个 OS 对安装 PowerShell 的说明各不相同。 在继续之前,请花几分钟时间安装 PowerShell 或验证 PowerShell 安装。 此模块的下一个单元将介绍如何验证你的安装。
如果运行的是 Windows 8 或更高版本,则应已安装名为 Windows PowerShell 的 PowerShell 版本。 此版本与最新的 PowerShell 版本略有不同,但它可用于学习目的。
可从“开始”菜单打开 Windows PowerShell。
如果你的计算机运行的不是 Windows 8 或更高版本,则需要安装 PowerShell。 若要查找针对你的 OS 的安装说明,请参阅安装各种版本的 PowerShell。
启动PowerShell
方法一: 直接在cmd中执行powershell,切换为powershell
方法二: 开始菜单中输入powershell启动powershell
方法三: 开始菜单----附件----powershell启动
我们一无所知,所以我们输入help试一下,很好,powershell确实支持help
(不过我们前边说过powershell命令是cmdle
t格式,help
也使用cmdle
t格式,help
只是get-help
的一个别名)
在确定powershell支持get-help之后,首先我们需要知道powershell支持哪些命令,在上图get-help中可以看到可以使用get-command
查看powershell支持的命令
CommandType
列,表示命令类型,Alias
是别名、Cmdlet
是powershell格式的命令、Function
是函数
Name
列,就是命令
Definition
列,命令功能的简单描述
上面的命令太多了,我们需要缩小范围以确定类似ps功能的命令在powershell中是什么(当然我们说过powershell兼容cmd所以可以直接用ps,但这不是我们这里想要的)
查看信息都是get-开头,所以我们猜测查看进程的命令也以get-开头,执行get-command get
-*试一下
结果如下图所示,列出了所有get开头的命令,其中我们看到有一个叫get-process
的命令,一看就是获取进程信息的
或者我们直接尝试获取进程(process
)相关的命令:get-command "*process*"
我们将命令锁定在了get-process
但是我们不知道这个命令怎么用,可以通过get-help command
的形式查看帮助,我们也试一下
可以看到所有选项都是带中括号的,所以直接执行get-process
就可以了
但是可以猜测,没有任何过滤条件返回的肯定是所有进程列表这需要过滤,可以看到-name
参数可以过滤进程名,为保险起见我们还加上号通配符
整个要执行的命令就是:get-process -name *notepad
第一个思路是:在get-help get-process
中已看到相关链接中有stop-process
,这大概率是杀除进程的命令
第二个思路是:获取进程是get-process
,那么杀除进程也大概率是xxx-process
执行:get-command *process
可以看到就5个命令,而其中只有stop-process比较像,一样使用get-help来查看帮助顺便确认是不是
显而易见确实是,而且杀除命令就是:stop-process -id pid
查找 PowerShell 的最简单方法是在搜索栏中键入“PowerShell”***
我通过单击“Windows PowerShell”快捷方式启动了 PowerShell 控制台
请注意,PowerShell 控制台的标题栏显示为“Windows 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
帮助主题,确保已了解更改执行策略带来的安全影响。
由于已将执行策略设置为 RemoteSigned
,Stop-TimeService.ps1
脚本将正常运行。
.\Stop-TimeService.ps1
output
Status Name DisplayName
------ ---- -----------
Stopped W32Time Windows Time
在继续之前,请务必启动 Windows 时间服务,否则可能会遇到无法预料的问题。
Start-Service -Name w32time
在本章中,你了解了如何查找和启动 PowerShell,以及如何创建以管理员身份启动 PowerShell 的快捷方式。 你还了解了默认执行策略及其更改方式。