首页 > 解决方案 > 如何运行存储在 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这个&过程。但无济于事。

标签: powershellclass-method

解决方案


其实,这里根本不需要Invoke-Expression。Powershell 支持基于函数名字符串的本机动态调用

$this您只需要使用关键字指定要执行类方法,然后像这样动态调用函数。

$command = $this."Query$srcType"($srcAddress,$srcUser,$srcPass)

参考

About_Classes


推荐阅读