Get-ChildItem не может найти один конкретный каталог?

Я пишу сценарий PowerShell, который должен взглянуть на каталог, отсортировать дочерние элементы по имени (пронумерованные имена) и проверить, есть ли внутри конкретный файл. Если есть, то предполагается, что его куда-то скопируют, если нет, то надо посмотреть на следующий. Это мой код на данный момент:

#[...]
$notExist = $true
#$LatestCiClient = [some directory from earlier in the script]
$buildDirectories = Get-ChildItem -Path $LatestCiClient | Sort Name -Descending

while ($notExist) {
    $currentDir = $buildDirectories | Select-Object -First 1
    $assembliesDir = Get-ChildItem -Path $currentDir.FullName -Include Desktop-Assemblies #Breakpoint
    $script:exe = Get-ChildItem -Path $assembliesDir -Include SomeFile.exe | Select -First 1
    if ($Script:exe.Exists) {
        $notExist = $false
    } else {
        if ($buildDirectories.Count -gt 0) {
            $buildDirectories = $buildDirectories | Select -Skip 1
        } else {
            $script:NoneFound = $true
            $script:notExist = $false
        }
    }
}
#[more Powershell that is supposed to copy $script:exe] 

Я получаю пронумерованные каталоги ($buildDirectories), в отладчике вижу весь список.

Я ввожу while block (breakpoint is set at "#Breakpoint"), select the first directory to check ( $ currentDir`, который снова там и исправляю) и ищу папку с названием «Desktop-Assemblies».

Я смотрю на нее, в проводнике, прямо сейчас папка есть, она заполнена, она не скрыта (она только для чтения, но это не имеет значения?), Я ничего не делаю, я не делал несколько раз в сценарии - ничего. $assembliesDir пусто.

Пробовал использовать "Desktop-Assemblies", пробовал Desktop *, пробовал без -Include. Если я использую $currentDir, он говорит

Не удается найти путь [WeirdPath], потому что он не существует

Странный путь - это имя папки моего $currentDir, но остальная часть пути - C: \ Users \ MyUserName.

Если я использую $currentDir.FullName, он находит все каталоги, ВКЛЮЧАЯ тот, который я ищу. Я, наверное, должен добавить, что весь каталог, который ищется, находится на другом компьютере, это сетевой диск.


person Vaethin    schedule 26.07.2018    source источник
comment
Чтобы убедиться, что у нас есть правильные основы, позвольте мне спросить, не похоже ли значение $LatestCiClient на \\othercomputername\path\to\target\directory.   -  person Sid    schedule 26.07.2018
comment
Да, именно так. \\ PCNAME \ superdrops, если быть точным   -  person Vaethin    schedule 26.07.2018
comment
Вы можете это попробовать? Get-ChildItem -Path $LatestCiClient -Recurse -Directory | Where-Object {$_.Name -eq 'Desktop-Assemblies'} при условии, что имя каталога в точности такое, как я ввел в код.   -  person Sid    schedule 26.07.2018
comment
Он находит несколько результатов (из нескольких пронумерованных каталогов).   -  person Vaethin    schedule 26.07.2018
comment
Я только что попробовал $assembliesDir = Get-ChildItem -Path $currentDir -Include 'Desktop-Assemblies' и $assembliesDir = Get-ChildItem -Path $currentDir.FullName -Include 'Desktop-Assemblies' - снова безрезультатно.   -  person Vaethin    schedule 26.07.2018
comment
Что насчет этих двух вариаций. $assembliesDir = Get-ChildItem -Path $currentDir.FullName -Recurse и $assembliesDir = Get-ChildItem -Path $currentDir.FullName   -  person Sid    schedule 26.07.2018
comment
Поскольку вас интересует только сам путь, почему бы вам не использовать _ 1__ 2_)?   -  person Ocaso Protal    schedule 26.07.2018
comment
В итоге я использовал синтаксис |Where-Object{...} вместо синтаксиса -Include в строках, которые не работали. Пока что кажется успешным, большое спасибо за помощь. @RohinSidharth Если вы опубликуете ответ на этот пост, я его приму.   -  person Vaethin    schedule 26.07.2018


Ответы (1)


Вы этим пользовались?

Get-ChildItem -Path $currentDir.FullName | Where-Object {$_.Name -eq 'Desktop-Assemblies'}
person Sid    schedule 26.07.2018
comment
Ага! Guess -Include не предназначен для поиска одного файла. - person Vaethin; 26.07.2018