Sitecore PowerShell Remoting variable not found $using

412 views Asked by At

I recently started working with PowerShell and are working on a small script for installing Sitecore Packages using Sitecore PowerShell Extensions and remoting.

I have created the following script:

$session = New-ScriptSession -Username admin -Password b -ConnectionUri  http://sitecore

$identity = "admin"
$date = [datetime]::Now

$jobId = Invoke-RemoteScript -Session $session -ScriptBlock {
    [Sitecore.Security.Accounts.User]$user = Get-User -Identity $using:identity
    $user.Name
} -AsJob
Wait-RemoteScriptSession -Session $session -Id $jobId -Delay 5 -Verbose

My script is running fine in the PowerShell ISE but in the PowerShell Command Prompt I get the following error:

Get-Variable : Cannot find a variable with the name 'date'. 
At C:\Users\Administrator\Documents\WindowsPowerShell\Modules\SPE\SPE.psm1:21 char:26
+ ...    $value = Get-Variable -Name $Var.SubExpression.VariablePath.UserPa ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : ObjectNotFound: (date:String) [Get-Variable], ItemNotFoundException
+ FullyQualifiedErrorId : VariableNotFound,Microsoft.PowerShell.Commands.GetVariableCommand

Get-Variable : Cannot find a variable with the name 'identity'.
At C:\Users\Administrator\Documents\WindowsPowerShell\Modules\SPE\SPE.psm1:21 char:26
+ ...    $value = Get-Variable -Name $Var.SubExpression.VariablePath.UserPa ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : ObjectNotFound: (identity:String) [Get-Variable], ItemNotFoundException
+ FullyQualifiedErrorId : VariableNotFound,Microsoft.PowerShell.Commands.GetVariableCommand

Apparantly I do not have access to the variables in command prompt but in ISE it cannot find the $using: variables.

I only have little experience with PowerShell and im not sure why this is happening.

2

There are 2 answers

2
Coding101 On BEST ANSWER

Thomas, I suspect you have an old version of the SPE Remoting module. Can you upgrade to 4.3?

For some reason while testing using Windows PowerShell 5.1 and SPE 4.3 the module was not working for me in a slightly different scenario in the Windows PowerShell ISE.

I reported an issue to address my problem which hopefully accounts for yours.

The example you provided should work correctly given it looks like it came from the docs.

Update

Issue #772

I was finally able to reproduce your issue of missing variables in the Console; I've updated the SPE Remoting module to account for that scenario.

I've also fixed an issue where the Start-ScriptSession did not properly use the $using variables when calling Invoke-RemoteScript as a job.

Expect to see the fixes in 4.3.1+.

0
Martin Brandl On

You could try to pass the arguments using the -Arguments parameter:

$session = New-ScriptSession -Username admin -Password b -ConnectionUri  http://sitecore

$identity = "admin"
$date = [datetime]::Now

$jobId = Invoke-RemoteScript -Session $session -ScriptBlock {
    [Sitecore.Security.Accounts.User]$user = Get-User -Identity ($params.identity)
    $user.Name
} -AsJob -Arguments @{identity=$identity}
Wait-RemoteScriptSession -Session $session -Id $jobId -Delay 5 -Verbose