AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1033443
Accepted
DarkMoon
DarkMoon
Asked: 2020-09-11 19:52:31 +0800 CST2020-09-11 19:52:31 +0800 CST 2020-09-11 19:52:31 +0800 CST

PowerShell - 将 FilterScript 作为变量传递给 Where-Object

  • 772

我正在尝试将 Where-Object FilterScript 脚本块放入变量中,但我运气不佳。作为我正在尝试做的一个简单示例:

$test = @('one','two','three')
$filter = '$_ -eq "one"'
$test | Where-Object -FilterScript { $filter }

这似乎不起作用;我取回所有元素。我也试过:

$filter = { $_ -eq "one" }
$filter = [scriptblock]::Create($_ -eq 'one')

这些都返回:

one
two
three

但是,用实际过滤器替换变量可以按预期工作:

$test | Where-Object -FilterScript { $_ -eq "one" }

这仅返回“一”,没有“二”和“三”。有谁知道我怎样才能使这项工作?我最初是在 Core v7.0.3 上尝试它,但也在 Windows PowerShell v5.1 上进行了测试。

powershell
  • 1 1 个回答
  • 1713 Views

1 个回答

  • Voted
  1. Best Answer
    Garrett
    2020-09-12T00:41:43+08:002020-09-12T00:41:43+08:00

    后面的花括号-FilterScript把你弄乱了,一旦变量包含一个 ScriptBlock 你就不再需要这些花括号了。如果你有它们,它是一个包含脚本块的变量的脚本块。

    $foo = "hi"
    $foo | gm     (TypeName: String)
    {$foo} | gm   (TypeName: ScriptBlock)
    

    如果您添加[scriptblock]到$filter变量以强类型化变量,它会抱怨格式化,直到您在定义变量时添加大括号。这是确保您提供的对象与其参数Where-Object的预期类型相匹配的好方法,即-FilterScriptScriptBlock

    一旦大括号在变量定义中,它就可以在不强制使用强类型的情况下工作,这会导致它成为一个 ScriptBlock,但我会将类型留在其中,因此如果有人删除了大括号并且没有意识到它们,引擎会抱怨'在这个过程中改变你的变量类型。

    $test = @('one','two','three')
    [scriptblock]$filter = { $_ -eq "one" }
    $test | Where-Object -FilterScript $filter
    one
    
    • 4

相关问题

  • 资源锁和电源外壳

  • 脚本 - 如何断开远程桌面会话?

  • 如何限制向通讯组发送到外部地址?

  • Powershell对值与数组的作用不同?

  • Windows Powershell Vim 键绑定

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve