• 使用C#+PowerShell进行Windows系统间文件传输


    新的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:localhostClientTrustedHosts -Value 192.160.0.100

    需要引用System.Management.Automation.dll的功能。一般它在系统多个地方出现,我从C:WindowsMicrosoft.NETassemblyGAC_MSILSystem.Management.Automationv4.0_3.0.0.0__31bf3856ad364e35System.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]);
            }
    

      

  • 相关阅读:
    Elastic Beanstalk 环境的 Auto Scaling 组
    Welcome to AWS Greengrass Demo on RaspBerry Pi 4B with OpenVino
    Amazon SQS 延迟队列
    跟踪、记录和监控 API Gateway API
    AWS Lambda 别名简介
    GenerateDataKeyWithoutPlaintext & GenerateDataKey
    高级 AWS Elastic Beanstalk 环境配置 » 使用自定义 Amazon 系统映像 (AMI)
    Write-Through缓存策略 ElastiCache
    十一、函数递归,算法二分法,三元表达式,列表字典生成式,匿名函数,内置函数
    十、装饰器,闭包
  • 原文地址:https://www.cnblogs.com/fyter/p/csharp_powershell_fileupload_between_windows.html
Copyright © 2020-2023  润新知