In the script block passed to the (implied as the 1st positional) -ScriptBlock parameter of Start-Job, it is possible to reference variables from the _calling_ scope via the $using: scope; e.g.:
# Make the background job's working directory the same as the calling session's and
# print the then-current location.
Start-Job { Set-Location $using:PWD; $PWD } | Receive-Job -Wait -AutoRemove
By contrast, the following - even though I'd expect it to be equivalent - does NOT work, because the $using: reference is in the -InitializationScript script block:
Start-Job -InitializationScript { Set-Location $using:PWD } { $PWD } | Receive-Job -Wait -AutoRemove
Invocation fails with the following error messages:
A Using variable cannot be retrieved. A Using variable can be used only with
Invoke-Command, Start-Job, or InlineScript in the script workflow. When it is used with
Invoke-Command, the Using variable is valid only if the script block is invoked on
a remote computer.
....
Note that the above command would be the cleanest workaround for not having a -WorkingDirectory parameter (see #4287) to set the working directory explicitly.
Both script blocks execute in the _job_'s session, so they should both support $using: variable references.
PowerShell Core v6.0.0-beta.5 on macOS 10.12.6
PowerShell Core v6.0.0-beta.5 on Ubuntu 16.04.3 LTS
PowerShell Core v6.0.0-beta.5 on Microsoft Windows 10 Pro (64-bit; v10.0.15063)
Windows PowerShell v5.1.15063.483 on Microsoft Windows 10 Pro (64-bit; v10.0.15063)
@lzybkr Could you please comment - Is this a bug or an enhancement?
It looks like an oversight, so I'll call it a bug.
Possibly obvious statement: This affects PS 5.1 as well.
Name Value
---- -----
PSVersion 5.1.16299.64
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.16299.64
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
Thanks, @brantb; additionally, in Windows PowerShell it also affects Register-ScheduledJob (which doesn't ship with PowerShell Core, at least as of PowerShell Core 6.2.0-rc.1).
Most helpful comment
It looks like an oversight, so I'll call it a bug.