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

[玩转系统] PowerShell 函数:如何创建第一个 PowerShell 模块命令

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

PowerShell 函数:如何创建第一个 PowerShell 模块命令


尽可能简单。创建第一个 PowerShell 命令并将其保存为模块并不是什么复杂的事情。当您以函数和 PowerShell 模块的形式向您的同事展示您自己的解决方案时,也许您的同事会睁大眼睛。这只是您的 PowerShell 之旅的开始。我们开始做吧。

什么是函数?

官方的说法是:

函数是具有您指定的名称的 Windows PowerShell 语句列表。当您运行函数时,您可以键入函数名称。列表中的语句运行就像您在命令提示符下键入它们一样。

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_functions?view=powershell-5.1

我会说:在函数中你可以放置代码、语句、参数等等……这个函数有一个名称。这个名字是用来启动你的函数的。

下面是一个可以在 Microsoft 文档中找到的示例:

function Get-PowerShellProcess {Get-Process PowerShell}

[玩转系统] PowerShell 函数:如何创建第一个 PowerShell 模块命令

运行该函数后,可以使用新命令:Get-PowerShellProcess。此命令运行 Get-Process PowerShell。极好的!

在本文中,我们将创建一个函数,然后将该函数保存为 PowerShell 模块。首先,让我们快速概述一下什么是模块。

什么是 PowerShell 模块?

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

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

这意味着我们可以将一组命令加载到 PowerShell 会话中。在旧版本的 PowerShell 中,您必须手动将模块加载到会话中才能使用该模块的命令。例如,很久以前,您必须导入模块 Active Directory 才能使用 Active Directory PowerShell 命令。

当您在详细模式下运行它时,PowerShell 会向您显示所有导入的命令:

Import-Module ActiveDirectory -Verbose

[玩转系统] PowerShell 函数:如何创建第一个 PowerShell 模块命令

要显示所有已安装且可以导入的模块,请运行

Get-Module -ListAvailable

[玩转系统] PowerShell 函数:如何创建第一个 PowerShell 模块命令

模块存储在文件夹中。

Windows 附带的模块的默认文件夹

cd $PSHome\Modules 

[玩转系统] PowerShell 函数:如何创建第一个 PowerShell 模块命令

不建议在这里保存您的模块。

所有用户的模块文件夹

cd $Env:ProgramFiles\WindowsPowerShell\Modules

[玩转系统] PowerShell 函数:如何创建第一个 PowerShell 模块命令

该文件夹将在后续步骤中使用。

当前用户的模块文件夹

cd $Home\Documents\WindowsPowerShell\Modules

实际功能

功能 1:检索计算机的 IPv4 地址

我准备了 2 个示例来帮助您开始了解该主题。

让我们开始吧。打开 Windows PowerShell ISE。 (搜索它或在 PowerShell 中运行 ise)。在 PowerShell ISE 会话中复制以下代码。我们将讨论每一个项目。

function Get-IPv4Address
{Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias "Ethernet" | Select-Object IPAddress}

功能:定义工作的开始并标记开始。

Get-IPv4Address:这是您的函数的名称。该命令将用于执行您的代码

如果您运行 Get-IPv4Address 那么

{Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias“以太网”|选择对象 IP 地址}

将被执行。非常简单。

按绿色图标(运行),然后运行 Get-IPv4Address。

[玩转系统] PowerShell 函数:如何创建第一个 PowerShell 模块命令

好的。您已经创建了第一个 PowerShell 函数。

功能 2 - 测试网关,用于测试本地主机和远程主机上的默认网关的可达性

这是另一个例子。我必须更详细地解释这一点。目标是使用命令Test-Gateway测试默认网关的可达性。在本地计算机上在远程主机上。与第一个示例的区别在于,我现在使用参数和 if - else 条件。

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}
 }

该函数的名称是 Test-Gateway。注意param声明。我提供了两个参数:Computer 和 Count。我已经为这个参数指定了标准,以防用户不提供“计算机”和“计数”的值。

如果用户没有为 Computer 提供值,则该值为 $null,因此 Test-Connection 在本地主机上执行。如果用户确实提供了计算机名称,则 else 语句将起作用。然后测试远程计算机的默认网关。如果用户不提供计数,则 ping 仅执行一次。 (一个 ICMP 回显请求)

为什么我要从 Get-NetRoute 调用默认网关?嗯,从路由表中读取的默认路由 (0.0.0.0/0) 始终为我提供默认网关地址。如果您有多个网卡,可以在哪一个网卡上找到网关地址?

啊啊和行动……

首先,我不提供计算机名。我登录的是计算机 DC01。

[玩转系统] PowerShell 函数:如何创建第一个 PowerShell 模块命令

我现在提供一个计算机名。请注意,远程计算机必须驻留在同一域中,并且您通常必须以域管理员成员的身份执行该命令。 Client01 可以访问其默认网关。

[玩转系统] PowerShell 函数:如何创建第一个 PowerShell 模块命令

第二个示例应该让您概述如何创建带参数的函数。让我们进行最后一步。我们想为此功能创建一个模块。

将函数保存为脚本模块

在 PowerShell ISE 中,单击“文件”并选择“保存”。为了使您的函数可供所有用户使用,请将其保存在 ProgramFiles\WindowsPowerShell\Modules\Gateway 中。这意味着您必须在那里创建一个文件夹,该文件夹与您的文件同名。选择类型 psm1。

[玩转系统] PowerShell 函数:如何创建第一个 PowerShell 模块命令

单击“保存”。关闭所有 PowerShell 会话。再次打开 PowerShell 并运行 Get-Module 以查看新的脚本模块。

Get-Module -ListAvailable

[玩转系统] PowerShell 函数:如何创建第一个 PowerShell 模块命令

这是你的新模块及其功能:

Get-Command -Module Gateway | Format-List

[玩转系统] PowerShell 函数:如何创建第一个 PowerShell 模块命令

从 PowerShell 3.0 开始,您的模块会自动导入,这意味着您的命令立即可用。无需导入您的模块。

[玩转系统] PowerShell 函数:如何创建第一个 PowerShell 模块命令

结论

今天就这样。哇。这是迄今为止最详尽的文章。但写作比阅读更容易,尤其是在您不熟悉主题的情况下。如果您阅读了本文,那么您已经完成并创建了您的第一个函数。祝贺并表示尊重。跟紧!

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

取消回复欢迎 发表评论:

关灯