我最近开始使用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的经验很少,我不知道为什么会这样。
答案 0 :(得分:1)
出于某种原因,在使用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