2017-11-10 20 views
0

暗号化されたファイルから読み込まれ、ScriptBlockに変換されたコードを実行しています。コードは、完全な複雑なスクリプトであるが、簡単のためのそれは、次のされているとさせます。以下はスクリプトブロック解析の問題

"$(date) Agent started." | Out-File -FilePath 'C:\TMP\test_agent.log' -Append 
while($true) { 
    '$(date) Will check back in 30 seconds...' | Out-File -FilePath 'C:\TMP\test_agent.log' -Append 
    Start-Sleep -Seconds 30 
} 

それを起動する簡単なコードで、それだけで正常に動作します($sStr変数は、上記のようなスクリプトが含まれています文字列):

$job = Start-Job -ScriptBlock { 
    $sb = $executioncontext.invokecommand.NewScriptBlock($args[0]) 
    Invoke-Command -ScriptBlock $sb 
} -ArgumentList $sStr | Wait-Job -Timeout 1 | Receive-Job 

また、これは正常です。しかし、私はこれを新しいPowerShellプロセスとして実行する必要があります。しかし、私が以下を試してみると、ScriptBlockは正しく解析されず、エラーが発生します。ここでは修正さランチャーは次のとおりです。

$job = Start-Job -ScriptBlock { 
    $sb = $executioncontext.invokecommand.NewScriptBlock($args[0]) 
    powershell "Invoke-Command -ScriptBlock $sb" 
} -ArgumentList $sStr | Wait-Job -Timeout 1 | Receive-Job 

のScriptBlockが正しく解析され、実行されるように、新しいPowerShellプロセスを開始する(と親を殺す)する方法? ありがとう!

+0

質問を編集して、受け取ったエラーのテキストを含めてください。役に立つアドバイスが必要な場合は、これが必要です。 –

+0

[ツアー]を取って[お問い合わせ]ページを読むこともお勧めです。 – robinCTS

答えて

0

多分、Start-Jobで作成できるPowerShellバックグラウンドジョブで問題を解決できました。 Start-Job-ScriptBlockパラメータを持ちます。 Example 7Get-Jobは、ジョブがすでに完了しているかどうかを確認する方法と、ジョブの結果を取得する方法を示しています。

希望に役立ちます。

+0

ありがとうございます。シンプルになった'Start-Job -ScriptBlock $ sb'は問題なく実行されます。 PowerShellのパラメータとして使用されたときに、なぜスクリプトブロックが別々に解析されているのかまだ分かりませんが。 –