我如何 运行 存储在 Powershell 变量中的 class 方法
How can I run a class method stored in a variable in Powershell
我有以下 class:
Class ImportData{
$importSource
$importUser
$importPass
$importType
ImportData(){
}
[void]GetImportData($id){
$srcQuery = "SELECT * FROM [$global:sqlDB].[dbo].table WHERE id=$id"
$result = Invoke-Sqlcmd -Query $srcQuery -ServerInstance $global:sqlhost -Database $global:sqlDB
$srcAddress = "https://"+$result.impAddress
$srcUser = $result.impUser
$srcPass = $result.impPassword
$srcAuth = if($result.authoritative -eq 1) { $true } else { $false }
$srcType = $result.importType
$command = "Query$srcType($srcAddress,$srcUser,$srcPass)"
& $command
Write-Host $command
Invoke-Expression $command -ErrorAction Stop -ErrorVariable SearchError
}
[void]Queryapi($Address,$User,$Password){
Write-Host "Ran Queryapi method on Class Type: ImportData"
}
[void]processImport($data){
}
}
尝试运行动态调用时
Invoke-Expression $command -ErrorAction Stop -ErrorVariable
SearchError
或 & $command
,它不允许我 运行 它,因为它不是命令。但是我的 class 中的一个方法。
有没有办法根据查询返回的结果集动态调用方法?
如代码所示,我也尝试了 Invoke-Expression
和 &
过程。但无济于事。
实际上,您在这里根本不需要 Invoke-Expression
。
Powershell 支持基于函数名 string
的原生动态调用
你只需要使用$this
关键字指定你要执行class方法,然后动态调用该函数就可以了。
$command = $this."Query$srcType"($srcAddress,$srcUser,$srcPass)
参考资料
我有以下 class:
Class ImportData{
$importSource
$importUser
$importPass
$importType
ImportData(){
}
[void]GetImportData($id){
$srcQuery = "SELECT * FROM [$global:sqlDB].[dbo].table WHERE id=$id"
$result = Invoke-Sqlcmd -Query $srcQuery -ServerInstance $global:sqlhost -Database $global:sqlDB
$srcAddress = "https://"+$result.impAddress
$srcUser = $result.impUser
$srcPass = $result.impPassword
$srcAuth = if($result.authoritative -eq 1) { $true } else { $false }
$srcType = $result.importType
$command = "Query$srcType($srcAddress,$srcUser,$srcPass)"
& $command
Write-Host $command
Invoke-Expression $command -ErrorAction Stop -ErrorVariable SearchError
}
[void]Queryapi($Address,$User,$Password){
Write-Host "Ran Queryapi method on Class Type: ImportData"
}
[void]processImport($data){
}
}
尝试运行动态调用时
Invoke-Expression $command -ErrorAction Stop -ErrorVariable SearchError
或 & $command
,它不允许我 运行 它,因为它不是命令。但是我的 class 中的一个方法。
有没有办法根据查询返回的结果集动态调用方法?
如代码所示,我也尝试了 Invoke-Expression
和 &
过程。但无济于事。
实际上,您在这里根本不需要 Invoke-Expression
。
Powershell 支持基于函数名 string
你只需要使用$this
关键字指定你要执行class方法,然后动态调用该函数就可以了。
$command = $this."Query$srcType"($srcAddress,$srcUser,$srcPass)
参考资料