今天在检查Get-Command
的输出并列出Function:
提供程序下面的项目时,我注意到一些有趣的事情。我没有看到这在任何加载的内置程序中使用,但我的第三方模块之一显示了一个有趣的CommandType
,而不是预期的应用程序,,Cmdlet,或别名类型:
CommandType Name Version Source
----------- ---- ------- ------
Filter New-HashObject 3.3.2 Pscx
这是这个函数,只有这个函数,我可以找到这个CommandType
。我以前从未见过它。我也翻遍了PowerShell文档,我能找到的唯一(几乎)直接的参考是FilterInfo类,它派生自FunctionInfo。根据它的描述,我可以看到FilterInfo
:
提供关于存储在会话状态中的过滤器的信息。
但这是它的结束,和FunctionInfo
对Function
的描述一样。我能够找到一些其他模糊的引用类名与过滤器的名称,但这些:
- 都是
string
类型和描述函数(至少我发现的是)。 - 一些已经从最新版本的文档中删除,但在5.1中有记录。
- 它们看起来像c++文档,而不是c#或VB。NET,尽管它是PowerShell SDK文档的一部分。
- 我知道c++/CLI是什么,但是一般来说c++在。net结构上的例子比c#或VB更少见。
什么是Filter
命令?根据我到目前为止所发现的,这似乎是一些用于创建过滤器的新结构,以代替基于字符串的过滤,但这些都是可编程类型,我绝对没有找到关于PowerShell中过滤器作为可执行结构的含义的信息。我能找到的最接近的东西是输入过滤器参数文档,它仍然只解释了字符串基于的过滤,它引用的支持通配符在Cmdlet参数中再次进入使用通配符在Cmdlet上实现基于字符串的过滤器参数。
From about_Functions>过滤器
过滤器是在管道中的每个对象上运行的一种函数。过滤器类似于一个函数,它的所有语句都在Process块中。
它基本上是一个简单的结构,类似于一个函数,它将对管道输入进行操作,而不需要所有高级函数设置
filter TodaysFiles{
if ($_.LastWriteTime -gt [datetime]::Today) {$_ | select length, fullname}
}
dir | TodaysFiles