Босс изменил серверы TFS и добавил пробел в path: D:\TFS Agent\xxx
, что привело к сбою моего сценария PowerShell после выпуска.
У нас есть автоматическая интеграция сборки / выпуска с TFS
, и у меня есть встроенная задача PowerShell для чтения файла и преобразования его в JSON
, а затем выполнения некоторых SQL
. У меня это работало до сегодняшнего утра.
Проблема в том, что путь агента - это системная переменная в TFS: $(System.DefaultWorkingDirectory)
, и я не уверен, как обрабатывать пространство в пути.
Я пробовал это:
# Begin inline script
Param(
[string]$path,
[string]$db,
[string]$schema,
[string]$envName
)
# Create module
$formattedPath = $path -replace " ", "` ";
$conv = Get-Content -Raw -Path "$formattedPath" | ConvertFrom-Json;
Но все, что я получаю, это D: \ TFS. До замены путь выглядит так:
D:\TFS Agent\_work\r3\a\xxx
Я хоть убей не могу понять, как заменить пробел галочкой или как игнорировать пробелы. Я новичок в PowerShell, так что это может быть простая вещь, но мой гугл-фу сегодня не силен. Любая помощь будет оценена по достоинству. Спасибо!
Get-Content -Path $path -Raw
- person Maximilian Burszley   schedule 15.08.2018$conv = Get-Content -Raw -Path $path | ConvertFrom-Json;
, но получаю ту же ошибку:Cannot find path 'D:\TFS' because it does not exist.
Кроме того, теперь в фактическом пути есть пробел, которого раньше не было. - person dh6984   schedule 15.08.2018$path
встроенные кавычки"
? - person Maximilian Burszley   schedule 15.08.2018-path $(System.DefaultWorkingDirectory)
в пути, переданном от меня, нет кавычек, но я не уверен в переменной. - person dh6984   schedule 15.08.2018$Env:DefaultWorkingDirectory
- person Maximilian Burszley   schedule 15.08.2018D:\TFS Agent\_work\r3\a\xxx
Какие у вас есть доказательства этого? Ваша-replace
операция фактически бесполезна. Он заменяет пространство пространством. Если вы получаете толькоD:\TFS
в результате, это означает, что у вас есть только это с самого начала. - person user4003407   schedule 15.08.20182018-08-15T14:59:16.3135448Z ##[debug]Write-Output $path' 2018-08-15T14:59:16.3165515Z ##[debug]Env:INPUT_SCRIPTARGUMENTS: '-path D:\TFS Agent\_work\r3\a' 2018-08-15T14:59:16.3465484Z ##[command]& 'D:\TFS Agent\_work\_temp\tmp14B7.ps1' -path D:\TFS Agent\_work\r3\a 2018-08-15T14:59:16.3605498Z D:\TFS
Но я написал вывод, и он был усечен. - person dh6984   schedule 15.08.2018-path D:\TFS Agent\_work\r3\a
Как вы думаете, почему это передастD:\TFS Agent\_work\r3\a
в параметр-path
, но неD:\TFS
будет передано в-path
параметр, аAgent\_work\r3\a
будет передано как позиционный аргумент? В конце концов, пробел - это разделитель аргументов. Кроме того, если вы думаете, чтоWrite-Output $path
обрезает отображаемый вывод, то почему бы не напечатать что-нибудь еще, например$path.Length
? - person user4003407   schedule 15.08.2018" "
- это пробел, а вы заменяете его вторым"` "
, который является escape-последовательностью PowerShell, и только специальные символы имеют какое-либо значение с escape-обратным знаком -"`n"
, например, как новая строка. Другие символы, такие как пробел, не заменяются обратной кавычкой и заканчиваются тем же самым. Итак, вы заменяете пробел пробелом, который ничего не меняет. - person TessellatingHeckler   schedule 15.08.2018