【问题标题】:Powershell Test-Path returns false, but the file existsPowershell Test-Path 返回 false,但文件存在
【发布时间】:2013-08-29 13:28:00
【问题描述】:

我的脚本应该在计算机列表 (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。

有什么想法吗?

【问题讨论】:

  • 该文件的凭据错误?
  • 添加Write-Debug$comp 和循环内的完整路径并启用调试输出:文件中可能不完全符合您的期望。
  • 尝试使用 ` 转义 $
  • 为了安全起见,我会在路径周围使用-LiteralPath 和双引号。如果$comp 是名称而不是IP 地址,请确保它可以被解析。另外,请注意C$ 是一个管理共享,因此您需要$comp 的管理员权限才能访问它。

标签: powershell


【解决方案1】:

这听起来很奇怪,但我只是在另一台机器上运行了我的脚本(没有更改它)并且它按预期工作。 我测试脚本的两台机器的主要区别在于 PowerShell ISE 的版本。

机器 1 ISE 版本:3.0 即使文件存在,Test-Path 也会返回 false

机器 2: ISE 版本:2.0 测试路径工作正常。

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

我知道这没有多大意义……但无论如何,案件已结案。 非常感谢所有提供帮助的人。

【讨论】:

  • 感谢您,我非常困惑为什么我的脚本在 ISE 中失败但在控制台中运行。
【解决方案2】:

使用格式化字符串填写值:

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

【讨论】:

    猜你喜欢
    • 2021-11-30
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 2011-10-19
    • 2016-01-13
    • 1970-01-01
    相关资源
    最近更新 更多