个人主页——开着拖拉机回家_Linux,大数据运维-CSDN博客 ✨
感谢点赞和关注 ,每天进步一点点!加油!
目录
一、Power Shell概述
1.1 Windows Power Shell简介
1.2 PowerShell是什么
1.3 windows执行策略更改
二、PowerShell使用
2.1 文件复制
2.2 文件压缩清理
Windows PowerShell 是微软发布的一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。
引入了许多非常有用的新概念,从而进一步扩展了在 Windows 命令提示符和 Windows Script Host 环境中获得的知识和创建的脚本。
PowerShell,从名字可以知道,他首先是一个shell,shell的意思就是和Linux的bash等一样、和原来的cmd一样就是在里边敲命令(可执行文件)使用;而Power就意味他是一个功能强大的shell,从面向用户而言,个人觉得其功能强大体现在以下几方面:
(1) 微软态度。微软是真正的在推行PowerShell,包括Office等更多自家软件,底层都是调用PowerShell来实现。
(2) 兼容性cmd。PowerShell包含原先cmd的所有命令,原先命令使用形式不变,在是在其基础上添加命令。
(3) 对标Linux。PowerShell使用了Linux Shell的思想,也就是所有的系统操作、配置,都可以在shell中敲写命令实现。
(4) 统一的命令格式和自包含的文档。PowerShell的两个优点:第一点是PowerShell所有命令使用统一的cmdlet命令格式(也就是“动词-名词”的格式,比如get-process)会使人很容易记住;第二点这里所谓自包含是指你要干一件事你可以逐步找到要做的事所需的所有命令,即便你记不得命令你也可以很容易找到,你找到命令看文档就很容易知道怎么使用。
右击开始找到 powershell 管理员
进入powershell命令行执行如下命令: 一定要执行!
执行如下命令,回车选择Y( 复制后鼠标 右击可粘贴,也可将执行的命令放到临时文本中再复制到命令行执行)
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser
执行如下命令,回车选择Y
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope localMachine
执行下面的命令查看 CurrentUser,LocalMachine 是否已改为 Bypass
get-executionpolicy -list
修改后的执行策略检查
检查通过后,关闭powershell 即可。
文件有一个目录拷贝到另一个目录
write-host "copy file data start ..."
# 当前日期
$fileDate=Get-Date -Format 'yyyy-MM-dd'
write-host $fileDate
# 从当天的目录下拷贝文件到目标路径
Copy-Item D:\test\00000\$fileDate\* D:\test\00000\bak
执行结果
PowerShell ISE 提供模块方法查询,可以对ps脚本进行编辑运行和测试
获取文件夹下7天之前的天文件夹目录进行打包压缩,并删除7天之前的文件夹。压缩使用7-zip。
######################################################
# Desc: File Compress 1.0 #
# Author: kangll #
# soft: Use 7-zip #
# Date: 2023-12-13 #
######################################################
############################ 全局变量 ###################
# 设置7-zip命令程序路径
$zip7="D:\test\7-Zip\7z.exe"
# 当天日期
$backup_date=get-date -format "yyyy-MM-dd"
# 获取一周前的日期
$weekAgo=(get-date).adddays(-7)| get-date -format "yyyy-MM-dd"
########################## bak file #######################
# 定位到待压缩的文件夹
$bak_file="D:\test\reid_traj"
# 保存的路径
$bak_save_dir="D:\test\reid_traj"
# 文件夹除当天外的日期文件夹都打包
Get-ChildItem $bak_file | ForEach-Object -Process{
if ($_.CreationTime -lt $backup_date)
{
# 使用7zip将轨迹文件夹目录下文件夹件压缩为zip格式
$dateStr=$_.name
& $zip7 a -tzip $bak_save_dir\$dateStr.zip $bak_file\$dateStr
}
}
# 列出一周前的文件夹删除,除当天外的所有日期均打包完成
Get-ChildItem $bak_file | ForEach-Object -Process{
if ($_.CreationTime -lt $weekAgo)
{
# $_.Fullname ,获取文件夹全路径删除,D:\test\reid_traj\2023-05-11
Remove-Item $_.Fullname -Recurse
}
}
执行完成 按照天路径打包
我们可以看下bat脚本,bat执行sqlServer存储过程。
:: 带"-"的日期
set today=%date:~0,4%-%date:~5,2%-%date:~8,2%
set today2=%date:~0,4%%date:~5,2%%date:~8,2%
:: 数据库连接信息
set execOSQL="osql" -S localhost\ipva -U sa -P 123456 -d test -Q
:: 存储过程, windows环境执行存储过程将文件插入到表中
set "hhh=loadFile 'D:\test\reid_trace\%today%','%today2%'"
:: 存储过程执行
%loadFile.sql%
%execOSQL% "exec %hhh%"
if %errorlevel% == 0 (echo -------------------- Procedure %hhh% executer successfully! --------------------) else (echo Procedure %hhh% executer failed!)
bat 和PS个人使用下来 感谢PS脚本更加强大和简单,BAT看起来就有点臃肿并复杂难懂。