• Window 脚本 - Powershell 使用


    一、文件上传

    1. 打包
    $project_dir="C:\Users\howeres\Documents\parent"
    $deploy_dir="Public/system"
    $user_name="root"
    $ip_addr="1.1.1.1"
    $service_name="service"
    
    cd $project_dir
    # Get-Variable project_dir
    # maven 打包
    ## mvn clean install -f .\infrastructure\pom.xml -DskipTests=true
    mvn clean package -f .\pom.xml -DskipTests=true
    mvn clean package -f .\$service_name\pom.xml -DskipTests=true
    
    # 拷贝
    scp .\$service_name\target\$service_name.jar $user_name@$ip_addr:$deploy_dir/socket.jar
    
    echo "success"
    

    二、部署运行 Jar 包

    $deploy_dir="Public/system"
    $user_name="root"
    $ip_addr="1.1.1.1"
    $app_name="app"
    
    # 停止
    $socket_port=8888
    $PROCESS=ssh $user_name@$ip_addr "lsof -i:$socket_port |awk '{if (NR=2) print "'$2'"; else exit}' |awk 'NR==2'"
    if (-not [string]::IsNullOrWhiteSpace($PROCESS)) {
    	echo "Kill the port [ $socket_port ] process [ $PROCESS ]"
    	## ssh $user_name@$ip_addr "echo "$PROCESS
    	ssh $user_name@$ip_addr "kill -9 "$PROCESS
    }
    if ($PROCESS -eq $null) {
    	echo $socket_port" is not exist"
    }
    
    # 运行
    echo $app_name"starting..."
    ssh $user_name@$ip_addr "cd "$deploy_dir";nohup java -jar "$app_name".jar &> "$app_name" &"
    
    echo "end"
    

    三、PowerShell 基础

    • 文件操作
    # 创建文件
    New-Item test -ItemType Directory
    cd .\test
    New-Item test.txt -ItemType File
    Remove-Item test.txt
    Remove-Item test
    # 添加内容
    Add-Content .\test.txt "Hello World"
    # 查看内容
    Get-Content .\test.txt
    # 设置内容
    Set-Content .\test.txt "Welcome to New York"
    # 添加内容
    "Hello World!"| out-file -Append .\test.txt
    # 查看当前执行策略 default: RemoteSigned
    Get-ExecutionPolicy
    
    • 策略说明:
    类型执行权限
    Restricted为脚本不能运行,是默认设置
    Unrestricted为允许所有的脚本运行
    RemoteSigned为只能运行本地创建的本,不能运行从网上下载的脚本,除了有数字签名证书
    Allsigned为只运行有受信任的发布者签名的脚本
    # 设置策略 (管理员)
    Set-ExecutionPolicy Unrestricted
    # 定义变量- $x方式(推荐)/Set-Variable
    $a = 1
    $str = "hello world"
    Set-Variable a 1
    Set-Variable str "helloworld"
    # (查看所有变量) 
    Get-Variable 
    # 查看变量a 
    Get-Variable a 
    # 查看变量str 
    Get-Variable str 
    # 查看变量是以s开头的,不区分大小写 
    Get-Variable s*
    # 清空变量a 
    Clear-Variable a 
    # 清空多个变量,与查看变量一样的操作 
    Clear-Variable str*
    # 删除变量a 
    Remove-Variable a 
    # 删除多个变量,与前面清空、查询是一样的操作 
    Remove-Variable str*
    
    ## 四则运算
    $interget1=1
    $interget2=2 
    # 加、减、乘、除、模 
    $interget3=$interget1(+|-|*|/|% =|+=|-=|*=|/=|%= !|not|and|or)$interget2
    
    ## 字符串操作
    $str="hello" $str1="world"
    # 输出,查看结果 (注意:使用Write-Host时后面的内容需要使用 () 先进行计算,否则运算符会当作字符串处理)
    # Write-Host 用于将自定义输出写入主机. 当需要展示一个特定信息,比如使用其他颜色来吸引人们的注意力的时候,可使用Write-Host命令. 
    # Write-Host和其他 Cmdlets 一样使用管道,但是它不放置任何数据道管道中。反而会直接写到宿主应用程序的界面。正如此,可以使用命令行中的-ForegroundColor和-BackgroundColor参数将前景和背景设置为其他颜色
    Write-Host ($str+$str1)
    # Write-Output 命令会将对象发送给管道, 是PowerShell默认使用的一个Cmdlets,即默认输出方式。因为它不会直接发送到显示界面,所以不允许你指定其他任何的颜色
    # Write-Output命令将String类型的对象Hello World!放入管道中, 管道中只有这个String对象,其会直接到达管道的末端,也就是Out-Default命令, Out-Default 再将对象传递给Out-Host命令, Out-Host命令要求PowerShell的格式化系统格式化该对象, Out-Host将格式化的结果集放在显示界面上
    # Where-Object 会过滤再传递给 Out-Default
    Write-Output "Hello World!", "hello" |Where-Object {$_.length -gt 10}
    # 其他的输出方式:
    Write-Warning
    Write-Verbose
    Write-Debug
    Write-Error
    # 字符串截取 
    $str.Substring(0,5)
    
    • 比较运算符
    比较运算符说明
    -eq等于
    -ceq区分大小写
    -ne不等于
    -gt大于
    -ge大于等于
    -lt小于
    -le小于等于
    -contains包含
    if ($full -eq "-f") {
      # List of additional solutions required for full build
      $solutionPaths += ("../", "../modules/file-management") 
    } else {
      Write-host ""
      Write-host ":::::::::::::: !!! You are in development mode !!! ::::::::::::::" -ForegroundColor red -BackgroundColor  yellow
      Write-host "" 
    }
    
    # 常量
    Set-Variable -Name conpany -Value "电子厂" -Option Constant
    # 尝试改变变量值,其实这里会异常的
    $conpany="电子厂"
    
    ## 自带API的使用
    $date=Get-Date
    # 打印年月日部分
    Write-Host $date.Date
    # 变量增加一天
    Write-Host ($date.AddDays(1))
    
    • PowerShell自带的变量
    名称说明
    $^前一命令行的第一个标记
    $$前一命令行的最后一个标记
    $_表示表示当前循环的迭代变量。
    $?前一命令执行状态,成功(Ture) 或者 失败(False)
    $Args为脚本或者函数指定的参数
    $Error错误发生时,错误对象存储于变量Error 中
    $Foreach引用foreach循环中的枚举器
    $Home用户的主目录
    $Host引用宿主 POWERSHELL 语言的应用程序
    $Input通过管道传递给脚本的对象
    $Switchswitch 语句中的枚举器
    # Build all solutions
    foreach ($solutionPath in $solutionPaths) {    
        $solutionAbsPath = (Join-Path $rootFolder $solutionPath)
        Set-Location $solutionAbsPath
        dotnet build --configuration Release
        # $? 前一命令执行状态,成功(Ture) 或者 失败(False)
        if (-Not $?) {
            Write-Host ("Build failed for the solution: " + $solutionPath)
            Set-Location $rootFolder
            exit $LASTEXITCODE
        }
    }
    
    • 变量
    类型说明
    [int][long][string][char][bool][byte][double][decimal][single]表值类型
    [array]数组对象
    [xml]XML对象
    [hashtable]哈希表对象,类似于一个字典对象
    [int] $inter="1"
    # 改变量值,这会异常 
    $inter="1a" 
    [string] $str="hello world"
    
    • 数组对象
    # 定义数组
    $arr=@(
        "张三",
        "李四",
        "王五"
    )
    # 直接使用下标操作数组
    Write-Host ("第一个姓名:"+$arr[0])
    # 遍历输出
    foreach($name in $arr){
        Write-Host $name
    }
    
  • 相关阅读:
    MySQL报错 table “xxx” doesn‘t exit
    leetcode做题笔记125. 验证回文串
    echarts地图自定义icon图标并在图标内自定义文字
    java临时文件
    数仓学习笔记(2)——业务数据采集
    P1019 [NOIP2000 提高组] 单词接龙——dfs
    状态机-状态规划(309. 买卖股票的最佳时机含冷冻期)
    【21天Python进阶学习挑战赛】[day2]正则表达式大总结
    LeetCode--HOT100题(48)
    关于UIDocumentInteractionController使用问题
  • 原文地址:https://blog.csdn.net/howeres/article/details/127093167