2017-06-21 3 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ではうまく動作しますが、filenameにpathを含める必要があります。 –

+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

関連する問題