MSDN网页“Approved Verbs for Windows PowerShell Commands”说:
查找动词用于查找对象。 搜索动词用于创建对容器中资源的引用。
“创建对容器中资源的引用”是什么意思?这是否意味着为现有资源定义新名称?这是否意味着获取有关资源的一些信息并将该信息转换为参考?或者它意味着什么呢?
如何使用“搜索”动词的示例是什么?这个动作与搜索有什么关系?
答案 0 :(得分:4)
<强> TL;博士强>
PowerShell领域中Search
和Find
之间的区别定义错误 。
现有的,由微软发起的模块反映了这种混乱,任意随 <{em> Find-*
或 {{1 } cmdlet,但不是两者。
要解决此问题,请向Microsoft要求澄清,这可能会导致:
Search-*
和Search
之间的有用区别,然后可以指导未来的实施。人类语言含糊不清,与Approved Verbs for Windows PowerShell Commands中记载的PowerShell对一致性的值得赞扬的追求相去甚远。
令人遗憾的是,该文档本身包含许多不明确的术语(截至本文撰写时),模糊地互换使用,例如 resource , object , item < / em>, target 和 reference 。
有点讽刺的是,该文件告诫:
要在cmdlet之间强制实施一致性,请不要使用已批准动词的同义词。
可以说,在英语中找到和搜索 ARE同义词,只有结果的确定度区分它们: 搜索比 find 更开放:你可以搜索没有结果,但找到意味着积极的结果。
在命名cmdlet时,这种区别值得吗?
可以说不 ,这反映在实际的Microsoft实施中 - 例如Active Directory,Exchange和PowerShellGet模块 - 选择一个术语排除其他。
再次,有点讽刺的是,所述文件似乎逆转 find 和 search 之间的人与人之间的关系:
Find
在容器中查找未知,隐含,可选或指定的对象。
Find
创建对容器中资源的引用。
不考虑对象与容器(以及引用在此上下文中)的模糊性,它是{{1这里的定义听起来比Search
更开放 - 与人类语言(英语)相对立。
felixfbecker针对Find
和Search
cmdlet的名词部分进行了以下观察:
我认为另一个区别是
Search-*
中的名词描述被搜索的内容而Find-*
中的名词描述正在搜索的内容 。因此,例如,cmdletSearch-Noun
是有意义的,而Find-Noun
则不然。另一方面,Search-Wikipedia
和Find-Wikipedia
都有意义,但意味着不同的事情。
答案 1 :(得分:1)
我所知道的Search-
的唯一例子是Search-ADAccount
,它确实对我们没有任何帮助,使其不那么模糊。它返回与Get-ADUser
/ Get-ADComputer
/ Get-ADObject
相同类型的对象,并且它具有Get-
cmdlet中不可用的搜索条件,即使这些标准支持过滤和“搜索”。
答案 2 :(得分:0)
一般来说,Get
命令用于检索信息以便进一步处理,而Search
命令用于更容易理清未知数。
如果我正在编写脚本,我可能希望使用Get-AdUser
命令来获取信息,但是如果我不具备特定参数或管道和按属性排序的能力,我可能发现使用常见的制表符完成变量的另一个命令行开关更容易。
Get-ADUser -Filter * -Properties LastLogonDate | ? {$_.LastLogonDate -lt (Get-Date).AddMonths(-3)}
是一个很长的命令,让那些没有登录3个月的人,但是..
Search-ADAccount -AccountInactive
做类似的工作,输入少得多,如果我只是将名称用于Csv,它们在功能上是相同的。
很明显,powershell的设计者期望Search
命令被用作普通Get
命令的速记版本,但它并没有真正流行,可能是因为像你我这样的普通人实际上有这些命令关于为什么有人会使用一个而不是另一个的问题。
答案 3 :(得分:0)
答案在你的问题中。
查找用于查找对象。但是,当涉及到诸如组,计算机,帐户之类的东西时。这些被称为“资源”。我们知道资源总是包含在容器中。因为它们不作为Active Directory中的对象存在。
由于我们已经定义了“查找”以查找对象,我们需要另一个动词,因此我们可以在“容器”内“搜索”“资源”。
以下是search-adaccount:
的说明搜索-ADAccount 获取Active Directory用户,计算机或服务帐户。