Репликация файла на удаленный сервер. Проблема при объединении пути копирования локального и удаленного сервера в PowerShell. - PullRequest
2 голосов
/ 07 февраля 2020

enter code here Возникла проблема при репликации файлов на удаленный сервер, сбой пути каким-либо образом. Ниже приведен код:

Invoke-Command -ComputerName $RemoteServer -ScriptBlock {param($DestinationDir,$LocalCertResultObj,$RemoteCertResultObj,$SourceDir) Compare-Object $LocalCertResultObj $RemoteCertResultObj  -Property Name, Length, FullName   | Where-Object {$_.SideIndicator -eq "<="} | ForEach-Object {
        {$DestinationDir = Join-Path $DestinationDir $_.FullName.Substring($SourceDir.length)}
        Write-Output $DestinationDir
        Write-Output $SourceDir
      Copy-Item -Path "$SourceDir\$($_.name)" -Destination "$DestinationDir" -Recurse -Force
}   } -ArgumentList $DestinationDir,$LocalCertResultObj,$RemoteCertResultObj,$SourceDir -Credential $RemoteMachine_cred

Получение ошибки, как показано ниже:

$DestinationDir = Join-Path $DestinationDir $_.FullName.Substring($SourceDir.length)
C:\TestFolderR
C:\TestFolder
Cannot find path 'C:\TestFolder\file1.txt' because it does not exist.
    + CategoryInfo          : ObjectNotFound: (C:\TestFolder\file1.txt:String) [Copy-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.CopyItemCommand

1 Ответ

0 голосов
/ 07 февраля 2020

Присоединение к пути выглядит нормально. Ошибка Copy-Item совершенно ясна, что она не может найти C:\TestFolder\file1.txt. Поскольку вы, вероятно, пытаетесь скопировать этот файл на удаленный сервер, ваш ScriptBlock, используемый с Invoke-Command, будет запускать весь этот ScriptBlock в удаленной системе. Он не сможет скопировать этот файл через сеанс PowerShell, потому что не знает о вашей локальной файловой системе - по крайней мере, не используя Invoke-Command.

Вы можете установить sh a New-PSSession в удаленную систему и используйте это с Copy-Item непосредственно из локального сеанса в удаленную файловую систему:

$Session = New-PSSession -ComputerName server.domain.tld -Credential $RemoteMachine_Cred
Copy-Item -ToSession $Session -Path $localPath-Destination $remotePath

Вы даже можете скопировать элемент из удаленной файловой системы обратно к вашей локальной системе тоже. Используя тот же $Session, который мы установили выше:

Copy-Item -FromSession $Session -Path $remotePath -Destination $localPath
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...