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

[玩转系统] PowerShell 和 ScriptRunner 中的参数验证概念

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

PowerShell 和 ScriptRunner 中的参数验证概念


[玩转系统] PowerShell 和 ScriptRunner 中的参数验证概念

对于那些经常委派需要用户输入的(PowerShell-)任务的人来说,总是有一个因素是您无法控制的,那就是最终用户的技能:即使有详细的解释和帮助,也可能会发生错误。

PowerShell 提供了一些选项来验证您的输入并防止输入错误。 ScriptRunner 处理这些选项,并在执行脚本之前让最终用户清楚地了解输入的有效性,其次,如果不满足条件,它将阻止脚本的执行。

在下面的段落中,我将讨论使用 PowerShell 和 ScriptRunner 验证用户输入的两个选项。

ValidateSet-属性

在 PowerShell 中验证参数的第一个选项是 ValidateSet 属性。它允许您为参数或变量指定一组有效值,并另外在 shell 中启用制表符补全。这消除了用户错误输入的风险,因为输入选项是预定义的。

ScriptRunner 通过将此验证选项转换为漂亮的下拉菜单进一步提高了可用性。

让我们检查下面的参数块。我们想要为“内存”变量指定一组预定义的可能性,在我们的示例中为 8Gb、16Gb 或 32Gb。

Param (
	[ValidateSet('8GB', '16GB', '32GB')]
	[string]$Memory
	)

正如我们在图 1 中看到的,ScriptRunner 将这段代码转换为一个下拉列表,最终用户可以从中轻松选择所需的值。

[玩转系统] PowerShell 和 ScriptRunner 中的参数验证概念

图 1a:ScriptRunner 自动将 ValidateSet 属性中包含的参数转换为下拉列表

如果您有兴趣了解有关 ScriptRunner 如何将 PowerShell 脚本转变为用户友好的 GUI 的更多信息,ScriptRunners 的技术博客上有一篇关于此主题的深入文章:PowerShell 参数及其在 ScriptRunner 中的图形表示

ValidatePattern - 属性

ValidatePattern 属性允许您在脚本的参数块中指定与最终用户输入的参数或变量值相匹配的正则表达式

如果变量的内容与正则表达式不匹配,PowerShell 将抛出错误。 ScriptRunner Delegate 和自助服务应用程序将通过相应输入元素处的红色感叹号来指示错误,并将阻止脚本执行,直到错误得到修复。

正则表达式简介 (regex)

正则表达式是定义搜索模式的字符序列。众所周知,正则表达式有点棘手,因此请务必使用正确的语法。下面,您将看到我们示例中使用的语法的简短概述。

锚点是指定表达式边界的字符:

占位符

使用占位符,您可以描述您希望搜索结果匹配哪些字符:

量词

使用量词,您可以指定通过占位符定义的字符作为模式一部分的次数。

正则表达式示例

让我们尝试一个简单的例子:我们想要验证一个仅与字母表中的字母匹配的字符串。

这是我们通过正则表达式实现这一目标的一种可能性:

^[a-z]+$

在下表中,您会发现表达式分为不同的部分,以便更清楚地了解发生的情况:

PowerShell 中的正则表达式验证

当表达式成形后,我们可以用它来验证 PowerShell 中的字符串变量。

多个 PowerShell 运算符(例如 -match-split-replace)以及 cmdlet(select-string ) 支持正则表达式。

请记住,PowerShell 正则表达式默认区分大小写。如果您想让它们区分大小写,请在运算符中使用“c”(例如 -cmatch-csplit-creplace 作为见图2)。

[玩转系统] PowerShell 和 ScriptRunner 中的参数验证概念

图 2:PowerShell 中的正则表达式验证示例

将正则表达式与 PowerShell 和 ScriptRunner 结合使用:第一个示例

我们将从正则表达式介绍中的表达式开始。我们想要验证一个仅与字母表中的字母匹配的字符串。

在我们的 PowerShell 脚本中,我们将 ValidatePattern 定义如下:

Param (
	[ValidatePattern(
			'^[a-z]+$'
			)
	]
	[string] $OnlyLetters
	)

当将此脚本作为 ScriptRunner 中的操作运行时,可以轻松验证参数 $OnlyLetters。如果验证失败,则会显示感叹号,并且执行按钮呈灰色。您可以在下面找到一些验证测试(图 3a-c):

[玩转系统] PowerShell 和 ScriptRunner 中的参数验证概念

图 3a:验证 $OnlyLetters 的输入后,ScriptRunner 显示错误警告,因为输入包含正则表达式禁止的数字。

[玩转系统] PowerShell 和 ScriptRunner 中的参数验证概念

图 3b:验证 $OnlyLetters 的输入后,ScriptRunner 显示错误警告,因为输入包含正则表达式禁止的空格。

[玩转系统] PowerShell 和 ScriptRunner 中的参数验证概念

图 3c:验证 $OnlyLetters 的输入后,ScriptRunner 接受该输入,因为它只包含字母字符

将正则表达式与 PowerShell 和 ScriptRunner 结合使用:高级第二个示例

该领域的另一个示例是验证 Active Directory 中的用户登录名。
设计的最大长度为 20 个字符,并且禁止使用大量字符 (/[:;|=,+*?]'“。 ),其次每个公司都使用自己的命名约定。

以下是客户的示例,用户登录名应符合以下规则:

  • 长度为10-15个字符
  • 没有数字字符
  • 没有下划线
  • 只允许使用特殊字符“-”
  • 必须以 u- 开头

现在,让我们将这些要求转换为正则表达式:

Param (
		[Validate Pattern (
				'^[u][-][a-z]{8,13}$'
				)
				]
		[string] $UserLoginName
	)

再次对语法进行一些解释:

而且,如图 4 a-e 所示,验证有效!

[玩转系统] PowerShell 和 ScriptRunner 中的参数验证概念

图 4a:验证 $UserLoginName 的输入后,ScriptRunner 显示错误警告,因为输入包含的字符太少。

[玩转系统] PowerShell 和 ScriptRunner 中的参数验证概念

图 4b:验证 $UserLoginName 的输入后,ScriptRunner 显示错误警告,因为输入字符串不是以“u-”开头。

[玩转系统] PowerShell 和 ScriptRunner 中的参数验证概念

图 4c:验证 $UserLoginName 的输入后,ScriptRunner 显示错误警告,因为输入包含数字。

[玩转系统] PowerShell 和 ScriptRunner 中的参数验证概念

图 4d:验证 $UserLoginName 的输入后,ScriptRunner 显示错误警告,因为输入包含特殊字符“$”。

[玩转系统] PowerShell 和 ScriptRunner 中的参数验证概念

图 4e:验证 $UserLoginName 的输入后,ScriptRunner 接受该输入,因为它符合正则表达式中定义的规则。

结论

正如您所看到的,如果您掌握了这些基础知识,参数验证根本就不是什么火箭科学。从长远来看,只需投入少量的时间,您就会减少错误,并节省时间和精力。当然,还有更多方法可以安全可靠地使用 PowerShell 脚本。您可以在免费网络研讨会《使用更安全的 PowerShell 脚本》中找到概述。

[玩转系统] PowerShell 和 ScriptRunner 中的参数验证概念

[玩转系统] PowerShell 和 ScriptRunner 中的参数验证概念

相关内容

  • 关于函数高级参数 - PowerShell |微软文档
  • 关于正则表达式 - PowerShell |微软文档
  • 在线正则表达式测试器和调试器:PHP、PCRE、Python、Golang 和 JavaScript
  • PowerShell 脚本如何在 ScriptRunner 中工作 |脚本运行器
  • 网络研讨会:PowerShell 安全

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

取消回复欢迎 发表评论:

关灯