PowerShell FTP客户端上传下载模块的编写
来源:互联网 发布:阿里云企业邮箱登陆 编辑:程序博客网 时间:2024/06/10 00:38
前一阵子,一直研究用PowerShell脚本编写FTP客户端程序,这样的好处是编写改写程序都方便,省去了每次编译的麻烦。我是在前辈们的基础上改进了一下,网上找的大部分都不能上传下载大于两兆的文件,在费了半天劲的狂改下终于可以上传下载大文件了,其实原理很简单,就是采用了基于缓冲区的流式传送文件方式,但是PowerShell怪异的语法让人着实恶心了一番,乍看起来像PHP,但却真实的运行在.Net框架上,而且所用的类库全是.Net框架里的,真不知道为什么微软在开发它的时候不用C#语法,难道开发它的负责人是写PHP的出身,好了,言归正传。
1.PowerShell第一次使用前的准备工作
1.1 打开powershell方法:
在开始种搜索”power shell”:输入powershell,打开以下路径:C:\Windows\system32\WindowsPowerShell\v1.0
有两个文件:powershell.exe和powershell_ise.exe 随意单击打开一个即可
1.2 解除Powershell中禁止执行脚本:
PS C:\Windows\system32>get-ExecutionPolicy
PS C:\Windows\system32> set-ExecutionPolicy RemoteSigned
Unrestricted:权限最高,可以不受限制执行任何脚本。
Default:为Powershell默认的策略:Restricted,不允许任何脚本执行。
AllSigned:所有脚本都必须经过签名才能在运行。
RemoteSigned:本地脚本无限制,但是对来自网络的脚本必须经过签名。
2.PowerShell FTP客户端上传模块脚本
#上传文件function UploadFile($Username,$Password,$RemoteFile,$LocalFile){ if($RemoteFile -eq $null){ REM "RemoteFile is null" return } if($LocalFile -eq $null){ REM "LocalFile is null" return } $FTPRequest = [System.Net.FtpWebRequest]::Create($RemoteFile) $FTPRequest.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile $FTPRequest.Credentials = new-object System.Net.NetworkCredential($Username, $Password) $FTPRequest.UseBinary = $true $FTPRequest.UsePassive = $true $FTPRequest.KeepAlive = $false $FTPRequest.Timeout = 300000 $FTPRequest.ReadWriteTimeout = 1000000 $FTPRequest.Proxy = $null $File = [IO.File]::OpenRead( (Convert-Path $LocalFile) ) $ResponseStream = $FTPRequest.GetRequestStream() [Byte[]]$Buffer = New-Object Byte[] 1024 $ReadedData = 0 $AllReadedData = 0 $TotalData = (Get-Item $LocalFile).Length Do { $ReadedData = $File.Read($Buffer, 0, $Buffer.Length) $AllReadedData += $ReadedData $ResponseStream.Write($Buffer, 0, $ReadedData); } While($ReadedData -gt 0) $File.Close() $ResponseStream.Close() $ResponseStream.Dispose()}
3.PowerShell FTP客户端下载模块脚本
#下载文件function DownloadFile($Username,$Password,$RemoteFile,$LocalFile){ try { $ErrorActionPreference="Stop"; if($RemoteFile -eq $null){ REM "RemoteFile is null" return } if($LocalFile -eq $null){ REM "LocalFile is null" return } $FTPRequest = [System.Net.FtpWebRequest]::Create($RemoteFile) $FTPRequest.Credentials = New-Object System.Net.NetworkCredential($Username,$Password) $FTPRequest.Method = [System.Net.WebRequestMethods+Ftp]::DownloadFile $FTPRequest.UseBinary = $true $FTPRequest.KeepAlive = $false # 发送一个ftp请求 $FTPResponse = $FTPRequest.GetResponse() # 从服务器响应中获取一个下载流 $ResponseStream = $FTPResponse.GetResponseStream() # 在本地系统上创建一个目标文件和一个下载缓冲区 $LocalFileFile = New-Object IO.FileStream ($LocalFile,[IO.FileMode]::Create) [byte[]]$ReadBuffer = New-Object byte[] 1024 if($ResponseStream -eq $null){ return } #循环执行下载 do { $ReadLength = $ResponseStream.Read($ReadBuffer,0,1024) $LocalFileFile.Write($ReadBuffer,0,$ReadLength) } while ($ReadLength -ne 0) } catch { REM("Exception Msg: $_") }}
基本就完成了,真实可用的模块哦,其实我是参考的外国大牛:Michal Gajda的PowerShell FTP Client Module的程序改的,有兴趣的同学可以看看,
链接是:https://gallery.technet.microsoft.com/scriptcenter/PowerShell-FTP-Client-db6fe0cb
- PowerShell FTP客户端上传下载模块的编写
- 用python的ftplib模块编写ftp客户端程序
- 用python的ftplib模块编写ftp客户端程序
- 一个简单的FTP客户端 实现上传下载
- java实现的FTP上传下载客户端
- java实现的FTP上传下载客户端
- ftplib模块--编写ftp客户端程序
- FTP客户端--实现FTP文件的上传下载功能
- 编写PowerShell脚本模块
- powershell编写脚本模块
- 编写ftp上传下载时需要的jar包
- 编写ftp客户端
- 网络通信客户端模块的编写
- FTP上传下载的断点续传实现
- FTP上传下载的断点续传实现
- FTP上传下载的断点续传实现
- FTP的上传下载工具类
- FTP 编写 2:客户端与服务端的连接
- javaweb中的验证码实现
- Windows Socket五种I/O模型
- history命令小技巧
- TCP/IP数据包的认识
- 第12周项目1 教师兼干部类
- PowerShell FTP客户端上传下载模块的编写
- MFC 知识 总结(1)
- 初识ant
- 彻底解决Android 应用方法数不能超过65K的问题
- 凌阳16位单片机之FIQ中断
- Oracle Linux 6.3安装
- 二分查找
- LeetCode | Remove Element
- freemarker使用