tl; dr :
Вызовите метод .ToLower()
непосредственно для строковых значений для преобразования в нижний регистр:
# A simpler way to extract the ID
$id = if ((git show) -join "`n" -match '\sid="(.+?)"') { $Matches[1] }
# Note the the .ToLower() call and the enclosure in $(...)
# I've omitted Write-Output here, because it isn't necessary.
# Since the string isn't assigned to a variable or sent elsewhere, it
# is *implicitly* output.
"##vso[task.setvariable variable=BID]$($id.ToLower())"
$()
, оператор подвыражения необходим для встраивания выражений, которые включают доступ к свойству или вызовы методов внутри "..."
( расширяемые строки ).
PowerShell построен на. NET и использует его типы данных (классы), экземплярами которых являются объекты , которые, в частности, имеют свойства и методы .
Эта система с богатыми типами в основе PowerShell - это то, что отличает PowerShell от других оболочек.
Строки, возвращаемые внешней программой, такой как как git
в этом случае, имеют тип [string]
(System.String
), и этот тип имеет метод .ToLower()
для возврата копии в нижнем регистре string .
PS> 'aBC'.ToLower()
abc
Неудивительно, что есть также метод .ToUpper()
.
Если входное значение не является строкой, вы можете преобразовать его в один , вызвав метод ToString()
, который поддерживает любой . NET тип поддержки:
# Get-Item returns a System.IO.DirectoryInfo instance.
# You must convert it to a string first, before you can call ToLower()
PS> (Get-Item $HOME).ToString().ToLower()
C:\users\jdoe
Обратите внимание, что вызов .ToString()
делает , а не дает вам такое же расширенное строковое представление, которое вы видели бы в консоли (терминале) . В последнем используется система форматирования вывода PowerShell, и для ее использования вам необходимо передать в Out-String
командлет :
PS> (Get-Item $HOME | Out-String).ToLower()
directory: c:\users
mode lastwritetime length name
---- ------------- ------ ----
d----- 2/3/2020 10:18 am jdoe
Out-String
возвращает одиночная, многострочная строка по умолчанию; используйте переключатель -Stream
, чтобы он генерировал построчный вывод (который становится строкой массив при сборе).
Если вы хотите проверить тип данных значения переменной / результата команды , канал к командлету
Get-Member
:
PS> Get-Item $HOME | Get-Member
TypeName: System.IO.DirectoryInfo
Name MemberType Definition
---- ---------- ----------
LinkType CodeProperty System.String LinkType{get=GetLinkType;}
Mode CodeProperty System.String Mode{get=Mode;}
...
Строка TypeName:
содержит полный тип. NET имя, за которым следуют подробные сведения о членах типа , в частности о свойствах и методах.
Существует множество вариантов отображения только представляющих интерес членов типа, например -Type Method
, для отображения только методов.