【运维开发】基于powershell的运维UI工具(一)

前言
这是陪伴我很久的一个工具,2015-2017年,从0到1,看着它长大。
现在回头来看,用ps写运维工具的我就是第一人了。

tab1 文件传送

在这里插入图片描述

连接资讯

格式: ip|域名地址,主机标签,凭据文件名
在这里插入图片描述
ip|域名地址: server地址
主机标签: 根据需要进行定义,后面会对这个栏位进行模糊匹配达到选取主机的目的。
凭据文件名: powershell中可以对windows登录凭据进行加密存储成文件。后期登录时回直接引用该文件。

凭据文件

凭据文件实际是一个对象, 其中用户名为明文存储,密码为加密文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文件上传概述

  1. 需要一个本地文件夹做本地路径,本地路径下的所有文件都会执行文件上传操作
  2. 需要设定目的路径,即为远端的服务器的实际路径的集合。因为对于每类业务主机路径不同,且每台也有差异,以匹配的方式进行处理。
  3. 需要设定目的服务器,对应上文中server.ini 的主机标签。
    假设已有的server集合{ttcd1,ttcd2, tcd_fz, ttcd_uat, iia, iia2}, 此时若选择输入tcd_, 将有tcd_fz, ttcd_uat被匹配
  4. 文件上传原理:
    a. server安装ps, 并且允许连接管理(enable-psremoting,默认端口5985 ,HTTP协议),修改默认端口新增防火墙设定。
    b. 在打开server会话后,使用自定义的send-files():改写copy-files ,获取文件上传的必要参数。先修改原有的文件的后缀并加上时间标记,将本地新文件对原有文件进行覆盖。
    c. 完成后关闭会话。

局部代码:

##建立server组会话
function new-serversessions
{
 [CmdletBinding()]
    [OutputType([int])]
    Param
    (
        [parameter(position=1)][string[]]
        $filter
    )
    $error.clear()
    $filter = $filter.split(",")
    if(Test-Path $home\server.ini){
             $lists =Import-Csv -Path $home"\server.ini"
             foreach($f in $filter){  #filter [i] 匹配server.ini 
                     $list = $lists |where name -Match $f
                     if($list.count -ne 0){ #忽略密码步骤
                    # try{
                       "服务器连接中.."
                       foreach($l in $list){
                            $str = "$home\"+$l.pwd+".pwd"
                            $cre =  import-clixml $str
                             new-pssession -computername $l.ip -credential $cre -Port 7891 -Name $l.type |out-null
                      #  }
                       }
                        #catch [exception]
                       # {"密码文件错误"}
             }
                     else { #指定机器输入密码
                     "请输入 【" + $f+"】密码"
            new-pssession -computername $f -credential administrator -port 7891|out-null
     }
    }
    }
    else{
            New-Item $home"\server.ini"
            notepad $home"\server.ini"
            "会话建立失败"

    } 
 
      $resulttextbox.text =   "连线结束"
      $resulttextbox.lines +=   $error
     $error.clear()
}
#####send-files 片段
   process{
        $s = Get-PSSession
        if($s.count -eq 0){
        "Exception"
        }
        foreach($session in $s){
             foreach($srcc in $src){
                    $filename = ''
                    foreach($destt in $dest){
                        $result = Invoke-Command -Session $session -ScriptBlock{param([string]$destt)Test-Path -path $destt} -ArgumentList ($destt)
                        if($result){
                         if( $srcc -replace '(.*\\)*(.*\..*)','$2' -match '\.')
                           {
                                     $filepath = $destt+($srcc -replace '(.*\\)*(.*\..*)','\$2')
                                     $newfname =$destt+'\'+($srcc -replace '(.*\\)*(.*)','$2')+(get-date).ToString(".yyyyMMdd.HHmmss")
                                      $isnewfile = Invoke-Command -Session $session -ScriptBlock{param([string]$filepath)Test-Path -path $filepath} -ArgumentList ($filepath)
                                      if($isnewfile){
                                    Invoke-Command -Session $session -ScriptBlock{param([string]$filepath,[string]$newfname)copy-item $filepath $newfname -Force} -ArgumentList ($filepath,$newfname)
                                  
                                    }
                            }
                 
                       try{
     
      Copy-Item -path $srcc  -destination  $destt -ToSession $session -Recurse -Force 
      }
      catch [exception]{}
                    
                         $str =   Invoke-Command -Session $session -ScriptBlock{param([string]$filepath)get-item $filepath |select name,lastaccesstime} -ArgumentList ($filepath)
                         
                          $session.computername +":$srcc -> $destt  done" 
                         #  $str|select pscomputername, name, lastaccesstime |Format-Table  #检查文件更新时间
                         
                        }
                   }
         }#foreach session 结束遍历
       }
      
    } 

##### 上传
$sbutton.add_click({
$error.Clear()
    $resulttextbox.text =   "检查文件列表..  "
    $list =   get-item C:\ps_upload\* |select fullname 
    $sendfilepage.Controls.Remove($sbutton)
    $resulttextbox.text =   "执行中...  "
    #传送文件 实时回显结果&提示
     send-files  $list.fullname  $destbox.Text $destserver.Text |out-string -stream |foreach-object{$resulttextbox.lines = $resulttextbox.lines + $_; $powershellforms.update() }
    $resulttextbox.lines= $resulttextbox.lines +  "执行完成~~~~~~~~  ";$powershellforms.Refresh()
     $sendfilepage.Controls.add($sbutton) 
 })


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值