PowerShell的Test-Path返回false,但文件存在。

3
我的脚本应该在计算机列表(txt)中查找文件,如果文件存在则返回true,否则返回false。
问题是,即使文件存在,它仍然返回“False”。
    $computers = Get-Content -Path C:\temp\SvcHosts\PSKILL_SvcHosts_Workstations.txt

foreach ($comp in $computers)
{
    Test-Path \\$comp\c$\Windows\myfolder\myapp.exe
}

当我单独运行Test-Path \\COMPUTERNAME\c$\Windows\myfolder\myapp.exe时,它会如预期地返回true。 但是当我从txt列表中运行时,它会错误地返回false。 你有任何想法吗?

那个文件的凭证错误? - David Brabant
2
在循环内添加一个 $comp 和完整路径的 Write-Debug,并启用调试输出:可能文件中不是您所期望的内容。 - Richard
2
尝试使用反斜杠\转义$ - Richard
3
我会使用-LiteralPath和路径周围的双引号,以便更安全。如果$comp是一个名称而不是IP地址,请确保它可以被解析。另外要注意的是,C$是一个管理共享,因此您需要具有管理员特权才能访问$comp - Ansgar Wiechers
2个回答

2
这听起来很奇怪,但是我在另一台电脑上运行了我的脚本(没有修改),它正常工作了。我测试的两台机器之间最大的区别是PowerShell ISE的版本。
机器1: ISE版本:3.0 即使文件存在,Test-Path也返回false。
机器2: ISE版本:2.0 Test-Path正常工作。
我不确定这些版本之间是否有访问权限或其他方面的差异。我有印象在机器1上返回false是因为脚本无法访问计算机(无论如何我都是以管理员权限运行它)。
我知道这没有太多意义……但无论如何,案子已结了。 非常感谢帮助过我的每个人。

谢谢你,我之前非常困惑为什么我的脚本在ISE中失败,但在控制台中却能正常运行。 - hsimah

0
使用格式化字符串填充值:
$Computers | ForEach-Object { 
    Test-Path ('\\{0}\c$\Windows\myfolder\myapp.exe' -f $_) 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接