У меня есть объект в PowerShell, возвращенный VSTS, который выглядит следующим образом (! Важно: нет @ {вокруг этих элементов, отредактированных Томалаком):
@{
objectId="ae97aa664f6c0cf803790a1fad78fc43119c6b8a"
gitObjectType="tree"
commitId="696e3462ef20058c4f3183d28568196d30f7e18f"
path="/"
isFolder=True
url="https://xxx.visualstudio.com/_apis/git/repositories/11f25afb-4130-499b-ae49-d3fe24b0fadb/items//?versionType=Branch&versionOptions=None"
},
@{
objectId="e12eb8bd619733492279a8f8c8e0de99378dd299"
gitObjectType="blob"
commitId="696e3462ef20058c4f3183d28568196d30f7e18f"
path="/Hello.ps1"
url="https://xxx.visualstudio.com/_apis/git/repositories/11125afb-4730-119b-ae49-d3fe24b0fadb/items//Hello.ps1?versionType=Branch&versionOptions=None"
},
@{
objectId="a4579b63a5cf68ca6a95937d56f15bac47a4f768"
gitObjectType="blob"
commitId="696e3462ef20058c4f3183d28568196d30f7e18f"
path="/README.md"
url="https://xxx.visualstudio.com/_apis/git/repositories/48f25afb-4730-499b-ae49-d3fe24b0fadb/items//README.md?versionType=Branch&versionOptions=None"
},
@{
objectId="46e9b94f49b5a687c889f451c3a9b315e6044b7c"
gitObjectType="blob"
commitId="696e3462ef20058c4f3183d28568196d30f7e18f"
path="/file.txt"
url="https://xxx.visualstudio.com/_apis/git/repositories/11f25afb-4130-499b-ae49-d3fe24b0fadb/items//file.txt?versionType=Branch&versionOptions=None"
}
Он сохраняется в переменной $xmlDataRepo
.Когда я делаю
$xmlDataRepo | ForEach-Object {
write-host $xmlDataRepo.value.commitId
}
, я получаю (! Важно, эти значения действительно записываются в одну строку в окне PowerShell!):
696e3462ef20058c4f3183d28568196d30f7e18f 696e3462ef20058c4f3183d28568196d30f7e18f 696e3462ef20058c4f3183d28568196d30f7e18f 696e3462ef20058c4f3183d28568196d30f7e18f
, что выглядит хорошо.Но то, что нужно сделать, это найти объект с path=/file.txt
, а затем получить только эти объекты objectId
.
Я пробовал это с этим, но он не работает:
$filename = "file.txt"
ForEach-Object -InputObject $xmlDataRepo.value -Process {
if ($xmlDataRepo.value.path -eq "/$filename") {
$oId = $xmlDataRepo.value.objectId
} else {
$oId = "0000000000000000000000000000000000000000"
}
}
Что здесь не так?
Обновление 1:
Я попробовал следующий код:
$xmlDataRepo | ForEach-Object {
if ($_.value.path -eq "/$filename") {
write-host $_.value.objectId
}
}
Я также попробовал
$obj = ($xmlDataRepo | Where-Object { $_.value.path -eq "/$filename" })
if ($obj) {
$oldId = $_.value.commitId
} else {
$oldId = "0000000000000000000000000000000000000000"
}
Это объект при отладке.Но я всегда получаю 4 значения (!) Вместо одного, где имя файла совпадает с именем файла в моей переменной.
У меня также есть тест Сантьягорешение типа
$objectId = ($xmlDataRepo | Where-Object { $_.value.path -eq "/$filename" }).value.objectId
write-host "---$objectId"
Но это также дает мне четыре элемента вместо одного.