Powershell 添加ScriptMethod帮助器以查询PSCustomObject
我正在尝试向现有PSCustomObject添加一些简单的帮助器方法。 我的目标是替换如下内容:Powershell 添加ScriptMethod帮助器以查询PSCustomObject,powershell,Powershell,我正在尝试向现有PSCustomObject添加一些简单的帮助器方法。 我的目标是替换如下内容: $Persons.Where{$_.FirstName -like "*Test*"} 为此: $Persons.GetFirstName("Test") 我很难找到一个可以与add member一起使用的ScriptMethod。 下面是我的示例代码,以及我迄今为止尝试过的所有变体: $Persons = [PSCustomObject]@() $Pe
$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
实际上不包含脚本方法的输入参数,因此{}
声明一个命名参数即可:
Add-Member -InputObject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {
param([string]$fnArg)
$this.Where{$_.FirstName -like $fnArg}
} -Force
每个作用域都有一个
$Args
,因此中的$Args
实际上不包含脚本方法的输入参数,因此{}
声明一个命名参数即可:
Add-Member -InputObject $Persons -MemberType ScriptMethod -Name GetFirstName -Value {
param([string]$fnArg)
$this.Where{$_.FirstName -like $fnArg}
} -Force
你真棒!以下是我使用的(我引用了param以防万一):
addmember-inputobject$Persons-MemberType ScriptMethod-Name GetFirstName-Value{param([string]$fnArg);$this.where({$\uu.FirstName-Like“$fnArg”})
FWIW“
在这里,$fnArg
是双重不必要的:-)即使输入包含空格?在输入中防止空格只在解析输入时才有意义-另一方面,在这种情况下,它没有任何区别。“doubly”的意思是:$fnArg
保证是字符串(多亏了父作用域中的[string]
约束),而-like
总是将字符串作为其左侧操作数,因此即使$fnArg
的值不是字符串,它会自动转换为1:-)谢谢你的解释。实际上,我刚刚添加了一个名称中带有空格的记录,并创建了该方法的两个版本,带和不带,您完全正确;这些名言没什么区别,你太棒了!以下是我使用的(我引用了param以防万一):addmember-inputobject$Persons-MemberType ScriptMethod-Name GetFirstName-Value{param([string]$fnArg);$this.where({$\uu.FirstName-Like“$fnArg”})
FWIW“
在这里,$fnArg
是双重不必要的:-)即使输入包含空格?在输入中防止空格只在解析输入时才有意义-另一方面,在这种情况下,它没有任何区别。“doubly”的意思是:$fnArg
保证是字符串(多亏了父作用域中的[string]
约束),而-like
总是将字符串作为其左侧操作数,因此即使$fnArg
的值不是字符串,它会自动转换为1:-)谢谢你的解释。实际上,我刚刚添加了一个名称中带有空格的记录,并创建了该方法的两个版本,带和不带,您完全正确;引用没有什么区别。