找不到Sitecore PowerShell Remoting变量$ using

时间:2016-12-22 13:44:02

标签: powershell sitecore sitecore8 powershell-remoting

我最近开始使用PowerShell,正在开发一个小脚本,用于使用Sitecore PowerShell Extensions和远程处理安装Sitecore包。

我创建了以下脚本:

$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

我的脚本在PowerShell ISE中正常运行,但在PowerShell命令提示符中,我收到以下错误:

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

显然我无法在命令提示符下访问变量,但在ISE中找不到$using:变量。

我对PowerShell的经验很少,我不知道为什么会这样。

2 个答案:

答案 0 :(得分:1)

托马斯,我怀疑你有一个旧版本的SPE Remoting模块。你能升级到4.3吗?

出于某种原因,在使用Windows PowerShell 5.1和SPE 4.3进行测试时,该模块在Windows PowerShell ISE中的情况略有不同,但对我来说并不适用。

我报告了一个issue来解决我的问题,希望能解决这个问题。

您提供的示例应该正常工作,因为它看起来像来自文档。

更新

问题#772

我终于能够在控制台中重现您缺少变量的问题;我更新了SPE Remoting模块以考虑该情况。

我还解决了SetAttribute在调用Start-ScriptSession作为工作时没有正确使用$using变量的问题。

期待看到4.3.1 +中的修复。

答案 1 :(得分:0)

您可以尝试使用-Arguments参数传递参数:

$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