当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

作者:精品下载站 日期:2024-12-14 07:28:17 浏览:13 分类:玩电脑

PowerShell 初学者(第 12 部分):PowerShell 模块


上次我们玩过 PowerShell Drives。在这一部分中,我们将重点介绍 PowerShell 的结构,特别是 PowerShell 模块结构。但首先,让我们看一下上一部分的练习。

该系列的所有部分都可以在这里找到:PowerShell 初学者(系列)

回顾(第 11 部分)

在第 11 部分中,我要求:

发现
了解如何使用 PS Drive 环境显示计算机名称。

创建
创建一个新的持久性 PowerShell 驱动器,该驱动器引用远程计算机上的共享文件夹。了解如何使该驱动器持久存在。 (使用在线帮助、本地帮助或其他)

让我们来做第一个更简单的部分。要查找计算机名称,我们必须浏览 env: 目录。在那里我们将找到存储在 PowerShell 驱动器中的计算机名称环境变量。


cd env:

dir *computer*

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

但最重要的是它是这样称呼的:


$env:computername

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

第二个任务要求创建一个引用共享文件夹的持久 PowerShell 驱动器。要将网络驱动器映射到 Client01 上驱动器号为 F 的共享文件夹“Data”,命令如下所示:


New-PSDrive -Name F -PSProvider FileSystem -Root \Client01\Data -Persist

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

在 Windows 资源管理器中快速浏览一下即可发现驱动器已正确映射:

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

就是这样。让我们继续了解 PowerShell 模块。

概括


Windows PowerShell 驱动器是一个数据存储位置,您可以像 Windows PowerShell 中的文件系统驱动器一样访问它。


什么是 PowerShell 模块?

有些人可能认为关于模块的知识不是初学者的话题。我不这么认为,因为您必须了解为什么某些命令在 Windows Server(例如域控制器)上可用,但在客户端操作系统上不可用。所有这些过程均由 PowerShell 模块控制。我们来看看PowerShell团队的原始描述:

模块是一组相关的 Windows PowerShell 功能,组合在一起作为一个方便的单元(通常保存在单个目录中)。通过将一组相关的脚本文件、程序集和相关资源定义为模块,您可以比其他方式更轻松地引用、加载、保留和共享代码。

https://msdn.microsoft.com/en-us/library/dd878324(v=vs.85).aspx

到目前为止,一切都很好。他们说这是一组功能。它们被组合在一个单元中。

概括


模块是一组相关的 Windows PowerShell 功能,组合在一起作为一个方便的单元(通常保存在单个目录中)。它通常是一组命令和代码。


使用 PowerShell 和文件系统查找 PowerShell 模块

正如您可能怀疑的那样,有一个用于此任务的命令。

Get-Module 显示当前导入的模块。请注意,这些模块是一组命令,正如 PowerShell 团队在上面提到的。


Get-Module

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

但还有更多。还有更多!列出所有运行的模块


Get-Module -ListAvailable

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

ListAvailable 和上面三个模块有什么区别?如果您尝试运行模块的命令之一,所有模块都会自动导入。这对于脚本编写来说是很重要的一点。

例如,我的小脚本 Do-Speak 可以在此处找到 Do-Speak:开始与远程计算机交谈 (System.Speech),该脚本列在模块 Do-Speak 中。

如果我尝试运行此命令,则与该命令同名的模块会自动加载到当前的 PowerShell 会话中。

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

现在,运行自定义脚本后,我可以看到模块已加载到当前会话中。

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

Windows Server 角色和功能的内置模块也是如此。如果运行任何 Active Directory 命令,相应的模块就会加载到 PowerShell 会话中。

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

有多种方法可以显示模块的所有命令。我给你看其中两个。


(Get-Module ActiveDirectory).ExportedCommands

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

或者,在我看来,更好的选择:


Get-Command -Module ActiveDirectory

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

因此,这部分的最后一个问题是我们如何找到有关此模块的信息?它们存储在哪里?我可以获得更多信息吗?答案是肯定的。

Windows 附带的模块的默认文件夹位于此处:


cd $PSHome\Modules

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

如果您编写自己的脚本,请将其放在此处供所有用户使用:


cd $Env:ProgramFiles\WindowsPowerShell\Modules

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

最后但并非最不重要的当前用户的位置:


cd $Home\Documents\WindowsPowerShell\Modules

好的,这部分就这样了。

到目前为止我们学到了什么?


Get-Module 列出所有当前导入的模块。 Get-Module -ListAvailable 列出了当您运行这些模块的命令时自动导入的所有模块。将所有自定义模块存储在 C:\ProgramFiles\WindowsPowerShell\Modules 中。


安装模块(仅限 Windows Server)

当您在 Windows Server 上安装新角色或功能时,您必须注意关联的 PowerShell 模块也已安装。

例如,如果将 Windows Server 升级为域控制器,请确保提供 IncludeManagementTools 参数。这包括所有 Active Directory 图形工具和 Windows PowerShell 模块。如果不提供此参数,服务器将被提升(在运行 New-ADForest 或 New-ADDomainController 后)为域控制器,但您必须从远程计算机管理服务器,因为没有可用的工具来管理域控制器。本地服务器。没有 Active Directory 用户和计算机 (dsa.msc),没有 AD 站点 (dssite.msc)...疯狂的事情吧?


Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

如果您通过服务器管理器以图形方式安装新的角色和功能,请确保选中正确的复选框:

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

否则这个话题就没什么好说的了,因为一切都是自动发生的。

使用自定义模块

假设您发现了一个非常有趣的脚本。你下载它。然后你就有了代码。您可以使用 PowerShell ISE 打开它。就是上面的脚本。它测试与默认网关的连接。最重要的是,您甚至不需要知道网关的 IP 地址。它也适用于远程计算机。


function Test-Gateway {
param($Computer = $null,
 $Count = "1")
If ($Computer -eq $null)
{Test-Connection -Destination (Get-NetRoute -DestinationPrefix 0.0.0.0/0 | Select-Object -ExpandProperty Nexthop) -Count $Count}
 else
 {$Route=Invoke-Command -ComputerName $Computer {Get-NetRoute -DestinationPrefix 0.0.0.0/0 | Select-Object -ExpandProperty Nexthop}; Test-Connection -Source $Computer -Destination $Route -Count $Count}
 }

您认为您肯定会经常需要这个脚本。用它制作模块有什么问题吗?最大的优点是每次启动 PowerShell 时命令 (Test-Gateway) 都可用。这是一件好事,嗯?

在开始复制文件之前,创建一个“Test-Gateway”文件夹。请注意,文件名和文件夹名称必须匹配!

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

然后在 PowerShell ISE 中复制代码。 (要打开 ISE,请输入 ise)。

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

在您最近创建的文件夹中将该文件另存为 Test-Gateway.psm1(psm1 是 PowerShellModules 的文件关联)。

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

现在关闭 PowerShell。再次打开 PowerShell。尝试在不带任何参数的情况下运行 Test-Gateway。

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

从现在开始,该命令(模块)可在所有用户的每个 PowerShell 会话中使用。

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

顺便查看一下脚本运行的代码

 

Get-Command Test-Gateway -ShowCommandInfo

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

或者


Get-Command Test-Gateway | Select-Object -ExpandProperty ScriptBlock

[玩转系统] PowerShell 初学者(第 12 部分):PowerShell 模块

请记住,我们已经了解了有关 Select-Object 的一些知识:PowerShell 初学者(第 8 部分):PowerShell 的力量 - 接触对象(获取成员、选择对象)

到目前为止我们学到了什么?


安装角色和功能时,请选中“包括管理工具”复选框。 使用 PowerShell ISE 导入自定义模块和代码。在 C:\ProgramFiles\WindowsPowerShell\Modules 中创建一个文件夹,并确保该文件夹和文件名匹配。将代码保存为 psm1 文件。每次运行命令时,PowerShell 都会导入该模块。


锻炼

这是下一部分的练习。

对于这一部分来说,熟悉 PowerShell 模块是一项简单但非常重要的任务:

前往 https://a-d.site/2018/02/02/powershell-test-open-tcp-ports-with-test-openport-multiple -hosts-multiple-port-numbers/ 并使所有 PowerShell 会话中的所有用户都可以使用此命令(代码)。

下次主题见:PowerShell 初学者(第 13 部分):PowerShell 远程处理

Patrick Gruenauer,PowerShell MVP

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯