Windows-Server-2012-R2
如何在使用時在 PowerShell 中復製文件?
我需要從遠端 Windows 2012 伺服器複製日誌文件。我們的應用程序將不斷地寫入日誌文件。我知道如何使用
Copy-Item
Cmdlet 複製遠端文件。但我說錯了cannot access the file, because it is being used by another process
。即使正在使用文件,是否有任何方法可以獲取文件。目前我將RDC放入機器並複制它。我每小時對已經編寫腳本的日誌進行分析,只是這個日誌文件獲取過程是手動的。
正如@Zoredache 和@Matthew Wetmore 建議的那樣,我試過了
Robocopy
。我創建了一個新驅動器,
New-PSDrive
用於映射遠端文件夾並用於Robocopy
在寫入時複製所需的日誌文件:New-PSDrive -Name Logs -Root \\Svr01\d$\data -PSProvider Filesystem -Credentiaal $cred Set-Location Logs: robocopy .\logfiles\ ~\desktop\ service1.log /E
這將
service1.log1
文件從遠端伺服器複製Svr01
到我的本地桌面。感謝@Zoredache 和@Matthew Wetmore
我想使用純 powershell 解決方案,這就是我想出的:
function Copy-Logs { [CmdletBinding()] param( [pscredential]$Credentials, $SourceDir, $SourceComputers ) $SourceComputers ` | ForEach-Object { $hostname = $_; "processing host: " + $hostname | Write-Verbose mkdir $hostname -ErrorAction SilentlyContinue | Out-Null $pssession = New-PSSession -Credential $Credentials -ComputerName $hostname; $fileInfos = Invoke-Command ` -Session $pssession ` -ScriptBlock { Get-ChildItem $args } ` -ArgumentList $SourceDir $fileInfos ` | ForEach-Object { $fileInfo = $_; $destFile = "$($hostname)/$($fileInfo.Name)" "copying file: $($fileInfo.FullName) to $($destFile)" | Write-Verbose Invoke-Command ` -Session $pssession ` -ScriptBlock { Get-Content $args; } ` -ArgumentList $fileInfo.Fullname ` > $destFile } } }
它使用 Get-Content 將文件內容從一台主機流式傳輸到本地電腦