返回数组而不是哈希表

德米特里·库尔塔舍夫

我有以下powershell脚本:

$reportsFolder = $PSScriptRoot;
$reportServerDbInstance = "localhost";
$dbName = "dbname";

function Execute-Query{
    Param(
        [parameter(position=0)]
        $query,
        [parameter(position=1)]
        $execDb 
        )
    Invoke-Sqlcmd -Query $query -ServerInstance $reportServerDbInstance -Database $execDb -ErrorAction 'Stop'
}

function Test-ReportQuery($query, $execDb) {

    Execute-Query -query $query -execDb $execDb

}


function Test-ReportQueries($reportName, $queries) {
    foreach($q in $queries.GetEnumerator()) {
        try {
            Test-ReportQuery -query $q.Value -execDb $dbName
        }
        catch {
            $errorMsg = "Dataset `"$($q.Name)`" for report `"$reportName`" failed. Check the query";
            Write-Error $errorMsg
            Write-Error $q.Value
            Write-Error $_;
        }
    }
}


function Prepare-QueriesFromReportForTest ($folder, $name) 
{     
    [OutputType([System.Collections.Hashtable])]

    $tmpReportString = gc $(Join-Path $folder "$name.rdl");

    [xml]$report = $tmpReportString;

    foreach($ds in $report.Report.DataSources.DataSource) {
        if ($ds.DataSourceReference -ne "rdb_custom") {
            Write-Host "Report $name skipped as datasource is not rdb_custom";
            return;
        }
    }

    $paramsFromReport = $report.Report.ReportParameters;

    $params = @{}
    $tmpParams = @{}

    foreach ($p in $paramsFromReport.ReportParameter ) {
        $value = "''";
        if ($p.DataType -eq "DateTime" )  {
            $value = "GETDATE()";
        }
        if ($p.DataType -eq "Boolean") {
            continue;
        }
        if ($p.DataType -eq "Float" )  {
            $value = "0";
        }
        if ($p.DataType -eq "Integer" )  {
            $value = "0";
        }
        9009
        $params.add($p.Name, $value);
        $tmpParams.add($p.Name, $value);
    }

    $testQueries = $null;
    $testQueries = @{};

    foreach($q in  $report.Report.DataSets.DataSet) {

        if ($q.Query -eq $null) {
            continue;
        }

        #getting the dataset parameters that <> to report parameters
        foreach($p in $q.Query.QueryParameters.QueryParameter) {
            foreach($p1 in $tmpParams.GetEnumerator()) {
                if (($p.Value -eq "=Parameters!$($p1.Name).Value".Replace("@","")) -and ($p.Name -ne "@$($p1.Name)") ) {
                    $params.add($p.Name.Replace("@",""), $p1.Value);
                }

            }
        }

        $query = $q.Query.CommandText.Trim().Replace(";","").ToLower();

        foreach ($param in $params.GetEnumerator()) {
            $query = $query.Replace("@$($param.Name.ToLower())", $param.Value );
        }

        if ($query.Substring(0,6).ToLower() -eq "select") {
            $testQueries.add($q.Name, "SELECT * FROM (SELECT TOP(0) " + $query.Substring(6, $query.Length -6) + ") a");
        }
    }
    $testQueries
    #return $testQueries;
}


Get-ChildItem $reportsFolder -Filter Water_Queue_Detail_Report.rdl | 
Foreach-Object {
    $fileName = $_.BaseName;

    Write-Host "Testing $fileName report";

    $queriesToTest = Prepare-QueriesFromReportForTest -folder $reportsFolder -name $fileName

    if ($queriesToTest -ne $null) {
        Test-ReportQueries -reportName $fileName -queries $queriesToTest;
    }

}

当我在Prepare-QueriesFromReportForTest函数完成之前调试它时,它在哈希表中有正确的值:

在此处输入图片说明

然而,变量$queriesToTest得到一些奇怪的值(一些整数 9009)+ 预期值:

在此处输入图片说明

我检查了两个对象的类型,我看到在函数中对象是哈希,但函数返回数组。

怎么了?

珍妮·图卡宁

Prepare-QueriesFromReportForTest函数具有仅含有数目孤线9009foreach循环。删除:

if ($p.DataType -eq "Integer" )  {
    $value = "0";
}
9009
$params.add($p.Name, $value);
$tmpParams.add($p.Name, $value);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用ActiveRecord :: Base.connection返回哈希而不是数组

来自分类Dev

哈希表的Powershell数组

来自分类Dev

哈希表的指针数组

来自分类Dev

基于哈希的表返回null

来自分类Dev

使用数组作为哈希表

来自分类Dev

从哈希表数组的键创建数组

来自分类Dev

从哈希表数组的键创建数组

来自分类Dev

从映射而不是数组中获取哈希

来自分类Dev

Rails,执行sql返回哈希数组

来自分类Dev

从哈希数组返回特定值-JSON

来自分类Dev

返回按属性排序的对象/哈希数组

来自分类Dev

在返回子集的同时提高哈希数组的性能

来自分类Dev

从哈希表获取值返回null

来自分类Dev

哈希表替换特定索引的数组列表

来自分类Dev

哈希表数组搜索中的Nullpointer异常

来自分类Dev

在哈希表数组上使用排序对象

来自分类Dev

创建数组,哈希表和字典?

来自分类Dev

将数组元素插入哈希表

来自分类Dev

从对象数组初始化哈希表?

来自分类Dev

无法从哈希表检索Float数组

来自分类Dev

字符串到数组或哈希表

来自分类Dev

Laravel返回“对象”而不是数组?

来自分类Dev

回声返回数组而不是值

来自分类Dev

返回一维数组而不是多维数组

来自分类Dev

从哈希键或返回子例程返回数组引用

来自分类Dev

循环遍历哈希数组并执行标题化并返回数组

来自分类Dev

循环遍历哈希数组并执行标题化并返回数组

来自分类Dev

perl:变量返回哈希值而不是字符串

来自分类Dev

Arraylist.get 返回哈希码而不是类的字段