2017-06-21 55 views
0

不工作我有一个测试,如果文件的脚本块中存在以下PowerShell代码:PowerShell中测试的路径在脚本块

$scriptblock = 
{ 
    Param($filename) 

    return "Scriptblock filename $filename Exists? -> $(Test-Path $filename)" 
} 

$myFilename = "MyFile.xml" 
Write-Host "Main filename $myFilename Exists? -> $(Test-Path $myFilename)" 

$job = Start-Job -Name "myJob" -ScriptBlock $scriptBlock -ArgumentList $myFilename 
$result = Receive-Job -Name "myJob" 
Write-Host $result 

当我运行它,我得到以下输出指示文件存在于主执行但不在脚本块中。

Main filename MyFile.xml Exists? -> True 
Scriptblock filename MyFile.xml Exists? -> False 

有人可以指出需要什么来测试脚本块中的文件存在吗?

谢谢!

+1

您需要测试当前位置('$ pwd')。 – PetSerAl

+1

这对PowerShell 5适合我。但您需要包含带有文件名的路径。 –

+2

如果您在脚本中检查$ pwd并且还检查脚本块,则会发现它们返回不同的路径。 –

回答

3

作为一种最佳实践,您应该包括要测试的文件的完整路径,而不是依赖当前目录(如果在不同的用户环境下运行脚本,则可能会有所不同)。

$scriptblock = { 
    param($filename) 

    "Scriptblock filename $filename Exists? -> $(Test-Path $filename)" 
} 

$myFilename = "C:\Temp\MyFile.xml" 
"Main filename $myFilename Exists? -> $(Test-Path $myFilename)" 

Start-Job -Name "myJob" -ScriptBlock $scriptBlock -ArgumentList $myFilename 
Receive-Job -Name "myJob" 
+0

谢谢!那就是诀窍! – Dili

相关问题