的MSDN頁 「Approved Verbs for Windows PowerShell Commands」 說:什麼是PowerShell「搜索」動詞?
的查找動詞用來尋找的對象。 搜索動詞用於創建對容器中資源的引用。
「創建對容器中的資源的引用」是什麼意思?這是否意味着爲現有資源定義新名稱?這是否意味着獲取有關資源的一些信息並將該信息轉換爲參考?或者這意味着什麼?
什麼是如何使用「搜索」動詞的例子?這個動作與搜索有什麼關係?
的MSDN頁 「Approved Verbs for Windows PowerShell Commands」 說:什麼是PowerShell「搜索」動詞?
的查找動詞用來尋找的對象。 搜索動詞用於創建對容器中資源的引用。
「創建對容器中的資源的引用」是什麼意思?這是否意味着爲現有資源定義新名稱?這是否意味着獲取有關資源的一些信息並將該信息轉換爲參考?或者這意味着什麼?
什麼是如何使用「搜索」動詞的例子?這個動作與搜索有什麼關係?
我知道的Search-
的唯一例子是Search-ADAccount
並且它並沒有對我們做任何有利於減少歧義的方面。它返回與Get-ADUser
/Get-ADComputer
/Get-ADObject
相同類型的對象,它具有在Get-
cmdlet中不可用的搜索條件,即使它們也支持篩選和「搜索」。
一般來說,Get
命令用於檢索信息以供進一步處理,其中Search
命令用於更容易地整理未知數。
如果我正在編寫一個腳本,我很可能想用Get-AdUser
命令來獲取信息,但是如果我沒有使用特定參數或者按屬性進行管道和排序的功能,我可能會發現它更容易另一個帶有通用製表符完成變量的命令行。
Get-ADUser -Filter * -Properties LastLogonDate | ? {$_.LastLogonDate -lt (Get-Date).AddMonths(-3)}
是一個相當長的命令來獲取誰沒有3個月登錄的人,但是..
Search-ADAccount -AccountInactive
確實少得多的投入類似的工作,如果我只是管道名稱爲Csv,它們在功能上是相同的。
明顯的PowerShell的設計者預期Search
命令可作爲普通Get
命令的簡寫,但它並沒有真正流行起來,可能是因爲正常的人喜歡你和我其實有關於爲什麼會有人曾經使用過這些問題一個在另一個之上。
爲什麼「搜索」比「搜索ADAccount」cmdlet的「查找」更合適的動詞? –
答案在你的問題。
查找用於查找對象。但是,當涉及到 - 羣組,計算機,帳戶等。這些被稱爲「資源」。而且我們知道資源總是包含在一個容器內。因爲它們不存在Active Directory中的對象。
由於我們已經定義了「查找」來查找對象,我們需要另一個動詞,因此我們可以在「容器」內搜索「資源」。
下面是搜索adaccount的描述:
搜索-ADAccount 獲取Active Directory用戶,計算機,或服務帳戶。
聽起來好像你在說查找「對象」,而搜索查找「資源」。那是對的嗎?然後,「對象」和「資源」之間有什麼區別? 「對象」是指.NET對象嗎? –
yes,Find查找「Objects」,Search查找「Resources」。 Powershell建立在.NET框架上。在幕後,所有對象都建立在.NET上,但是對象的「類型」在不同情況下可能會有所不同。 示例: PowerShell中的進程是類型爲「System.Diagnostics.Process」的.NET對象 如果您想隨時知道對象的「類型」 。或者調用「getType()」方法。 –
但是'Search-ADAccount' cmdlet不會返回類Microsoft.ActiveDirectory.Management.ADAccount的對象,這與Get-Process' cmdlet返回類System.Diagnostics.Process的對象的方式完全相同。你是說Active Directory帳戶是一個「資源」,但一個進程不是?如果是這樣,有什麼區別? –
TL;博士
Search
和Find
之間的區別是邊界不清PowerShell中的境界。
現有的,微軟發起模塊反映這種混亂,與任意未來無論是Find-*
或Search-*
的cmdlet,但不能都。
要解決這個問題,要求微軟澄清,這可能會導致兩種:
Search
和Find
需要被解釋然後可以指導未來實現之間的有效區分。人類的語言是模糊的,它必然是在使用PowerShell的一致性值得稱道追求的賠率,如Approved Verbs for Windows PowerShell Commands記錄。
令人遺憾的是,該文檔本身包含許多不清楚的術語(在本文寫作),依稀互換使用,如資源,對象,項,目標,和參考。
有點諷刺的是,該文件告誡:
要強制執行的一致性跨越的cmdlet,不使用經批准的動詞的同義詞。
可以說,在英語找到和搜索是同義詞,只有對結果區分它們的確定性程度:搜索是更高的開放性比找到 :你可能搜索沒有結果,但發現意味着一個積極的結果。
當命名cmdlet時,這種區分值得嗎?
按理說不,這反映在現實世界的微軟的實現 - 比如在Active Directory,Exchange和PowerShellGet模塊 - 選擇一個詞來其他排除。
再次,有點諷刺的是,上述文件似乎扭轉之間的人類語言的關係,發現和搜索:
Find
會在一個對象未知,隱含,可選或指定的容器。
Search
創建在容器中的資源的參考。
撇開不確定性圍繞對象與容器(那叫一個參考是在這種情況下),它是這裏的Find
定義,聽起來更開放式的比Search
- 反對人類語言(英語)。
對於這個問題,'Get','Find','Search'和'Select'有什麼區別?爲什麼'Get-Content'而不是'Read-Content'?爲什麼'Get-ChildItem'而不是'Find-ChildItem'或'Search-ChildItem'?這就是爲什麼我不喜歡批准的動詞列表。那麼,當你必須鍵入5-8個字符才能獲得唯一的位時,它使得製表符完成的能力顯着降低。 –
'$(Locate-HumanReadableVerbExplanationFile).FullName | Find-MeaningOf -Verb Search' – notjustme
Locate-HumanReadableVerbExplanationFile:術語'Locate-HumanReadableVerbExplanationFile'不會被識別爲cmdlet,函數,腳本文件或可操作程序的名稱 。 –