Previously, the unscripted deployment would simply call the executable with the argument. I do not want to rewrite my script every month, so my Powershell script should:
- Accept an argument to pass the executable
- Run the executable as a Job
- Monitor the Job, retrying if it takes too long
The problem was getting
$Command = "my.exe /arg x"
into a ScriptBlock. Using this syntax we get:PS A:\> $Command = "my.exe /arg x" PS A:\> Start-Job -ScriptBlock{ $Command } Id Name PSJobTypeName State HasMoreData Location Command -- ---- ------------- ----- ----------- -------- ------- 1 Job1 BackgroundJob Running True localhost $Command
Obviously, our ScriptBlock is not "
$Command
", so we need to turn it into an acceptable form. To do this we create a ScriptBlock, and then call it into the Job without -ScriptBlock
, as follows:PS A:\> $Command = [scriptblock]::create("my.exe /arg x") PS A:\> Start-Job $Command Id Name PSJobTypeName State HasMoreData Location Command -- ---- ------------- ----- ----------- -------- ------- 3 Job3 BackgroundJob Running True localhost my.exe /arg x
As this is a monthly item, I would not hardcode the
$Command
with a static argument, I would instead accept an argument into my Powershell script, and then pass it as so (assigning a value for this example):
PS A:\> $arg = "y" PS A:\> $Command = [scriptblock]::create("my.exe /arg $arg") PS A:\> Start-Job $Command Id Name PSJobTypeName State HasMoreData Location Command -- ---- ------------- ----- ----------- -------- ------- 5 Job5 BackgroundJob Running True localhost my.exe /arg y
No comments:
Post a Comment