Powershell. Не работает метод .trim() для строки внутри параметра -Filter коммандлета Get-ADUser
Объясните пожалуйста, почему если я передаю переменную типа String в фильтр командлета допустим Get-ADUser, например:
$string = "username "
Get-ADUser -Filter {SamAccountName -like $string}
То всё нормально отрабатывет.
Однако, если в теле фильтра я применяю к строке метод .trim(), то PowerShell говорит что нет такого метода у строчки и работать отказывается, пример:
$string = "username "
Get-ADUser -Filter {SamAccountName -like $string.trim()}
Я проверил: тип объекта при использовании метода trim() возвращаеnся такой же, как и был у оригинальной строки. Разумеется можно завести промежуточную переменную, которой присвоить строку без пробелов обработанную методом .trim()
Мне интересно почему я не могу применять методы внутри параметров коммандлета. Нужно/можно ли как-то дополнительно экранировать вызов метода при использовании внутри параметров коммандлета?
UPD. Похоже AD-коммадлеты просто так работают, судя по документации: " The Filter parameter translates PowerShell-like expressions to an LDAP filter, but doesn't support just any arbitrary PowerShell statement, only a specific set of comparison operations with attribute names as the left-hand operand and the comparison value on the right hand side. " Поэтому есдинственный выход, готовить строку для фильтра предварительно.
Ответы (1 шт):
Contents about_ActiveDirectory_Filter 2
about_ActiveDirectory_Filter TOPIC Active Directory Filter
SHORT DESCRIPTION Describes the syntax and behavior of the search filter supported by the Active Directory module for Windows PowerShell.
LONG DESCRIPTION Most get-AD* Active Directory module cmdlets use the Filter parameter to search for objects. The Filter parameter has been implemented to replace the function of the LDAP Filter and adds support for Windows PowerShell variables, rich data types, improved error checking and an Active Directory extended form of the Windows PowerShell Expression Language.
For more information about the Windows PowerShell Expression Language syntax, see about_Regular_Expressions.
$string = "username "
#Get-ADUser -Filter {SamAccountName -like $string.trim()}
Get-ADUser -Filter "SamAccountName -like '$($string.trim())'"
в параметр -Filter подается строка синтаксиса какого то "Windows PowerShell Expression Language", похоже её нужно собрать до подачи в параметр.