2016-08-08 2 views
1

私は尋ねることもできますが、これを数回反復してみましたが、Scriptblockステートメントでスクリプト名をハードコーディングする以外は何も動作していませんでしたが、これは受け入れられません。スクリプトブロックにNONハードコードされたパスとファイル名を指定しますか?

ここで動作するコード、ハードコーディングされ、受け入れられない....

$Scriptblock = { C:\Scripts\Path1\ScriptName.ps1 -arguement0 $args[0] -arguement1 $args[1] } 
Start-Job -ScriptBlock $Scriptblock -ArgumentList $argue0, $argue1 | Out-Null 

アイブ氏はこれを試みたが、それは動作しませんが...

$loc = (Get-Location).Path 
Set-Location -Path $loc 

これは....

$rootpath = $MyInvocation.MyCommand.Path.Substring(0, ($MyInvocation.MyCommand.Path).LastIndexOf("\")) 
Set-Location -Path $rootpath 

そして、この....

$rootpath = $MyInvocation.MyCommand.Path.Substring(0, ($MyInvocation.MyCommand.Path).LastIndexOf("\")) 
$scriptFilename = $([string]::Format("{0}\ScriptName.ps1", $rootpath)) 
$sb = $([string]::Format("{0} -arguement0 $args[0] -arguement1 $args[1]", $scriptFilename)) 
$Scriptblock = { $sb } 
Start-Job -ScriptBlock $Scriptblock -ArgumentList $argue0, $argue1 | Out-Null 

何が他のハードコードされたパスとスクリプト名で上記の最初のコードを除いて働いていない - 私はそれが私が行方不明です愚かな何かをしなければなら知っている - 私はSTOOPIDを修正する手助けお願いします!あなたの最後の例では;-)

+1

正確に達成しようとしているのは何ですか? –

+1

スクリプトブロックの別の引数としてパスを渡して、コール演算子を使用できますか? '$ sb = {param($ path、$ arg1、$ arg2)&$ path -argue0 $ arg1 -argue1 $ arg2}' –

+0

@ MathiasR.Jessenそれらの引数でそのスクリプトを使ってジョブを開始します...しかし、ユーザーはこれらのスクリプトをどのパスにも置くことができるので、ハードコーディングされたパスは必要ありません。 –

答えて

2

、この行:

$ScriptBlock = { $sb } 

は、単に内部の文字列を使用してスクリプトブロックを作成します。それを次のように変更してください:

$ScriptBlock = [scriptblock]::Create($sb) 
+0

それは確かに行くように見えるので、ありがとう!しかし、それは$ args [0]と$ args [1]が好きなように思えます。文字列をtoStringに変換すると、[0]と[1]のように単純に表示されます...エスケープする必要はありますか?どういうふうに扱われますか? –

+2

'[string] :: format()'で二重引用符の代わりに一重引用符を使用してください。 –

+0

素早く簡潔な回答をいただきありがとうございます。あなたがアリゾナにいるなら、私はあなたにビールを買うでしょう! –

関連する問題