“找不到路径” Pester测试结果

时间:2018-09-18 21:23:52

标签: powershell testing path scripting pester

我正在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

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

4 个答案:

答案 0 :(得分:2)

$folder是一个对象。强制转换为字符串将为您提供文件夹名称。您可以使用引号来实现。

Mark has identified一样,如果路径中有空格,您还需要引号。

$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

答案 1 :(得分:1)

其中一个路径中有一个空格,因此需要用引号引起来:

tableView()

它必须用双引号引起,以便Get-ChildItem "C:\Users\$folder\AppData\Local\Google\Chrome\User Data\Default\Cache" -Recurse | Remove-Item -Recurse -Force 变量仍能扩展。

答案 2 :(得分:0)

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

QString str_array[2];
str_array[0] =  QString("0x%1").arg(155, 2, 16, QLatin1Char('0'));
str_array[1] =  QString("0x%1").arg(255, 2, 16, QLatin1Char('0'));

printf("%s \n", str_array[0].toLatin1().constData());
printf("%s \n", str_array[1].toLatin1().constData());

答案 3 :(得分:0)

其他答案指出了脚本中的主要缺陷是缺少引号。还有两种方式的冗余。

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

希望这个答案对您有用。