Kopier fil fra remote server til lokal server via PSSession
HejJeg har brug for at kopierer filer over netværk via PSsession. (Firewall / DMZ/ Osv)
Jeg har et script der kan kopirer fra min lokal server(server1 til remote server (server2), men jeg kan ikke lave script, der vil kopirer fra remote server til min lokale via min session.
Script er som nedestående... :-)
HJÆLP:....
-----------------------------------------------------
winrm s winrm/config/client '@{TrustedHosts="SERVER2"}'
$Source = "D:\test\ok.log"
$Destination = "D:\test\ok.log"
$session = New-PSSession -ComputerName SERVER2
Set-StrictMode -Version Latest
## Get the source file, and then get its content
$sourcePath = (Resolve-Path $source).Path
$sourceBytes = [IO.File]::ReadAllBytes($sourcePath)
$streamChunks = @()
## Now break it into chunks to stream
Write-Progress -Activity "Sending $Source" -Status "Preparing file"
$streamSize = 1MB
for($position = 0; $position -lt $sourceBytes.Length;
$position += $streamSize)
{
$remaining = $sourceBytes.Length - $position
$remaining = [Math]::Min($remaining, $streamSize)
$nextChunk = New-Object byte[] $remaining
[Array]::Copy($sourcebytes, $position, $nextChunk, 0, $remaining)
$streamChunks += ,$nextChunk
}
$remoteScript = {
param($destination, $length)
## Convert the destination path to a full filesytem path (to support
## relative paths)
$Destination = $executionContext.SessionState.`
Path.GetUnresolvedProviderPathFromPSPath($Destination)
## Create a new array to hold the file content
$destBytes = New-Object byte[] $length
$position = 0
## Go through the input, and fill in the new array of file content
foreach($chunk in $input)
{
Write-Progress -Activity "Writing $Destination" `
-Status "Sending file" `
-PercentComplete ($position / $length * 100)
[GC]::Collect()
[Array]::Copy($chunk, 0, $destBytes, $position, $chunk.Length)
$position += $chunk.Length
}
## Write the content to the new file
[IO.File]::WriteAllBytes($destination, $destBytes)
## Show the result
Get-Item $destination
[GC]::Collect()
}
## Stream the chunks into the remote script
$streamChunks | Invoke-Command -Session $session $remoteScript `
-ArgumentList $destination,$sourceBytes.Length
Remove-PSSession -Session $session