Я пишу несколько сценариев для своего CI, и я заметил, что я не очень хорошо утверждаю уникальность своих фильтров. Например, один сценарий предполагает, что
$availableZip = $(Get-ChildItem -Path .\ -Filter "*SomeName*.zip" -Recurse).FullName
предоставит уникальную запись, но может не содержать записей или может содержать несколько записей.
Конечно, это может быть обработано в нисходящем направлении с помощью некоторой проверки If-Else, но я хотел бы элегантно нажать PowerShell, чтобы выдать ошибку для меня, с чем-то вроде
$availableZip = $(Get-ChildItem -Path .\ -Filter "*SomeName*.zip" -Recurse | Where -Single).FullName
такой, что Where -Single
выдаст какой-то SetIsEmptyException
или SetContainsMultipleElementsException
, причем все снаряжения PowerShell будут указывать конкретно на эту строку и, возможно, даже включая дублирующиеся элементы.
Где-объект: значение содержит несколько элементов, где разрешен только один,
доступные элементы: firstDirectory \ SomeSoftware.zip, Another-SomeSoftware.zip
в C: \ Users \ geoff \ Code \ Project \ MyScript.ps1: 33 char: 73
+ ... ChildItem -Path. \ -Filter " SomeSoftware .zip" -recurse | Где -Одинокий) .Полное имя
+ ~~~~~~~
+ CategoryInfo: InvalidArgument: (:) [Get-ChildItem], SingletonSetContainsMultipleElementsException
+ FullyQualifiedErrorId: TooManyElements, Microsoft.PowerShell.Commands.WhereObjectCommand
Есть ли для меня встроенный способ сделать это? Могу ли я использовать какой-нибудь трюк PowerShell, или мне следует использовать небольшой модуль с закрытой функцией (и, если да, то какая самая элегантная реализация?)