首页 > 解决方案 > Powershell Like 运算符调用 REST 错误

问题描述

我正在为我们的 BI 应用程序开发一个从互联网上获取的自定义 PoweShell 模块。

我的问题很简单,下面的代码不起作用:

Get-QlikDataConnection -filter "name -like 'Data*'"

并引发如下错误:

Invoke-RestMethod : The remote server returned an error: (400) Bad Request.
At C:\Program Files\WindowsPowerShell\Modules\Qlik-Cli\1.13\functions\core.ps1:32 char:15
+ ...   $result = Invoke-RestMethod -Method $method -Uri $path @params -Web ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebExc
   eption
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

但是,下面的代码可以正常工作并向我显示正确的输出:

Get-QlikDataConnection -filter "name eq 'DataPrepAppCache'"

我做错了什么还是某些模块不理解一些运算符?

标签: powershell

解决方案


在查看了您正在使用的模块的来源 Qlik-Admin-Utils之后,我不会使用该-filter参数,因为您在此处指定的输入将由Invoke-QlikGetcmdlet 中的此块处理:

  If( $filter ) {
      If( $path.contains("?") ) {
        $path += "&filter=$filter"
      } else {
        $path += "?filter=$filter"
      }
    }

此脚本将您的过滤器作为查询参数附加到 URL 中,它不支持常规 PowerShell 格式,但将过滤器发送到 qLik 的 REST API。

如果我正在写这个,我会忽略他们的过滤并执行以下操作:

$Connections = Get-QlikDataConnection 
$DataConnection = $Connections | Where name -like "Data*"

这更有可能在更少的摆弄下工作。

但是,如果您想使用 Qlik 的过滤器支持,我发现了这个,因此您可以在此处阅读它的语法

看起来他们确实提供了自己的过滤器,这可能会有所帮助,它是Starts With过滤器,定义为SW,用于Name sw 'Data'. 你可以试试这个,看看它是否有效。

Get-QlikDataConnection -filter "name sw 'Data'"

推荐阅读