Я пишу сценарий 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
, он находит все каталоги, ВКЛЮЧАЯ тот, который я ищу. Я, наверное, должен добавить, что весь каталог, который ищется, находится на другом компьютере, это сетевой диск.
$LatestCiClient
на\\othercomputername\path\to\target\directory
. - person Sid   schedule 26.07.2018Get-ChildItem -Path $LatestCiClient -Recurse -Directory | Where-Object {$_.Name -eq 'Desktop-Assemblies'}
при условии, что имя каталога в точности такое, как я ввел в код. - person Sid   schedule 26.07.2018$assembliesDir = Get-ChildItem -Path $currentDir -Include 'Desktop-Assemblies'
и$assembliesDir = Get-ChildItem -Path $currentDir.FullName -Include 'Desktop-Assemblies'
- снова безрезультатно. - person Vaethin   schedule 26.07.2018$assembliesDir = Get-ChildItem -Path $currentDir.FullName -Recurse
и$assembliesDir = Get-ChildItem -Path $currentDir.FullName
- person Sid   schedule 26.07.2018|Where-Object{...}
вместо синтаксиса-Include
в строках, которые не работали. Пока что кажется успешным, большое спасибо за помощь. @RohinSidharth Если вы опубликуете ответ на этот пост, я его приму. - person Vaethin   schedule 26.07.2018