"Path cannot be found" 纠缠测试结果

"Path cannot be found" Pester Test Results

我正在 Pester 上测试脚本。我一直收到找不到路径的错误。 显然我的某些台词有问题。

$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

我似乎找不到问题所在,但我知道它就在这里。 任何帮助将不胜感激。

你的路径之一有一个 space 所以需要用引号引起来:

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

需要加双引号,这样$folder变量还是会展开的

可能不是每个用户文件夹都有 'Google' 子目录

C:\Users$folder\AppData\Local\**Google**\...

$folder 是一个对象。转换为字符串将为您提供文件夹名称。您可以使用引号来做到这一点。

作为 ,如果路径中有 space,您还需要引号。

$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

其他答案指出了您脚本中的主要缺陷,即缺少引号。在两个方面也有一些冗余。

  • 重复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 块内。

希望这个回答对你有用。