Что такое глагол "Поиск" для PowerShell?

Страница MSDN "Утвержденные глаголы для команд Windows PowerShell" говорит:

Глагол Найти используется для поиска объекта. Глагол Поиск используется для создания ссылки на ресурс в контейнере.

Что означает "создать ссылку на ресурс в контейнере"? Это означает определение нового имени для существующего ресурса? Означает ли это получение некоторой информации о ресурсе и преобразование этой информации в ссылку? Или это значит что-то еще?

Какой пример использования глагола "Поиск"? И что это действие связано с поиском?

Ответ 1

ТЛ; др

  • Различие между Search и Find плохо определено в сфере PowerShell.

  • Существующие модули, созданные Microsoft, отражают эту путаницу, произвольно поступая с командлетами Find-* или Search-*, но не с обоими.

  • Чтобы решить эту проблему, попросите у Microsoft разъяснения, которые могут привести к одному из следующих вариантов:

    • полезное различие между Search и Find, которое необходимо объяснить и которое затем может служить ориентиром для будущих реализаций.
    • или объявив один глагол (унаследованным) синонимом другого, и сделав рекомендацию использовать только один глагол в будущем.

Человеческий язык неоднозначен, что неизменно расходится с похвальным стремлением PowerShell к обеспечению согласованности, как описано в Одобренных глаголах для команд Windows PowerShell.

К сожалению, сам этот документ содержит много плохо определенных терминов (на момент написания), которые используются неопределенно взаимозаменяемо, таких как ресурс, объект, элемент, цель и ссылка.

Как ни странно, документ убеждает:

Для обеспечения согласованности командлетов не используйте синоним утвержденного глагола.

Можно утверждать, что на английском языке поиск и поиск синонимов ARE возможны только при определенной степени уверенности в том, что результат различает их: поиск более открытый, чем поиск: вы можете искать без результата, но находить подразумевает положительный результат.

Стоит ли делать это различие, когда дело доходит до именования командлетов?

Возможно, это не, что отражается в реальных реализациях Microsoft, таких как модули Active Directory, Exchange и PowerShellGet, - выбирая один термин, исключая другой.

Опять же, по иронии судьбы, указанный документ, похоже, меняет отношения между людьми и поиском на язык:

  • Find

    Ищет объект в контейнере, который является неизвестным, подразумеваемым, необязательным или заданным.

  • Search

    Создает ссылку на ресурс в контейнере.

Оставляя в стороне неоднозначность вокруг объекта и контейнера (и какова ссылка в этом контексте), это определение Find здесь звучит более открыто, чем Search - в противоположность человеческому языку (английскому).


felixfbecker отмечает следующее в отношении существительной части командлетов Search-* и Find-*:

Я думаю, что другое отличие состоит в том, что существительное в Search-Noun описывает то, что ищется, в то время как существительное в Find-Noun описывает то, что ищется. Поэтому, например, командлет Search-Wikipedia имеет смысл, а Find-Wikipedia - нет. Find-WikipediaArticle и Search-Wikipedia-Article, с другой стороны, оба имеют смысл, но означают разные вещи.

Ответ 2

Единственным примером Search-, о котором я знаю, является Search-ADAccount, и это действительно не делает нам никаких преимуществ в плане того, чтобы сделать это менее двусмысленным. Он возвращает тот же тип объекта, что и Get-ADUser/Get-ADComputer/Get-ADObject, и имеет критерии поиска, которые недоступны в командлетах Get-, даже если они поддерживают фильтрацию и "поиск".

Ответ 3

Вообще говоря, команды Get используются для извлечения информации для дальнейшей обработки, если используются команды Search, чтобы упростить сортировку неизвестных.

Если бы я писал script, я бы предпочел использовать команду Get-AdUser для получения информации, однако, если бы я не был уверен в конкретных параметрах или возможности передавать и сортировать по свойству, я могу легче найти другой командный файл с общими переменными, заполненными табуляцией.

Get-ADUser -Filter * -Properties LastLogonDate | ? {$_.LastLogonDate -lt (Get-Date).AddMonths(-3)}

- довольно длинная команда, чтобы получить людей, которые не вошли в систему в течение 3 месяцев, однако..

Search-ADAccount -AccountInactive

выполняет аналогичную работу с гораздо меньшим количеством входных данных, и если я просто пишу имена на Csv, они функционально идентичны.

очевидно, что разработчики powershell ожидали, что команды Search будут использоваться в виде сокращенных версий общих команд Get, однако на самом деле это не сильно улавливается, возможно, потому, что нормальные люди, такие как вы и я, на самом деле имеют эти вопросы относительно того, почему кто-то когда-либо использовали один над другим.

Ответ 4

Ответ на ваш вопрос.

Найти используется для поиска объектов. Однако, когда дело доходит до таких вещей, как - Группы, компьютеры, учетная запись. Они называются "ресурсами". И мы знаем, что ресурсы всегда содержатся внутри контейнера. Поскольку они не существуют как объекты в Active Directory.

Поскольку мы уже определили "Найти" для поиска объекта, нам нужен еще один глагол, поэтому мы можем "искать" для "ресурсов" внутри "контейнера".

Ниже приведено описание search-adaccount:

Поиск-ADAccount Получает учетные записи пользователей, компьютеров или служб Active Directory.