Anders Wang


我所认识的每个人都是榜样,都有值得我去尊敬和学习的地方。


使用Splatting方法来传递参数

转载请注明出处,不胜感激!关于PowerShell的文章,我也同步发布在我的微信公共订阅号里,欢迎关注:[一起PowerShell]

所谓一年之计在于春,一日之计在于晨,那一周之计可在于周一。上班的第一天,还是一起看个简单的小技巧功能轻松一下吧。

我将要探讨如何在PowerShell中使用Splatting方法来传递参数。

首先什么是Splatting呢?简单的说,Splatting是一种用来打包传递参数值到一个命令的传参方法,Splatting里存储着相关的参数名以及对应的参数值,使用Splatting就可以方便的管理参数和参数值,以及从视觉和读写上也更加方便,也方便后续的修改再次使用。

好了,一起来看下Splatting到底在PowerShell中是如何使用的,为了更好的让你明白Splatting,我先举一个普通的例子, 一个最为普通的用WMI去查询系统信息版本号的例子。

Get-WmiObject -Class Win32_OperatingSystem -Property Version  

你甚至可以省略参数名,直接附上对应的参数值达到相同效果,因为Get-WmiObject有两个位置参数分别是Class和Property,所以你无需写参数名也能得到正确的输出。

Get-WmiObject Win32_OperatingSystem Version  

但是如果我把参数值的顺序写反了呢,就会得到一个报错信息。

Get-WmiObject Version Win32_OperatingSystem  

要知道在PowerShell里使用不同的自定义方法或者内置命令附加参数是时常的事,那么有什么好办法呢,今天要说的Splatting可以来解决这个问题,先看看如下使用例子。

$Param = @{Class = "Win32_OperatingSystem";  
           Property = "Version";  
           ComputerName = "LocalHost"}  

Get-WmiObject @Param  

如上就是Splatting的写法,它用一个集合包容了参数以及参数值去传递给一个命令。 这里我先用一个普通变量定义个哈希表,里面包含了参数名以及对应的参数值如: $Variable = @{=; =; …} ,随后用@符号直接用对应的命令调用这个参数集变量。

当然Splatting不仅仅只有这一种方式去使用,还可以用Splatting去处理位置参数的传参,这里与上面使用集合需要对应的参数名和参数值不同的是,我们只需要相对应的参数值,当然有一点需要注意的是它必须符合对应的参数位置顺序。让我们看下如下例子:

$ArrayArguments = "C:\PowerShell.txt", "C:\test\"  
Copy-Item @ArrayArguments  

直接把想对应的位置参数的值以数组的形式保存在一个变量中,然后依然是直接用@前缀的方式去调用即可。它的效果如同于下面的写法。

Copy-Item -Path "C:\test1.txt" -Destination "D:\"  

Splatting的用法还有很多,比如还有一个重复使用的特点,我在下面定义了一个颜色参数值集合,然后将它重复用于不同的字符串输出中。

$Colors = @{ForegroundColor = "yellow";  
            BackgroundColor = "red"}  

Write-Host "I love PowerShell" @Colors  
Write-Host "He loves PowerShell, too." @Colors  

Splatting还有很多很有趣的变相使用方法,大家可以继续去做一些更深入的挖掘。

最近的文章

Python读取数据编码排错

在Python开发中,当需要读取某些数据文件或者获取某些数据时,很有可能会遇到因为编码不匹配而报错的情况。这类问题其实非常常见,主要原因,还是因为没有选择正确的编码来识别所导致的。 为了很好的说…

Python, 技术博文详细阅读
更早的文章

PowerShellGet系列(二):用PowerShellGet管理你的模块包

转载请注明出处,不胜感激!关于PowerShell的文章,我也同步发布在我的微信公共订阅号里,欢迎关注:[一起PowerShell] 上一篇在PowerShellGet系列中【PowerShel…

PowerShell, 技术博文详细阅读
comments powered by Disqus