使用 PowerShell 函数
当我们编写 PowerShell 脚本时,我们有很多选择。例如,我们可以为任务编写一千行代码,全部在一个代码块中。
但是,那会很复杂。因此,我们应该编写 PowerShell 函数。
PowerShell 函数极大地提高了我们代码的可用性和可读性,使其更易于使用。在本文中,我们将学习编写函数、添加和管理函数的参数,以及设置函数以接受管道输入。
PowerShell 中函数和 Cmdlet 之间的区别
PowerShell 函数的概念可能听起来很熟悉,因为它听起来像本机 PowerShell cmdlet。例如,Write-Host
和 Start-Service
等命令与函数非常相似。
但是,cmdlet 被命名为解决单个问题的代码片段,并且不容易定制。cmdlet 和函数之间的区别在于这些构造的制作方式。
我们可以使用 Get-Command
cmdlet 及其 -CommandType
参数查看哪些命令是 cmdlet 和函数。
Get-Command -CommandType Function
上面的命令返回当前加载到我们的 PowerShell 会话或 PowerShell 可用模块中的所有函数。
PowerShell 中的函数简介
我们使用 function
关键字来定义一个函数,后跟一个描述性的、用户定义的名称和一组花括号。花括号内是我们希望 PowerShell 执行的脚本块。
下面我们可以看到一个主要功能和该功能的执行。该函数名为 Install-Software
,使用 Write-Host
在控制台中显示输出消息(主要用于模拟安装)。
定义后,我们可以使用该函数的名称来执行其脚本块内的代码。
示例代码:
function Install-Software {
Write-Host 'The software has been installed.'
}
Install-Software
输出:
The software has been installed.
PowerShell 中动词-名词语法的函数命名约定最佳实践
函数的名称是必不可少的。我们可以随意命名我们的函数,但名称应该始终描述函数的作用。
PowerShell 中的函数命名约定最佳实践是动词-名词语法。
我们应该始终以动词开头,后跟破折号和名词。使用 Get-Verb
cmdlet 查找 approved
动词列表。
在 PowerShell 中定义高级函数
本教程假设我们在本节中将前面的代码直接复制并粘贴到 PowerShell 控制台中。我们还可以在脚本中定义函数。
我们在上一节中使用了一个小函数,因此在控制台中定义它并不是什么大问题。但是,大多数时候,我们将拥有更大的功能。
因此,在脚本或模块中定义这些函数,然后调用该脚本或模块将函数加载到内存中会更容易。
正如我们可能想象的那样,每次我们想要调整其功能时重新键入一个更重要的函数可能会令人困惑。
向 PowerShell 中的函数添加参数
函数可以有任意数量的参数。当我们创建函数时,我们可以选择包含参数并决定这些参数如何工作。
参数可以是可选的或强制的,它们可以被强制接受有限的参数列表之一或接受任何东西。
例如,我们通过 Install-Software
功能安装的虚构软件可能有许多可能的早期版本。但目前,Install-Software
功能无法让用户指定他们想要安装的版本。
如果我们是唯一使用该函数的人,我们可以在每次需要特定版本时更改其中的代码,但这会耗费大量时间。这种方法也容易出现潜在的错误,我们希望其他人能够使用我们的代码。
将参数引入我们的函数允许它具有可变性。正如变量允许我们编写可以处理相同情况的多个版本的脚本一样,参数将使我们能够编写一个以多种方式完成一件事的函数。
在这种情况下,我们希望它安装相同软件的版本并在多台计算机上安装。
首先,让我们在函数中添加一个参数,使用户或我们能够指定要安装的版本。
在 PowerShell 中的函数上创建简单参数
在函数上定义参数需要一个参数块。参数块保存函数的所有参数。
使用 param
关键字后跟括号定义参数块,如下所示。
示例代码:
function Install-Software {
[CmdletBinding()]
param()
Write-Host 'The software has been installed.'
}
在这一点上,我们函数的实际功能并没有改变一点。我们刚刚安装了管道,为一个参数准备函数。
一旦我们添加了 param
块,我们可以通过将其放在括号中来创建参数,如下所示。
示例代码:
function Install-Software {
[CmdletBinding()]
param(
[Parameter()]
[string] $Version
)
Write-Host "The software version $Version has been installed."
}
在上面的 param
块中,我们将首先定义 Parameter
块。使用 Parameter()
块会将参数转换为高级参数
。
像这里这样的空 param
块什么都不做,只是必需的; 我们将在下一节解释如何使用它。
让我们关注参数名称前面的 [string]
类型。我们通过将参数的类型放在参数变量名称之前的方括号之间来转换参数。
PowerShell 将始终将默认值设置为字符串。上面,变量 $Version
中传递的任何内容都将始终被视为字符串。
我们还将 $Version
添加到我们的 Write-Host
语句中。然后,当我们使用 Version
参数运行 Install-Software
函数并传递一个版本号时,我们应该会收到一条消息显示。
示例代码:
Install-Software -Version 2
输出:
The software version 2 has been installed.
相关文章
使用 PowerShell 过滤文件和文件夹
发布时间:2024/02/05 浏览次数:195 分类:编程语言
-
本文将讨论 PowerShell Get-ChildItem cmdlet,我们将使用它来获取目录中的所有项目并利用其过滤器开关参数。在某些情况下,我们需要检查文件是否存在于特定位置或目录中。
从 PowerShell 中的文件名中删除路径和扩展名
发布时间:2024/02/05 浏览次数:86 分类:编程语言
-
本教程将介绍在 PowerShell 中从文件名中删除路径和扩展名的不同方法。PowerShell 支持处理系统中的各种文件操作。你可以在 PowerShell 中执行创建、复制、移动、重命名、编辑、删除和查看文件等
使用 PowerShell 连接文件
发布时间:2024/02/05 浏览次数:159 分类:编程语言
-
本教程将教你使用 PowerShell 连接文件。PowerShell 允许你执行不同的文件操作,例如创建、复制、移动、删除、查看和重命名文件。
使用 PowerShell 从路径中提取文件名
发布时间:2024/02/05 浏览次数:52 分类:编程语言
-
本教程将教你如何使用 PowerShell 从路径中提取文件名。文件路径告诉文件在系统上的位置。在 PowerShell 中处理文件时,你可能只需要从路径中获取文件名。
使用 PowerShell 从计算机存储中删除证书
发布时间:2024/02/05 浏览次数:200 分类:编程语言
-
本教程将教你使用 PowerShell 从证书存储中删除证书。在 Windows 操作系统中,证书存储在计算机本地的证书存储中。它包含不同认证机构颁发的各种证书。
在 PowerShell 中清除变量内容
发布时间:2024/02/05 浏览次数:69 分类:编程语言
-
本教程将教你在 PowerShell 中清除变量内容。变量是值的存储位置。你可以将所有类型的值存储在 PowerShell 变量中。
PowerShell 中的空变量
发布时间:2024/02/05 浏览次数:64 分类:编程语言
-
本文讨论了 null 变量、在 PowerShell 中以不同语法使用 null 变量的影响以及检查 null 值的方法。PowerShell 处理值为 null 的 $Null 对象,并且某些命令需要一些输出才能生成。
PowerShell 中的管道变量
发布时间:2024/02/05 浏览次数:77 分类:编程语言
-
本文将向我们展示如何通过使用 PowerShell 的管道变量在 Windows PowerShell 中使用相同的概念和技术。我们通常使用 this 变量或关键字来表示各种编程语言中表达式中出现的最后一个对象。
使用 PowerShell 测试变量的数据类型
发布时间:2024/02/05 浏览次数:104 分类:编程语言
-
本文将讨论如何处理可变数据类型不匹配的几种方法,以及如何使用 PowerShell 正确纠正它们。我们通常使用的 PowerShell 中的一种技术是获取用户输入并将其存储在变量中。