▒ 目录 ▒
- 🛫 导读
- 开发环境
- 1️⃣ 简介
- 用途
- IDE
- 解决此系统上禁止运行脚本
- 2️⃣ 语法
- 3️⃣ 实战
- 数据库备份
- 执行循环拷贝文件夹
- 🛬 文章小结
- 📖 参考资料
🛫 导读
开发环境
版本号 | 描述 | |
---|---|---|
文章日期 | 2023-11-17 | |
操作系统 | Win10 - 22H2 | 19045.3570 |
PowerShell | 5.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 $dirsfunction getValidatePath {#固定语法[CmdletBinding()]#参数声明param([Parameter()][array] $dirs)$mysql_path = "123"Foreach($d in $dirs){if (Test-Path "$d") {$mysql_path=$dbreak# return $mysql_path}}Write-Host $mysql_pathWrite-Output $mysql_path# $mysql_path
}
$mysql_path2=getValidatePath $dirs
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 = $dbreak}
}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..."
执行循环拷贝文件夹
使用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 $argsStart-Process xcopy.exe -WindowStyle Hidden -ArgumentList $args
}
🛬 文章小结
庞大的Powershell,有点让人望而却步,小编也只是用到啥查啥,文章只做学习记录。
这里值得提的大概就是函数的返回值需要特别注意一下。
📖 参考资料
- powershell官网文档: https://learn.microsoft.com/zh-cn/powershell/
- PowerShell探秘(5-1)函数返回值的问题:https://blog.csdn.net/zooen2011/article/details/16875839