PowerShell Remoting $Using variable scope

后端 未结 1 743
猫巷女王i
猫巷女王i 2020-12-03 16:08

I have folder c:\\test where I have three files: “file1”, “file2”, “file3”

Following script:

$remoteSession = New-PSSession -ComputerName localhost
$         


        
相关标签:
1条回答
  • 2020-12-03 16:38

    Just specifying $Using:exclude in the Where-Object cmdlet doesn't work because it is in a nested scriptblock.

    In your case , the Using:folder works because it is a local variable directly passed to the Invoke-Command scriptblock.

    But "Using:exclude is passed to a scriptblock for Where-Object, which is itself nested inside the scriptblock for Invoke-Command.

    $Using allows to pass local variables to scriptblocks only one level deep, not to scriptblocks nested any further. This behaviour is not specific to the Where-Object scriptblock, any cmdlet which has a parameter taking a scriptblock behaves like this when it is inside a Invoke-Command scriptblock.

    Unfortunately, I don't think this behaviour is documented.

    By uncommenting $Using:exclude at the beginning of the Invoke-Command scriptblock, you are effectively declaring the variable $exclude inside the remote session. So, in this case, $exclude becomes a local variable inside the Invoke-Command scriptblock and can be passed one level further, to the nested Where-Object scriptblock.

    That's why it works when you uncomment $Using:exclude at the beginning of the Invoke-Command scriptblock, it's a workaround for the behaviour of $Using.

    For the official help information about this run :

    Get-Help about_remote_variables -Full
    
    0 讨论(0)
提交回复
热议问题