executar o seguinte retorna um erro:
$job=Start-ThreadJob -name maya6 -InitializationScript {. $using:profile} -ScriptBlock {ichild} #this is an alias defined in the profile
erro:
InvalidOperation: 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.
ichild: The term 'ichild' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
Eu também tentei:
$job=start-threadJob {. $args ; ichild} -ArgumentList $profile #ichild is an alias defined in my profile
e quando eu uso receive-job $job
ele congela meu prompt e continuo recebendo o seguinte erro:
Oops, something went wrong.
Please report this bug with ALL the details below, including both the 'Environment' and 'Exception' sections.
Please report on GitHub: https://github.com/PowerShell/PSReadLine/issues/new?template=Bug_Report.yaml
Thank you!
### Environment
PSReadLine: 2.3.4
PowerShell: 7.4.6
OS: Microsoft Windows 10.0.26100
BufferWidth: 170
BufferHeight: 21
Last 49 Keys:
Pensei using
que fosse especificamente para esse commandlet...
estou no pwsh7.4
Você está vendo um bug de longa data - veja o problema #4530 do GitHub - que foi relatado inicialmente em 2017, que afeta tanto o Windows PowerShell (a edição legada, fornecida com o Windows, somente para Windows, do PowerShell, cuja versão mais recente é a 5.1) quanto o PowerShell (Core) 7 a partir da v7.5.0; infelizmente, ele recebeu pouca atenção desde então.
Resumindo:
Start-Job
assim como tambémStart-ThreadJob
inesperadamente não suportam$using:
referências em blocos de script passados para o-InitializationScript
parâmetro, diferentemente do que acontece com o parâmetro-ScriptBlock
.Soluções alternativas :
Ou : adicione o código que você pretendia passar
-InitializationScript
ao bloco de script principal passado ao-ScriptBlock
parâmetro, onde$using:
referências são suportadas; aplicado ao seu caso:Ou : Se possível, use a interpolação de strings para "assar" os valores do escopo do chamador em uma string a partir da qual você pode criar um bloco de script; aplicado ao seu caso:
Advertência :
Seu
$PROFILE
arquivo pode agir de forma diferente quando obtido por meio de pontos de uma tarefa de thread (espaço de execução paralelo) ou de uma tarefa em segundo plano (processo filho): por exemplo, o valor do parâmetro automático não$PROFILE
é definido ali. O mesmo se aplica ao recurso exclusivo do PowerShell 7 , que também usa espaços de execução paralelos (threads).-Parallel
ForEach-Object
O
Oops, something went wrong.
erro que você está vendo está relacionado aoPSReadLine
módulo; importá-lo para um runspace paralelo é inútil , pois seu único propósito é enriquecer a experiência de edição interativa por linha de comando.Sem conhecer os detalhes do seu perfil específico, é impossível diagnosticar o problema, mas talvez você possa contorná-lo incluindo qualquer
PSReadLine
código relacionado a - no seu perfil emif (-not $PROFILE) { ... }
, para excluí-lo quando o perfil for originado por pontos de uma tarefa (thread).