[玩转系统] PowerShell Splatting:它是什么以及它如何工作?
作者:精品下载站 日期:2024-12-14 13:03:27 浏览:14 分类:玩电脑
PowerShell Splatting:它是什么以及它如何工作?
PowerShell splatting 可能听起来很奇怪,但这种技术提供了一种格式化参数并将参数发送到 cmdlet 和函数的便捷方法。您可以利用展开来使代码更具可读性和更易于使用,而不是一长串参数或由容易出错的反引号分隔的相同参数。
在本文中,您将了解如何最好地使用 PowerShell splatting 来增强您的脚本和代码!
先决条件
如果您想按照本文进行操作,请确保您拥有用于大多数常见功能的 Windows PowerShell 5.1,但拥有能够覆盖展开参数的 PowerShell 7.1(下面的演示)。
什么是 PowerShell 泼溅?
要了解 PowerShell splatting,您必须首先了解基本参数。通常,当您在 PowerShell 中将参数传递给命令时,您会使用破折号、参数名称后跟参数,如下所示。
Copy-Item -Path "TestFile.txt" -Destination "CopiedFile.txt" -WhatIf -Force
或者,您也可以使用反引号传递参数。
Copy-Item `
-Path "TestFile.txt" `
-Destination "CopiedFile.txt" `
-WhatIf `
-Force
为什么要使用传统方法或反引号方法?传统方法很好,但是参数很多,处理和读取往往变得很麻烦。使用反引号“`,似乎可以提供更好的可读性。由于很容易忘记或放错反引号,因此通常不推荐使用此技术。
相反,您可以使用 PowerShell splatting。要展开参数集,首先创建一个包含每个参数和参数参数的键/值对的哈希表。然后,构建哈希表后,使用 @
将这组参数传递给命令。
例如,您可以创建一个名为 $Params
的哈希表,然后将哈希表中定义的一组参数传递给 Copy-Item
cmdlet,如下所示。
$Params = @{
"Path" = "TestFile.txt"
"Destination" = "CopiedFile.txt"
"WhatIf" = $True
"Force" = $True
}
Copy-Item @Params
结合传统参数和泼溅
当您测试脚本或在命令行上时,您可以轻松组合这两种方法。对于脚本,通常最好最终创建一个 splatted 变量来分配给函数或 cmdlet。下面是一个示例:
$Params = @{
"Path" = "TestFile.txt"
"Destination" = "CopiedFile.txt"
}
Copy-Item @Params -Force -WhatIf
正如您所知,这是一种非常有用的技术,您不必根据需要放弃任何一种方法。有时,您可能想要测试附加参数或通过组合方法对参数进行不同的格式化。
覆盖 Splatted 参数
在 PowerShell 7.1 中,您现在可以覆盖展开参数。在此之前,您无法通过传递的参数修改splatted 参数。作为覆盖 splatted 参数的示例,请注意下面如何覆盖 -WhatIf
参数。
$Params = @{
"Path" = "TestFile.txt"
"Destination" = "CopiedFile.txt"
"WhatIf" = $True
"Force" = $True
}
Copy-Item @Params -WhatIf:$False
覆盖 splatted 参数允许您否定哈希表中定义的键/值参数,而是使用传统定义的参数值。
位置参数的喷射数组
使用命名参数被认为是最佳实践,这会强制您指定参数名称,后跟参数参数。不过,您也可以按位置来展开参数。
例如,如果您想将名为 TestFile.txt 的文件复制到名为 CopiedFile.txt 的文件,则可以使用如下位置参数来执行此操作。
Copy-Item 'TestFile.txt' 'CopiedFile.txt'
您还可以创建一个仅包含参数值的数组(而不是如上所示的哈希表),而不是用老式的方式指定位置参数。下面您将看到一个例子。
$ParamArray = @(
"TestFile.txt"
"CopiedFile.txt"
)
Copy-Item @ParamArray
尽管这种技术并不经常使用,但这可能很有用,因为它是一种提供展开参数的不太冗长的方法。请记住,您需要确保知道给定函数或 cmdlet 中参数的位置;否则,您将面临将值传递给错误目标参数的风险。
代理函数和 Splatted 命令
有时,PowerShell cmdlet 并不能完全满足您的需要。在这种情况下,您可以选择创建“包装”函数,甚至代理函数。这些函数允许您向原始 cmdlet 添加其他参数,然后使用新参数调用该 cmdlet。
了解 $Args
和 $PSBoundParameters
当您在 PowerShell 中运行函数时,PowerShell 会创建一个名为 $Args
的自动数组变量。该数组包含传递给该函数的所有未命名参数值。
您会发现另一个名为 $PSBoundParameters
的自动变量,其中包含所有绑定参数的哈希表。请注意下面的 Test-Function
函数返回 $Param1
和 $Param2
参数。
Function Test-Function {
Param(
$Param1,
$Param2
)
Write-Host "Unnamed Parameters" -ForegroundColor 'Green'
$Args
Write-Host "Bound Parameters" -ForegroundColor 'Green'
$PSBoundParameters
}
Test-Function "test1" "test2" "test3" -Param1 "testParam" -Param2 "testParam2"
这些自动变量与splatting有何关系?当您构建代理命令时,自动传递绑定和未绑定参数非常有用。
使用 Splatted 参数构建包装函数
要展示展开在包装函数中的作用,请创建一个自定义函数,将未命名参数和命名参数传递给 Copy-Item
cmdlet。通过这种技术,您可以快速创建自定义函数,添加附加功能,但保留您期望的相同参数集。
Function Copy-CustomItem {
Get-ChildItem
Copy-Item @Args @PSBoundParameters
Get-ChildItem
}
请务必记住,如果您使用 CmdletBinding
声明或定义参数属性,则自动变量 $Args
将不再可用。
结论
将参数分配给函数和 cmdlet 对于代码可读性和功能性来说是一种非常有用的技术。由于操作哈希表和数组很容易,因此您可以快速扩展展开值,以根据传递的选项有条件地修改值。立即将这种强大的技术融入您的脚本中!
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag