2014-12-31 24 views
6

Mam wymóg kopiowania pliku z lokalnego komputera na zdalny komputer przy użyciu PowerShell. Mogę skopiować plik na komputer zdalny za pomocą następującego polecenia:Polecenie PowerShell do kopiowania pliku na zdalnej maszynie

copy-item -Path d:\Shared\test.txt -Destination \\server1\Shared 

Powyższe polecenie wykorzystuje ścieżkę udziału sieciowego do skopiowania pliku. Nie chcę używać opcji udziału sieciowego, ponieważ folder nie będzie udostępniany na zdalnym komputerze. Próbowałem wykonywać polecenia, ale nie działałem.

copy-item -Path d:\Shared\test.txt -Destination \\server1\c$\Shared 

Invoke-Command -ComputerName \\server -ScriptBlock { 
    copy-item -Path D:\Shared\test.txt -Destination C:\Shared 
} 

Proszę dać mi znać, jak sprawić, aby działało bez użycia ścieżki UNC. Mam pełne uprawnienia do tego folderu na komputerze zdalnym.

+2

Co dokładnie oznacza "nie działa"? Czy otrzymałeś komunikat o błędzie? W ogóle nie skopiowano pliku? Plik został skopiowany do niewłaściwej lokalizacji? Zły plik został skopiowany do prawidłowej lokalizacji? Coś się stało? – vonPryz

+2

Również po uruchomieniu polecenia Invoke ścieżki byłyby relatywne do działającego serwera, więc 'D: \ Shared \ test.txt' musiałby być ścieżką UNC – Matt

+0

Otrzymuję komunikat" Network Path not found ". –

Odpowiedz

4

Musisz mieć udostępniony folder, aby móc skopiować pliki z jednego hosta na inny, albo na zdalnym komputerze, jeśli chcesz pchnąć plik:

Copy-Item -Path D:\folder\test.txt -Destination \\server1\remoteshare\ 

albo na lokalnym komputerze, jeśli chcesz wyciągnąć plik:

Invoke-Command -ComputerName server1 -ScriptBlock { 
    Copy-Item -Path \\localcomputer\localshare\test.txt -Destination C:\Shared\ 
} 

akcji administracyjnym (\\server1\c$) można stosować tylko wtedy, gdy konto ma uprawnienia administratora na danym komputerze.

+0

Mam prawa administratora na zdalnym komputerze i \\ serwerze1 \ c $ nie działa. Uzyskanie błędu "Nie znaleziono ścieżki sieciowej". –

+1

@ParveenKumar Czy Zapora systemu Windows na serwerze1 zezwala na połączenia SMB? Czy możesz 'telnet' do portu 445 na serwerze1? –

3

Jeśli nie jest dostępny akcji, będziesz musiał dokonać zawartość pliku sam argument do skryptu:

Invoke-Command -ComputerName \\server -ScriptBlock { 
    $args[0] | Set-Content C:\Shared\test.txt 
    } -ArgumentList (Get-Content D:\Shared\test.txt -Raw) 
+1

Używanie samego '-Raw' z' Get-Content' jest w porządku dla plików tekstowych. W przypadku plików binarnych użyj '-Encoding Byte -ReadCount 0 -Raw'. Lub użyj [ReadAllBytes/WriteAllBytes] (http://stackoverflow.com/a/17542292/145173). –

5

najszybszym sposobem znalazłem do tego, ponieważ konto wykorzystywane jest Administrator, należy wykonać następujące czynności:

New-PSDrive -Name X -PSProvider FileSystem -Root \\MyRemoteServer\c$\My\Folder\Somewhere\ 
cd X:\ 
cp ~\Desktop\MyFile.txt .\ 
## Important, need to exit out of X:\ for unmouting share 
cd c:\ 
Remove-PSDrive X 

Działa za każdym razem.

+2

Możesz rozważyć użycie opcji "Push-Location' i" Pop-Location' do zmiany z X: \. Pozostawiłoby to niezmodyfikowany katalog bieżący po wykonaniu kodu, dzięki czemu łatwiej jest umieścić go w funkcji lub podobnej. – jpmc26

1
Invoke-Command -ComputerName compname -Credential $cred -ScriptBlock { Get-Content C:\myfolder\result.txt } >>res.txt 

Uwaga C: \ myfolder \ Result.txt jest na komputerze zdalnym

0

Oto skrypt, który pracował dla mnie za małe pliki. Uruchom jako administrator.

#pre 5.0 powershell copy-item to remote computer 
Write-Host "Remote copy a file" 
$servers = @("server01.dot.com", "server02.dot.com") 
foreach($server in $servers) { 
$username = 'USERNAME' 
$password = 'PASSWORD' 
$pw = ConvertTo-SecureString $password -AsPlainText -Force 
$cred = New-Object Management.Automation.PSCredential ($username, $pw) 
$myfile = [System.IO.File]::ReadAllBytes("C:\Temp\srctest.txt") 
$s = New-PSSession -computerName $server -credential $cred 
Enter-PSSession $s 
Invoke-Command -Session $s -ArgumentList $myfile -Scriptblock {[System.IO.File]::WriteAllBytes("C:\Temp\desttest.txt", $args)} 
Write-Host "Completed" 
Remove-PSSession $s 
} 
Powiązane problemy