• 【powershell】入门和示例


    🛫 导读

    开发环境

    版本号描述
    文章日期2023-11-17
    操作系统Win10 - 22H219045.3570
    PowerShell5.1.19041.3570

    1️⃣ 简介

    PowerShell 是一种命令行 shell脚本语言一体化工具。
    PowerShell 由 Windows 推出,用于帮助自动执行管理任务。 现在,它跨平台运行,可用于各种任务

    PowerShell 的独特之处在于,它接受返回 .NET 对象而非文本。 这个功能让它可以更轻松地在一个管道中连接不同的命令

    用途

    可使用PowerShell完成多种任务,例如:

    • 云管理。 可以使用 PowerShell 管理云资源。 例如,可以检索有关云资源的信息,也可以更新或部署新资源。
    • CI/CD。 它也可以用作持续集成/持续部署管道的一部分。
    • 将 Active Directory 和 Exchange 任务自动化。 使用它,几乎可将所有的 Windows 任务自动化,例如在 Active Directory 中创建用户以及在 Exchange 中创建邮箱。

    IDE

    Windows PowerShell ISE
    ISE(Integrated Scripting Environment)是 Windows PowerShell 的图形化界面,为用户提供了一个方便的脚本编写环境。它允许用户使用各种脚本语言(例如 PowerShell、 batch、VBScript 等)编写和调试脚本,并能够在不同的环境中执行脚本,如命令行、系统托盘和计划任务等。
    Windows PowerShell ISE 提供了许多方便的功能,例如代码提示、语法高亮、断点调试、脚本执行历史记录、脚本加密等。此外,它还集成了许多常用的 PowerShell 命令和函数,方便用户快速使用和编写脚本。
    在这里插入图片描述

    VSCode
    官网给出了VSCode使用的方方面面的使用说明,可见使用VSCode开发应该算是首选,
    有兴趣的可以查看官网资料:https://learn.microsoft.com/zh-cn/powershell/scripting/dev-cross-plat/vscode/using-vscode

    解决此系统上禁止运行脚本

    小编的机器默认不允许执行powershell脚本,会报下面错误:
    在这里插入图片描述

    这个是windows安全策略导致的,直接在Powershell中输入 set-executionpolicy remotesigned,然后输入A回车即可。
    在这里插入图片描述

    2️⃣ 语法

    Powershell的语法中的概念和常见的编程语言很像,包含下面几个方面:

    • 命令行: PowerShell 可以像命令提示符一样使用。在 PowerShell 中,每个命令都以increase service logoncount的形式指定,其中 increase是动词,service是名词,logoncount是特定于该命令的参数。
    • 变量: PowerShell 允许定义变量,并在脚本中使用这些变量。变量以美元符号( )开头,并可以使用点号( . )访问其包含的值。例如, ‘ )开头,并可以使用点号(.)访问其包含的值。例如,` )开头,并可以使用点号(.)访问其包含的值。例如,ComputerName = "localhost"表示定义名为ComputerName的变量,并将值设为localhost`。
    • 运算符: PowerShell 提供了与编程语言相似的运算符,例如数学运算符(+、-、*、/)、比较运算符(-lt、-le、-eq、-ne)和逻辑运算符(&&、||、!)。
    • 流程控制: PowerShell 提供了许多流程控制结构,例如if语句、switch语句和for循环。这些结构使管理员可以将多个命令组合在一起并根据特定条件执行它们。
    • 函数: PowerShell 提供了一种使用脚本定义自己的函数的方法。函数可以接受参数,也可以返回值。它们通常用于封装常见的任务或计算,使脚本更具可读性和可维护性。
    • 模块:模块是包含函数和其他可重用代码的可安装软件包。 PowerShell 提供了许多内置模块,但也允许自定义模块

    ps: 当然,Powershell的使用还是和别的语言有很大的差别的,比如函数的使用就极其别扭,有兴趣的可以参考文章《PowerShell探秘(5-1)函数返回值的问题:https://blog.csdn.net/zooen2011/article/details/16875839

    下面编写一个函数作为例子,供大家参考:

    
    $dirs = "C:\Program Files\MySQL\MySQL Server 8.1\bin\",
    "C:\Program Files\MySQL\MySQL Workbench 8.0\",
    "C:\Program Files\MySQL\MySQL Workbench 8.0 CE\",
    "C:\Program Files\"
    # echo $dirs
    
    function getValidatePath {
    	#固定语法
        [CmdletBinding()]
    	#参数声明
    	param(
            [Parameter()]
            [array] $dirs
        )
    
        $mysql_path = "123"
        Foreach($d in $dirs){
            if (Test-Path "$d") {
                $mysql_path=$d
                break
                # return $mysql_path
            }
        }
        
        Write-Host $mysql_path
        Write-Output $mysql_path
        # $mysql_path 
    }
    $mysql_path2=getValidatePath $dirs
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    3️⃣ 实战

    数据库备份

    遍历可用的目录,找到可用的目录;执行Start-Process备份数据库。

    $dirs =
    "C:\Program Files\MySQL\MySQL Workbench 8.0 CE\",
    "C:\Program Files\MySQL\MySQL Workbench 8.0\",
    "C:\Program Files\MySQL\MySQL Server 8.0\bin\"
    
    # 遍历可用的目录
    Foreach($d in $dirs){
        if (Test-Path $d) {
            $mysql_path = $d
            break
        }
    }
    
    
    echo $mysql_path
    $mysql_exe = $mysql_path+"mysqldump.exe"
    echo $mysql_exe
    
    $processOptions = @{
        FilePath = $mysql_exe
    # --host=localhost --port=3306
    # ,"--single-transaction=TRUE","--routines","--events","--column-statistics=0",
        ArgumentList = "--default-character-set=utf8","--user=root","--password=root","--protocol=tcp","--single-transaction=TRUE","--routines","--events","--column-statistics=0","sw_prod"
    #     RedirectStandardInput = "all.sql"
        RedirectStandardOutput = "all.sql"
        RedirectStandardError = "Error.txt"
        NoNewWindow = $true
    }
    # 启动mysqldump进程,备份数据
    Start-Process @processOptions
    Read-Host -Prompt "Press any key to continue..."
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    执行循环拷贝文件夹

    使用python编写脚本需要python环境,Powershell脚本就方便多了。
    注意事项:

    • xcopy拷贝目录,以\结尾!!!
    • 隐藏命令黑框:-WindowStyle Hidden
    • 比较:-le为小于等于;-lt为小于
    # xcopy拷贝文件夹
    $src = "J:\_ALL\CODE\gitcode\kinghzking\MyOpen\leaflet\d4"
    
    # 从5到15执行
    for($i=5; $i -le 15; $i++)   
    {
        $dst = "J:\_ALL\CODE\gitcode\kinghzking\MyOpen\leaflet\d$i"
        # $cmd = "xcopy /Y $src $dst"
        # 拷贝目录,以\结尾!!!
        $args = " /Y $src\ $dst\"
        Write-Host $args
        Start-Process xcopy.exe -WindowStyle Hidden -ArgumentList $args
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    🛬 文章小结

    庞大的Powershell,有点让人望而却步,小编也只是用到啥查啥,文章只做学习记录。
    这里值得提的大概就是函数的返回值需要特别注意一下。

    📖 参考资料

  • 相关阅读:
    【云原生之kubernetes实战】在k8s环境下部署Lychee照片管理平台
    2022牛客暑期多校训练营7(总结+补题)
    【滤波跟踪】基于粒子群算法优化粒子滤波实现目标滤波跟踪优化问题附matlab代码
    java-php-python-ssm流浪动物救助公益平台计算机毕业设计
    时序数据库介绍及应用场景,C#实例
    机器学习——主成分分析(PCA,未完)
    Java Thread类简介说明
    Linux安装Whisper-Jax
    CocosCreator 面试题(四)JavaScript的异步处理
    竞赛 深度学习 python opencv 火焰检测识别
  • 原文地址:https://blog.csdn.net/kinghzking/article/details/134461010