Преобразовать извлеченный идентификатор в более низкое значение из git в Power Shell - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть входные данные из GIT show:

git show

commit d3135e104c2b508fe58d98596c96b2ae19a Merge: bd82ec4 d36607b Author: Varun C <varun@gmail.com> Date:   Fri Feb 7 18:48:38 2020 +0000

    Merged in test_cicd (pull request #93)

    PIS-504  id="VN.P.1.0.1"

Я извлекаю значение id с помощью команды ниже в powershell

$build=git show
$id = if ($build -match '\s+id="([^"]+)"') { $build -match '\s+id="([^"]+)"'|%{$_.split('"')[1]} }
Write-Output "##vso[task.setvariable variable=BID]$id" 

Я хочу установить BID как docker идентификатор сборки в azure конвейере. но верхний регистр BID не принимается через azure конвейерная сборка.

возможно ли преобразовать это в нижний регистр ie: vn.p.1.0.1

Ответы [ 2 ]

0 голосов
/ 08 февраля 2020

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, для отображения только методов.

0 голосов
/ 08 февраля 2020

Попробуйте это:

$data = (& git show)
$data.split("`n")[2].split("=")[1].ToLower()
...