如何在Where-Object中使用函数

re-*_*gor 1 powershell

我想按属性“innerText”过滤对象列表。但我需要做一些准备。为什么进一步的代码不起作用?它返回所有对象。

function enc[[string]$inp]
{
    return [System.Text.Encoding]::GetEncoding("windows-1251").GetString([System.Text.Encoding]::GetEncoding("ISO-8859-1").GetBytes($inp))
}

$req.Links | Where-Object { enc($_.innerText) -eq "my string"} | fl
Run Code Online (Sandbox Code Playgroud)

我做错了什么?不幸的是我没有在互联网上找到必要的文章。有很多这样的例子: ($_.Name -eq "name") - 对我来说没有任何价值。

Mic*_*lli 5

我认为问题在于你如何定义你的功能。

function enc
{
    param ([string]$inp)

    return [System.Text.Encoding]::GetEncoding("windows-1251").GetString([System.Text.Encoding]::GetEncoding("ISO-8859-1").GetBytes($inp))
}

$req.Links | Where-Object { (enc $_.innerText) -eq "my string"} | fl
Run Code Online (Sandbox Code Playgroud)

简单测试:

$a = "hello","world"
function enc
{
    param ([string]$inp)
    $inp
}

$a | Where-Object { (enc $_) -eq "hello"}
Run Code Online (Sandbox Code Playgroud)

  • 我建议添加括号 - `$(enc $_.innerText) -eq "my string"` 以防止未定义的行为 (2认同)
  • 或 `function enc([string]$inp) { ... }` (2认同)