从远程服务器复制文件并使用PowerShell保存在本地计算机上。但是当我在记事本中打开该文件时从远程服务器复制字段后,它没有以正确的格式打开(对齐)。但是,如果我手动使用FTP命令进行复制,则在记事本中对齐是正确的。
请找到我的PowerShell脚本:
$File = "D:\copiedfile.txt"
$ftp = "ftp://remote_machine_name//tmp/text.txt"
$ftprequest = [System.Net.FtpWebRequest]::Create($ftp)
$ftprequest.UseBinary = $true
"ftp url: $ftp"
$webclient = New-Object System.Net.WebClient
$uri = New-Object System.Uri($ftp)
"Downloading $File..."
$webclient.DownloadFile($uri, $File)
使用PowerShell脚本(未正确对齐)复制文件后,请查找附带的屏幕截图。
请在手动使用FTP复制文件后找到附带的屏幕截图(正确对齐)。
由于跨平台而导致此对齐问题。将文件从HP-UX复制到Windows。不确定,如何解决这个问题。
当我手动通过FTP复制文件(命令行)时,其传输模式为ASCII。但我不确定如何在我的powershell脚本中设置ASCII的传输模式。
答案 0 :(得分:1)
Windows记事本仅支持Windows EOL。你的文件很可能是* nix EOL。
您需要使用ascii / text模式,而不是二进制,以便FtpWebRequest
可以将文件转换为Windows EOL。
$ftprequest.UseBinary = $False
虽然请注意,在创建FtpWebRequest
时,您永远不会真正使用它。
完整代码如下:
$url = "ftp://remote_machine_name//tmp/text.txt"
$ftprequest = [System.Net.FtpWebRequest]::Create($url)
$ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::DownloadFile
$ftprequest.UseBinary = $false
$ftpresponse = $ftprequest.GetResponse()
$responsestream = $ftpresponse.GetResponseStream()
$localPath = "D:\copiedfile.txt"
$targetfile = New-Object IO.FileStream($localPath, [IO.FileMode]::Create)
$responsestream.CopyTo($targetfile);
$responsestream.Close()
$targetfile.Close()
(并删除所有WebClient
代码)
Stream.CopyTo
。如果需要使用旧版本的.NET,则需要在循环中复制流内容,如Changing FTP from binary to ascii in PowerShell script using WebClient中所示。
它与命令行ftp
一起正常工作,因为它默认为ascii / text模式。