2013-08-29 25 views
3

我的脚本应该在计算机列表(txt)中查找文件,如果文件存在则返回true,否则返回false。Powershell Test-Path返回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。

任何想法?

+0

该文件的凭据错误? –

+2

添加'$ comp'的'Write-Debug'和循环内部的完整路径并启用调试输出:可能并不完全符合您期望的文件。 – Richard

+2

尝试使用' – Richard

回答

0

使用格式化字符串来填充值:

$Computers | ForEach-Object { 
    Test-Path ('\\{0}\c$\Windows\myfolder\myapp.exe' -f $_) 
} 
2

这听起来很奇怪,但我只是跑我的脚本(不改变它)在另一台机器和它的工作如预期。 我测试脚本的两台机器之间的主要区别是PowerShell ISE的版本。

机1 ISE版本: ISE版本:2.0测试的路径工作正常,即使该文件存在

机2台3.0 测试的路径返回false。

不确定这些版本是否在访问等方面存在差异。我的印象是它在机器1中返回了错误,因为脚本无法到达计算机(无论如何我都是在管理员权限下运行它的)。

我知道这没什么意义......但无论如何,案件关闭。非常感谢所有帮助过我的人。

+0

谢谢你,我非常困惑,为什么我的脚本在ISE中失败,但在控制台中工作。 – hsimah

相关问题