使用C#+PowerShell进行Windows系统间文件传输
2016-09-13 23:45
525 查看
新的winserver2016支持了一种nano模式,像以前的core模式,只能远程管理,只支持x64,只有610M,不让CentOS mini版独美。
这个nano版,默认只开启WinRM,所以只能PowerShell,安装后F11重置密码即可使用。
Windows Server 2008以后有Core安装模式(安装后磁盘占用2G+),设置密码后,sconfig,配置远程管理,开启powershell与服务器管理器远程管理。
下面是.net的程序方式像远程传输文件。
前提是,本地与远程的PowerShell可以连接。一般Windows默认是不开启PowerShell的,两边都要运行Enable-PSRemoting(管理员),并且把目标服务器添加到信任主机中:
示例:Set-Item WSMan:\localhost\Client\TrustedHosts -Value 192.160.0.100
需要引用System.Management.Automation.dll的功能。一般它在系统多个地方出现,我从C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0__31bf3856ad364e35\System.Management.Automation.dll
引用。
这个nano版,默认只开启WinRM,所以只能PowerShell,安装后F11重置密码即可使用。
Windows Server 2008以后有Core安装模式(安装后磁盘占用2G+),设置密码后,sconfig,配置远程管理,开启powershell与服务器管理器远程管理。
下面是.net的程序方式像远程传输文件。
前提是,本地与远程的PowerShell可以连接。一般Windows默认是不开启PowerShell的,两边都要运行Enable-PSRemoting(管理员),并且把目标服务器添加到信任主机中:
示例:Set-Item WSMan:\localhost\Client\TrustedHosts -Value 192.160.0.100
需要引用System.Management.Automation.dll的功能。一般它在系统多个地方出现,我从C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0__31bf3856ad364e35\System.Management.Automation.dll
引用。
static void Main(string[] args) { // 创建ps对象 var ps = PowerShell.Create(); ps.AddCommand("New-PSSession");// 得到一个新会话对象 ps.AddArgument("192.168.0.100");// 目标服务器地址 var ss = new System.Security.SecureString(); string pwd = "123123";// 管理员密码 foreach (var ch in pwd) ss.AppendChar(ch);// 依次把char塞入安全字符串 PSCredential cred = new PSCredential("administrator", ss);// 用安全字符串构造一个凭证 ps.AddParameter("Credential", cred);// 凭证参数 PSSession session = null; var ret = ps.Invoke();// 执行New-PSSession if (ps.Streams.Error.Count > 0)// 有错误 { Console.WriteLine(ps.Streams.Error[0]); return; } else session = ret[0].BaseObject as PSSession; ps.Commands.Clear();// 清理命令,重用PS对象 ps.AddCommand("cp");// Copy-Item ps.AddArgument("C:\\Users\\Fyter\\文档\\测试用文件.txt");// 本地文件 ps.AddParameter("Destination", "c:\\");// 会话所连接的目标计算机硬盘位置 ps.AddParameter("ToSession", session);// 目标会话 var result = ps.Invoke();// 执行 if(ps.Streams.Error.Count > 0) Console.WriteLine(ps.Streams.Error[0]); }
相关文章推荐
- 使用C#进行点对点通讯和文件传输(通讯基类部分)
- 使用C#进行点对点通讯和文件传输(通讯基类部分)
- 用C#开发Windows服务监控系统使用
- 使用C#进行点对点通讯和文件传输(通讯基类部分)
- 用C#开发Windows服务监控系统使用
- 使用C#进行点对点通讯和文件传输(发送接收部分)
- [转]使用C#进行点对点通讯和文件传输(发送接收部分)
- 使用C#进行点对点通讯和文件传输(发送接收部分)
- 用C#开发Windows服务监控系统使用
- 使用C#进行点对点通讯和文件传输(通讯基类部分)
- 使用C#进行点对点通讯和文件传输(发送接收部分)
- 使用C#进行点对点通讯和文件传输(通讯基类部分)
- C#中如何取得并使用Windows系统图标
- 使用C#进行点对点通讯和文件传输(通讯基类部分)(转)
- 用C#开发Windows服务监控系统使用
- 使用C#进行点对点通讯和文件传输
- 使用C#进行点对点通讯和文件传输(发送接收部分)
- 使用C#进行点对点通讯和文件传输(通讯基类部分)
- 用C#开发Windows服务监控系统使用
- 使用C#进行点对点通讯和文件传输(通讯基类部分) (From 阿赖的个性空间)