Powershell实现自动备份Bitlocker到指定路径
文章目录
1.日志记录函数
function Write-Log {
param (
[string]$message
)
$logFile = "C:\temp\BitLockerKeyLog.txt"
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$logMessage = "$timestamp - $message"
Add-Content -Path $logFile -Value $logMessage
}
目的: 定义一个 Write-Log
函数,用于将信息写入日志文件。参数: $message
是要记录的日志信息。操作:
将当前时间和日期格式化。
将时间戳和日志信息合并成一条日志消息。
将日志消息追加到 C:\temp\BitLockerKeyLog.txt
文件中。
2.检查管理员权限
If (-Not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
Write-Log "脚本未以管理员权限运行,重新以管理员身份启动。"
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Exit
}
目的: 检查脚本是否以管理员权限运行。操作:
如果当前用户不是管理员,则记录日志并重新以管理员身份启动脚本。
使用 Start-Process
命令以管理员身份运行当前脚本,并退出当前进程。
3. 获取主机名
$Hostname = hostname
Write-Log "获取主机名:$Hostname"
目的: 获取当前计算机的主机名。操作:
使用 hostname
命令获取主机名。
记录获取到的主机名。
4. 获取BitLocker恢复密钥
try {
$RecoveryKey = (Get-BitLockerVolume -MountPoint C).KeyProtector.recoverypassword
Write-Log "成功获取BitLocker恢复密钥。"
} catch {
Write-Log "无法获取BitLocker恢复密钥:$_"
Exit
}
目的: 获取C盘的BitLocker恢复密钥。操作:
使用 Get-BitLockerVolume
cmdlet 获取C盘的恢复密钥。
如果成功,记录日志。
如果失败,记录错误信息并退出脚本。
5. 检查并创建目标文件夹
$DestinationFolder = "C:\BitLocker Key"
If (-Not (Test-Path -Path $DestinationFolder)) {
try {
New-Item -ItemType Directory -Path $DestinationFolder
Write-Log "目标文件夹不存在,已创建:$DestinationFolder"
} catch {
Write-Log "无法创建目标文件夹:$DestinationFolder,错误信息:$_"
Exit
}
}
目的: 确保目标文件夹存在。
操作:
检查目标路径是否存在。
如果不存在,则尝试创建该文件夹。
如果创建成功,记录日志。
如果创建失败,记录错误信息并退出脚本。
6. 将恢复密钥保存到文件
$FilePath = Join-Path -Path $DestinationFolder -ChildPath "$Hostname.txt"
try {
$RecoveryKey | Out-File -FilePath $FilePath
Write-Log "恢复密钥已成功保存到文件:$FilePath"
} catch {
Write-Log "无法将恢复密钥保存到文件:$FilePath,错误信息:$_"
}
目的: 将获取到的BitLocker恢复密钥保存到指定文件中。操作:
构建目标文件的完整路径。
尝试将恢复密钥写入文件。
如果写入成功,记录日志。
如果写入失败,记录错误信息。
运行脚本可能会有组策略的问题,可以执行以下脚本解决:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
完整代码:将以下代码存储为 .ps1 格式文件,为确保脚本能够运行成功,建议不要直接运行,可选择右键编辑使用Powershell ISE运行此脚本。
# Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 执行此命令前必须执行此命令
# 日志记录函数
function Write-Log {
param (
[string]$message
)
$logFileDir = "C:\temp"
$logFile = Join-Path -Path $logFileDir -ChildPath "BitLockerKeyLog.txt"
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$logMessage = "$timestamp - $message"
# 检查并创建日志文件所在目录
if (-not (Test-Path -Path $logFileDir -PathType Container)) {
try {
New-Item -Path $logFileDir -ItemType Directory -ErrorAction Stop | Out-Null
} catch {
Write-Host "无法创建日志文件目录:$logFileDir,错误信息:$_"
Exit
}
}
# 尝试写入日志
try {
Add-Content -Path $logFile -Value $logMessage -ErrorAction Stop
} catch {
Write-Host "无法写入日志文件:$logFile,错误信息:$_"
Exit
}
}
# 检查是否以管理员身份运行
If (-Not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
Write-Log "脚本未以管理员权限运行,重新以管理员身份启动。"
# 如果没有管理员权限,则重新以管理员身份运行
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Exit
}
# 设置执行策略为 RemoteSigned(如果需要的话)
$currentExecutionPolicy = Get-ExecutionPolicy -Scope CurrentUser
# 如果当前策略不是 RemoteSigned,则修改为 RemoteSigned
if ($currentExecutionPolicy -ne 'RemoteSigned') {
try {
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
Write-Log "已设置执行策略为 RemoteSigned -Scope CurrentUser。"
} catch {
Write-Log "无法设置执行策略为 RemoteSigned -Scope CurrentUser:$_"
Exit
}
}
# 获取主机名
$Hostname = hostname
Write-Log "获取主机名:$Hostname"
# 获取BitLocker恢复密钥
try {
$RecoveryKey = (Get-BitLockerVolume -MountPoint C).KeyProtector.recoverypassword
Write-Log "成功获取BitLocker恢复密钥。"
} catch {
Write-Log "无法获取BitLocker恢复密钥:$_"
Exit
}
# 检查目标文件夹是否存在,不存在则创建
$DestinationFolder = "C:\code" #更改存储路径地址
If (-Not (Test-Path -Path $DestinationFolder)) {
try {
New-Item -ItemType Directory -Path $DestinationFolder -ErrorAction Stop
Write-Log "目标文件夹不存在,已创建:$DestinationFolder"
} catch {
Write-Log "无法创建目标文件夹:$DestinationFolder,错误信息:$_"
Exit
}
}
# 将恢复密钥保存到文件
$FilePath = Join-Path -Path $DestinationFolder -ChildPath "$Hostname.txt"
try {
$RecoveryKey | Out-File -FilePath $FilePath -ErrorAction Stop
Write-Log "恢复密钥已成功保存到文件:$FilePath"
} catch {
Write-Log "无法将恢复密钥保存到文件:$FilePath,错误信息:$_"
}
# 如果需要,可以在此处将执行策略恢复为原始状态
# Set-ExecutionPolicy Default -Scope CurrentUser
- 洗漱包旅行套装 男出差商务洗簌袋便携化妆包女用品洗护大容量
- 蓝罐(Kjeldsens)曲奇饼干礼盒 454g 丹麦原装进口 休闲零食 节日送礼福利团购
- 适用于新款车载手机支架无线器快充智能自动感应汽车
- 皇顺适配名爵MG7汽车用品MG6PRO改装饰配件MG5门槛条ZS保护贴
温馨提示 : 非特殊注明,否则均为©李联华的博客网原创文章,本站文章未经授权禁止任何形式转载;IP地址:3.142.136.210,归属地:俄亥俄州Dublin ,欢迎您的访问!
文章链接:https://www.lilianhua.com/powershell-implementation-for-automatic-backup-of-bitlocker.html
文章链接:https://www.lilianhua.com/powershell-implementation-for-automatic-backup-of-bitlocker.html