«Путь не может быть найден» Результаты теста Пестера - PullRequest
0 голосов
/ 19 сентября 2018

Я проверяю сценарий на Пестере.Я продолжаю получать путь не может быть найдена ошибка.Видимо что-то не так с некоторыми из моих строк.

$userFolders = Get-ChildItem C:\Users -Directory
foreach($folder in $userFolders)
{
    Get-ChildItem C:\Users\$folder\AppData\Local\Temp -Recurse | Remove-Item -Recurse -Force
    Get-ChildItem C:\Users\$folder\AppData\Local\Google\Chrome\User Data\Default\Cache -Recurse | Remove-Item -Recurse -Force 
}
Get-ChildItem C:\Windows\Temp -Recurse | Remove-Item -Recurse -Force

Кажется, я не могу найти, что не так, но я знаю, что это где-то здесь.Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

0 голосов
/ 05 октября 2018

Другие ответы указывают на главный недостаток в вашем скрипте, который заключается в отсутствии кавычек.Существует также некоторая избыточность двумя способами.

  • Повтор Get-ChildItem <something> | Remove-Item <something>
  • Рекурсия по обе стороны трубы.

Рассмотрим следующее:

function Get-TempFolderItem {
  foreach ($Local in (Get-ChildItem -Path "C:\Users\*\AppData\Local")) {
    'Temp','Google\Chrome\User Data\Default\Cache' |
    ForEach-Object { Get-ChildItem -Path "$Local\$_" -Recurse }
  }
}
Get-TempFolderItem | Remove-Item -Force

Здесь меньше повторений, что упрощает отладку в случае ошибки.И если получение содержимого каталога является исчерпывающим, удаление не должно быть.

Поскольку вы говорите, что это в контексте тестирования, вам, вероятно, следует обратить внимание на насмешки над чем-то вроде удаления файлов.Для временных файлов не имеет большого значения, удаляете ли вы что-то, что вы не собирались делать, но обычно это то, чего вам следует избегать при тестировании.

Вы можете сделать это, написав

 Mock Remove-Item {}

внутри блока Describe.

Надеюсь, этот ответ будет вам полезен.

0 голосов
/ 19 сентября 2018

Вероятно, не у каждой пользовательской папки есть подкаталог 'Google'

C:\Users\$folder\AppData\Local\**Google**\...
0 голосов
/ 19 сентября 2018

$folder это объект.Приведение к строке даст вам имя папки.Вы можете сделать это, используя кавычки.

Поскольку Марк определил , вам также понадобятся кавычки, если в пути есть пробел.

$userFolders = Get-ChildItem C:\Users -Directory

foreach($folder in $userFolders) {

    Write-Host "This is the folder object:"
    $folder

    Write-Host "This is folder object cast to string: $folder"

    Get-ChildItem "C:\Users\$folder\AppData\Local\Temp" -Recurse | Remove-Item -Recurse -Force        
    Get-ChildItem "C:\Users\$folder\AppData\Local\Google\Chrome\User Data\Default\Cache" -Recurse | Remove-Item -Recurse -Force
}

Get-ChildItem C:\Windows\Temp -Recurse | Remove-Item -Recurse -Force
0 голосов
/ 19 сентября 2018

В одном из ваших путей есть пробел, поэтому его необходимо заключить в кавычки:

Get-ChildItem "C:\Users\$folder\AppData\Local\Google\Chrome\User Data\Default\Cache" -Recurse | Remove-Item -Recurse -Force

Это должны быть двойные кавычки, чтобы переменная $folder по-прежнему раскрывалась.

...