使用 PowerShell 函数

Marion Paul Kenneth Mendoza 2023年1月30日
  1. PowerShell 中函数和 Cmdlet 之间的区别
  2. PowerShell 中的函数简介
  3. 向 PowerShell 中的函数添加参数
  4. 在 PowerShell 中的函数上创建简单参数
使用 PowerShell 函数

当我们编写 PowerShell 脚本时,我们有很多选择。例如,我们可以为任务编写一千行代码,全部在一个代码块中。

但是,那会很复杂。因此,我们应该编写 PowerShell 函数。

PowerShell 函数极大地提高了我们代码的可用性和可读性,使其更易于使用。在本文中,我们将学习编写函数、添加和管理函数的参数,以及设置函数以接受管道输入。

PowerShell 中函数和 Cmdlet 之间的区别

PowerShell 函数的概念可能听起来很熟悉,因为它听起来像本机 PowerShell cmdlet。例如,Write-HostStart-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.
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

相关文章 - PowerShell Function