powershell - 如何运行存储在 Powershell 变量中的类方法
问题描述
我有以下课程:
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){
}
}
尝试运行动态调用时
调用表达式 $command -ErrorAction Stop -ErrorVariable SearchError
或者& $command
,它不允许我运行它,因为它不是命令。但是我班上的一种方法。
有没有办法根据查询返回的结果集动态调用方法?
从代码中可以看出,我也尝试过Invoke-Expression
这个&
过程。但无济于事。
解决方案
其实,这里根本不需要Invoke-Expression
。Powershell 支持基于函数名字符串的本机动态调用
$this
您只需要使用关键字指定要执行类方法,然后像这样动态调用函数。
$command = $this."Query$srcType"($srcAddress,$srcUser,$srcPass)
参考
推荐阅读
- elasticsearch - 无法在 mac 上启动 kibana。“apm”插件的设置生命周期未在 30 秒内完成
- javascript - 如果文件不存在,即使设置了错误处理程序,jQuery ajax 也会出错
- eclipse - 条件时如何用Column重写这个Scala
- apache-camel - 从 Camel JMS 组件向 AMQ Artemis 发送消息时无法创建会话工厂 AMQ219007
- matlab - 边界超像素和邻接矩阵
- rust - 使用 Tokio 的 spawn_blocking 有什么问题?
- gcc - 在 c 中使用内联汇编检查 32 位整数数组中的最大值
- javascript - VS 代码,编写绘制图形的扩展
- discord - 如何创建一个只允许特定文本通道中的特定单词的不和谐机器人
- javascript - Angular 8,如何导航到公共页面,然后导航到我想要的页面?