powershell - 添加 ScriptMethod Helper 以查询 PSCustomObject
问题描述
我正在尝试向现有的 PSCustomObject 添加一些简单的辅助方法。我的目标是替换这样的东西:
$Persons.Where{$_.FirstName -like "*Test*"}
有了这个:
$Persons.GetFirstName("Test")
我在找出与 add-member 一起使用的有效 ScriptMethod 时遇到了很多麻烦。
这是我的示例代码,以及迄今为止我尝试过的所有变体:
$Persons = [PSCustomObject]@()
$Person1 = [PSCustomObject]@{
FirstName = 'John';
LastName = 'Doe';
Age = 27
}
$Person2 = [PSCustomObject]@{
FirstName = 'Test';
LastName = 'Dummy';
Age = 27
}
$Persons += $Person1
$Persons += $Person2
$Persons
#FirstName LastName Age
#--------- -------- ---
#John Doe 27
#Test Dummy 27
#Get using a regular where method to confirm
$Persons.Where{$_.FirstName -like "*Test*"}
#FirstName LastName Age
#--------- -------- ---
#Test Dummy 27
#Add the Helper Method GetFirstName
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this.where{$_.FirstName -like "$Args[0]"}}
#Check if the Test record is returned
$Persons.GetFullName("Test")
#Use this to remove the method for the next try
$Persons.PSObject.properties.remove('GetFirstName')
#Other Permutations I have tried
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this.where($this.FirstName -like "$($Args[0])")}
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this.where({FirstName -like $Args[0]})}
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this.where({FirstName -like $args(0)})}
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this.where({FirstName -like "$Args[0]"})}
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this.where({FirstName -like "$($Args[0])"})}
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this.where({$this.FirstName -like $Args[0]})}
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this.where({$this.FirstName -like "*$($Args[0])*"})}
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this.where({$this.FirstName -eq $Args[0]})}
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this.where({$_.FirstName -like $Args[0]})}
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this.where({$_.FirstName -like "$($Args[0])"})}
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this.where("FirstName -like ""$($Args[0])""")}
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this.where("$($_.FirstName) -like ""$($Args[0])""")}
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this.GetEnumerator().where{FirstName -like $Args[0]}}
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this.GetEnumerator().where{$this.FirstName -like $Args[0]}}
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this.GetEnumerator().where{$_.FirstName -like $Args[0]}}
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this | ?{$_.FirstName -like $Args[0]}}
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this | ?({$_.FirstName -like $Args[0]})}
add-member -inputobject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {$this | ?({$_.FirstName -like "$($Args[0])"})}
解决方案
$Args
每个范围都有一个,因此$Args
里面.Where{ <in here> }
实际上并不包含脚本方法的输入参数 - 而是声明一个命名参数,它会起作用:
Add-Member -InputObject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {
param([string]$fnArg)
$this.Where{$_.FirstName -like $fnArg}
} -Force
推荐阅读
- excel-formula - 在 PowerBI 中复制 Excel 平均值
- python - Python Tika 无法读取 PDF - 无法下载 Tika Server
- javascript - JavaScript 函数返回值是来自 firestore 的未定义快照
- flutter - 如何将 json 和序列化与 firebase 和 bloc 一起使用?错误:将对象转换为可编码对象失败
- python - 将图像作为灰度导入并将其转换为灰度在将其乘以 255 时不会产生相同的结果
- google-bigquery - 在 BigQuery 中分割账户余额数据以生成借记报告
- javascript - Firefox 为什么以及如何显示其用户处于私人模式?
- excel - 如何从 24 小时移动平均数据中获取每小时读数?
- xamarin.forms - 调试器在解析 Rest API 响应 HttpClient、Xamarin Forms 时停止
- wordpress - 如何延迟wordpress中的自动播放?