如何在本地机器上使用在远程机器上设置的变量

How to use a variable that was set on a remote machine, on a local machine

我正在编写一个脚本,该脚本从远程计算机上存储的 XML 文档中获取文件夹在远程计算机上的位置。然后我想将该文件夹复制到本地 PC。这是我目前拥有的代码:

Invoke-Command -Session $TargetSession -ScriptBlock {
    if (Test-Path "$env:USERPROFILE\pathto\XML") {
        [xml]$xml = Get-Content $env:USERPROFILE\pathto\XML
        $XMLNode = $xml.node.containing.file.path.src
        foreach ($Log in $XMLNode) {
            $LogsP = Split-Path -Path $Log -Parent
            $LogsL = Split-Path -Path $Log -Leaf
        }
    } else {
        Write-Host "There is no XML file!"
    }
    Copy-Item -Path "$LogsP" -FromSession $TargetSession -Destination "$env:TEMP" -Force -Recurse -Container

$logsP 永远不会在 Invoke-Command 脚本块之外填充。我试过使用 return,我试过将它设置为全局变量,我试过在脚本块中使用 Copy-Item 命令(无论我做什么,它都会给我一个访问被拒绝的错误更改为 Winrm/PSRemoting)。有谁知道我如何在脚本块之外填充 $logsP

不要在脚本块内的变量中收集父路径。只需让它回显到 Success 输出流,并在本地计算机上的变量中收集 Invoke-Command 的输出。

$LogsP = Invoke-Command -Session $TargetSession -ScriptBlock {
    if (Test-Path "$env:USERPROFILE\pathto\XML") {
        [xml]$xml = Get-Content $env:USERPROFILE\pathto\XML
        foreach ($Log in $xml.node.containing.file.path.src) {
            Split-Path -Path $Log -Parent
        }
    }
}

$LogsP | Copy-Item -FromSession $TargetSession -Destination "$env:TEMP" -Force -Recurse -Container