一步一步做好全院数据备份

发布时间:2023-08-07
浏览次数:

  由于微信公众号限制,本文中提到的各种链接及所有内容可通过点击阅读原文后打开。作者视频精讲请通过CHIMA大讲堂观看(具体观看方法见文末)。

  1.应用效果图

  (1)主页面

17.jpg

  (2)点击业务详情

18.jpg

  (3)打开备份日志

19.jpg

  (4)可以查看到备份文件的基本信息

20.jpg

  (5)根据频次或者近3天备份可视化

21.jpg

  2.系统基础软件下载

  (1)必备:

  1)下载SQL Server Management Studio (SSMS),如有已安装管理器,可在管理器中执行脚本。

  2)下载 .NET 7.0,注意,我们需要安装的是在IIS中驻存用的asp.ne core运行时,如图所示,下载备用。

22.jpg

  --------

  可选腾讯的下载网站,相对来说安全很多。pc.qq.com下载 chorome winrar等备用

  3.主应用程序下载

  点击左下角,打开网页,在网页下载主应用程序压缩包

  4.生成日志数据库脚本(MS Sql Server)

  (1)在企业管理器中执行脚本


CREATE DATABASE [BackupLogview] ON PRIMARY( NAME = N'BackupLogview', FILENAME = N'C:\DATA\BackupLogview.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )LOG ON( NAME = N'BackupLogview_log', FILENAME = N'C:\DATA\BackupLogview_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GOuse BackupLogviewGoCREATE TABLE [dbo].[LogFiles]([ID] [bigint] IDENTITY(1,1) NOT NULL,[FileName] [nvarchar](255) NULL,[FileContent] [nvarchar](max) NULL,[Adddate] [smalldatetime] NULL,[BTree] [varchar](50) NULL,[Tree] [varchar](50) NULL,[memo] [varchar](150) NULL,CONSTRAINT [PK__BackupFi__3214EC2762049C14] PRIMARY KEY CLUSTERED([ID] ASC) ON [PRIMARY]) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]GOCREATE VIEW [dbo].[View_Num]ASSELECT COUNT(ID) AS Num, BTree + '-' + Tree AS ClassFROM dbo.LogFilesWHERE (DATEDIFF(month, Adddate, GETDATE()) < 6) AND (NOT (BTree + '-' + Tree IS NULL))GROUP BY BTree + '-' + TreeGOCREATE VIEW [dbo].[View_Num_Day]ASSELECT BTree + ' ' + Tree AS Item, CASE WHEN datediff(day, adddate, getdate()) = 0 THEN '今日' WHEN datediff(day, adddate,getdate()) = 1 THEN '昨日' WHEN datediff(day, adddate, getdate()) = 2 THEN '前日' END AS Dayof, COUNT(ID)AS NumFROM dbo.LogFilesWHERE (DATEDIFF(day, Adddate, GETDATE()) < 3)GROUP BY BTree + ' ' + Tree, CASE WHEN datediff(day, adddate, getdate()) = 0 THEN '今日' WHEN datediff(day, adddate, getdate())= 1 THEN '昨日' WHEN datediff(day, adddate, getdate()) = 2 THEN '前日' ENDGOALTER TABLE [dbo].[LogFiles] ADD CONSTRAINT [DF_LogFiles_Adddate] DEFAULT (getdate()) FOR [Adddate]



-- 创建用户并分配权限USE [master]GOCREATE LOGIN [backuser] WITH PASSWORD = 'backusr'GOUSE [BackupLogview]GOCREATE USER [backuser] FOR LOGIN [backuser]GOEXEC sp_addrolemember 'db_datareader', 'backuser';EXEC sp_addrolemember 'db_datawriter', 'backuser';

  5.IIS 配置

  (1)文件准备

23.jpg

  (2)安装IIS管理器

24.jpg

  (3)依次安装 dotnet-hosting-7.0.8-win,aspnetcore-runtime-7.0.8-win-x64,注意如果安装 IIS 晚于此步,需要在 IIS 安装完再次安装,以便 IIS 可以识别出 dotnet core

  (4)IIS 配置 .net core 环境,务必选择修改为无托管代码

25.jpg

  (5)修改 IIS 网站主文件夹为桌面的 app

26.jpg

  (6)增加权限,内网使用,everyone最简单

27.jpg

28.jpg

  (7)修改数据库连接。 appsetings.json 中有ms sql 数据库配置,请修改,注意账户的用户名和密码并不完全一样。使用记事本打开并修改后重启 IIS。hospital 可以配置为本院的名称简称, ApiEndpoint 是左侧导航栏下端的文字,可配置为自己喜欢的文字。

  以下为例子:

  {

  "DefaultConnection": "Server=192.168.1.5;Database=BackupLogview;User ID=backuser;Password=backusr",

  "Hospital": "大学医院",

  "ApiEndpoint": "200.5",

  "Logging": {

  "LogLevel": {

  "Default": "Information",

  "Microsoft.AspNetCore": "Warning"

  }

  },

  "AllowedHosts": "*"

  }

  (8)重启IIS后,网站可以正常显示了。如果数据库尚未创建,可能报错,请完善建立数据库一节。

  (9)请确保防火墙正常打开万维网服务(HTTP),可能需要网络管理员协助开放本机的端口服务。

  6.数据库备份脚本

  一键备份 MS server 主机中所有数据库


USE [master]GO/****** Object: StoredProcedure [dbo].[BackupAllDatabases] Script Date: 2023/7/5 8:44:53 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[BackupAllDatabases]@BackupDirectory NVARCHAR(255)ASBEGIN-- 获取当前日期和时间DECLARE @CurrentDateTime VARCHAR(14) = REPLACE(CONVERT(VARCHAR(14), GETDATE(), 120), ':', '');DECLARE @DateTimeAMonthAgo VARCHAR(14) = REPLACE(CONVERT(VARCHAR(14), DATEADD(DAY, -7, GETDATE()), 120), ':', '');
-- 创建临时表来存储备份文件的详细信息CREATE TABLE #BackupFiles(DatabaseName NVARCHAR(128),BackupFilePath NVARCHAR(255));
-- 查询所有用户数据库,并进行备份INSERT INTO #BackupFilesSELECT name, @BackupDirectory + '\' + name + '_' + @CurrentDateTime + '.bak'FROM sys.databasesWHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')AND state = 0; -- 只备份处于在线状态的数据库
-- 执行备份DECLARE @DatabaseName NVARCHAR(128);DECLARE @BackupFilePath NVARCHAR(255);DECLARE @SQL NVARCHAR(MAX);
DECLARE db_cursor CURSOR FORSELECT DatabaseName, BackupFilePathFROM #BackupFiles;
OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @DatabaseName, @BackupFilePath;
WHILE @@FETCH_STATUS = 0BEGINSET @SQL = 'BACKUP DATABASE ' + QUOTENAME(@DatabaseName) + ' TO DISK = N''' + @BackupFilePath + '''';
EXEC sp_executesql @SQL;
FETCH NEXT FROM db_cursor INTO @DatabaseName, @BackupFilePath;END;
CLOSE db_cursor;DEALLOCATE db_cursor;
PRINT '一阶段完成'
-- 创建临时表来存储需要删除的备份文件路径CREATE TABLE #ToDelFiles(BackupFilePath NVARCHAR(255));
-- 插入一个月前的备份文件路径INSERT INTO #ToDelFilesSELECT @BackupDirectory + '\' + name + '_' + @DateTimeAMonthAgo + '.bak'FROM sys.databasesWHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')AND state = 0;


-- 执行 xp_cmdshell 删除过期备份文件DECLARE @DeleteSQL NVARCHAR(MAX) = '';
DECLARE @TodelBackupFilePath NVARCHAR(255);
DECLARE del_cursor CURSOR FORSELECT BackupFilePathFROM #ToDelFiles;
OPEN del_cursor;
FETCH NEXT FROM del_cursor INTO @TodelBackupFilePath;
WHILE @@FETCH_STATUS = 0BEGINSET @DeleteSQL = 'EXEC xp_cmdshell ''DEL /Q "' + @TodelBackupFilePath + '"''';print @DeleteSQL;EXEC sp_executesql @DeleteSQL;
FETCH NEXT FROM del_cursor INTO @TodelBackupFilePath;END;
CLOSE del_cursor;DEALLOCATE del_cursor;

-- 删除临时表DROP TABLE #BackupFiles;DROP TABLE #ToDelFiles;END;

EXEC dbo.BackupAllDatabases 'D:\DataBak';


  在SQL server代理中增加相关作业,每天执行脚本即可。注意,文件备份的目录一定存在。

  以下备注:

  【错误描述】:

  SQL Server阻止了对组件‘xp_cmdshell’的过程‘sys.xp_cmdshell’的访问。因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用sp_configure启用‘xp_cmdshell’。有关启用‘xp_cmdshell’的详细信息,请参阅SQL帮助文件。

  【原因分析】:

  xp_cmdshell可以让系统管理员以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行方式返回任何输出,是一个功能非常强大的扩展存贮过程。一般情况下,xp_cmdshell对管理员来说也是不必要的,xp_cmdshell的消除不会对Server造成任何影响。

  【解决办法】:

  通过查询分析器,选择Master数据库,然后执行以下SQL内容:

sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'xp_cmdshell',1
reconfigure
go


  ----------------------

  以下脚本为 Oracle 每三天进行一次全备份,每天进行一次增量备份,每半小时进行一次日志备份,仅供参考,请根据自己环境修改:


#!/bin/bash
# RMAN备份脚本
# 设置环境变量export ORACLE_HOME=/path/to/oracle_homeexport ORACLE_SID=your_oracle_sid
# 定义备份目录BACKUP_DIR=/path/to/backup_dir
# 定义日期格式DATE=$(date +"%Y%m%d")
# 定义全备份函数function full_backup {  echo "Starting full backup..."  rman target / <<EOF  RUN {    ALLOCATE CHANNEL c1 DEVICE TYPE disk;    BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;    DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-10';    RELEASE CHANNEL c1;  }  EXIT;  EOF  echo "Full backup completed!"}
# 定义增量备份函数function incremental_backup {  echo "Starting incremental backup..."  rman target / <<EOF  RUN {    ALLOCATE CHANNEL c1 DEVICE TYPE disk;    BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG;    DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1';    RELEASE CHANNEL c1;  }  EXIT;  EOF  echo "Incremental backup completed!"}
# 定义日志备份函数function log_backup {  echo "Starting log backup..."  rman target / <<EOF  RUN {    ALLOCATE CHANNEL c1 DEVICE TYPE disk;    BACKUP ARCHIVELOG ALL NOT BACKED UP;    DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1/48';    RELEASE CHANNEL c1;  }  EXIT;  EOF  echo "Log backup completed!"}
# 获取当前时间CURRENT_HOUR=$(date +"%H")CURRENT_MINUTE=$(date +"%M")
# 判断是否为全备份时间(每三天的0点执行)if [ $((($(date +%-j)-1)/3%2)) -eq 0 ] && [ "$CURRENT_HOUR" == "00" ] && [ "$CURRENT_MINUTE" == "00" ]; then  # 执行全备份  full_backupelse  # 判断是否为增量备份时间(每天的0点执行)  if [ "$CURRENT_HOUR" == "00" ] && [ "$CURRENT_MINUTE" == "00" ]; then    # 执行增量备份    incremental_backup  fi
 # 执行日志备份  log_backupfi


  在window环境下使用Oracle备份脚本中,可以尝试的 Power Shell 脚本如下:


REM RMAN备份脚本
REM 设置环境变量set ORACLE_HOME=C:\path\to\oracle_homeset ORACLE_SID=your_oracle_sid
REM 定义备份目录set BACKUP_DIR=C:\path\to\backup_dir
REM 获取当前日期set DATE=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%
REM 定义全备份函数:full_backupecho Starting full backup...%ORACLE_HOME%\bin\rman target / <<EOFRUN {  ALLOCATE CHANNEL c1 DEVICE TYPE disk;  BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;  DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-10';  RELEASE CHANNEL c1;}EXIT;EOFecho Full backup completed!goto end
REM 定义增量备份函数:incremental_backupecho Starting incremental backup...%ORACLE_HOME%\bin\rman target / <<EOFRUN {  ALLOCATE CHANNEL c1 DEVICE TYPE disk;  BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG;  DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1';  RELEASE CHANNEL c1;}EXIT;EOFecho Incremental backup completed!goto end
REM 定义日志备份函数:log_backupecho Starting log backup...%ORACLE_HOME%\bin\rman target / <<EOFRUN {  ALLOCATE CHANNEL c1 DEVICE TYPE disk;  BACKUP ARCHIVELOG ALL NOT BACKED UP;  DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1/48';  RELEASE CHANNEL c1;}EXIT;EOFecho Log backup completed!goto end
REM 获取当前时间for /f "tokens=1-3 delims=: " %%A in ("%TIME%") do (  set CURRENT_HOUR=%%A  set CURRENT_MINUTE=%%B)
REM 判断是否为全备份时间(每三天的0点执行)if %DATE:~-2% equ 01 (  goto full_backup)
REM 判断是否为增量备份时间(每天的0点执行)if "%CURRENT_HOUR%" equ "00" if "%CURRENT_MINUTE%" equ "00" (  goto incremental_backup)
REM 执行日志备份:log_backupgoto log_backup
:end


  请注意,使用Windows任务计划时,如果需要不登陆也执行脚本,请一定勾选相关选项并提供用户名密码。

  (1)打开任务计划程序。您可以在 Windows 搜索框中输入 "任务计划程序" 并打开它。

  (2)在任务计划程序窗口中,点击 "创建基本任务"(位于右侧面板)。

  (3)在创建基本任务向导中,输入任务的名称和描述,然后点击 "下一步"。

  (4)在触发器选项中,选择 "每天" 并点击 "下一步"。

  (5)在特定时间选项中,输入第一个触发时间,然后勾选 "重复任务每" 并设置为 "30 分钟"。点击 "下一步"。

  (6)在操作选项中,选择 "启动程序" 并点击 "下一步"。

  (7)在程序/脚本选项中,输入要执行的备份脚本的完整路径。例如,C:\path\to\your\backup_script.sh。点击 "下一步"。

  (8)在确认选项中,检查您的任务设置,确认一切正确后点击 "完成"。

  7.ps1 文件代码及参考

  此 Power shell 脚本 实现拷贝备份文件到网盘,并在Mssql数据库记录备份日志


$sourceDirectory = "C:\FromDIR"$targetLocalDirectory = "D:\ToDIR"$btree = "数据库"$taskName = "HIS"$memo = "心电系统"
# ---btree 为一级类目 比如 数据库  taskname 为 二级类目 比如 his----  memo 在详情页展示,显示具体的备注人读信息# 将日志文件内容保存到 MSSQL Server 数据库$connectionString = "Server=192.168.1.5;Database=BackupLogview;User ID=backupuser;Password=backusr"
# ---------------------------------以下勿动!----------------------------------# -----------------------------------------------------------------------------$logDirectory = "C:\logs"
# 设置脚本文件的编码为 UTF-8$OutputEncoding = [System.Text.Encoding]::UTF8
# 创建日志文件夹if (-not (Test-Path $logDirectory)) {New-Item -ItemType Directory -Path $logDirectory | Out-NullWrite-Host "已创建文件夹: $logDirectory"}else {Write-Host "文件夹已存在: $logDirectory"}
# 获取当前日期和时间$datetime = Get-Date -Format "yyyyMMddHHmmss"$currentDate = $datetime.ToString()
# 设置日志文件路径$logFile = "$logDirectory\robocopy_log_$taskName_$currentDate.txt"
# 设置 rem 日志文件路径$remLogFile = "$logDirectory\rem_log_$taskName_$currentDate.txt"Write-Host "正在记录 rem 信息到 $remLogFile"
# 执行 Robocopy 同步操作robocopy $sourceDirectory $targetLocalDirectory /LOG:$logFile /NFL /TEE /E /XX /Z /R:3 /W:10
# robocopy D:\Document H:\Project /mir   完全拷贝并同步增删  /J 可以提高拷贝速度##自动删除备份文件夹中过时文件,慎用!尤其是拷贝断档的文件,请仅用于日常每日数据库日志备份自动删除!## 获取文件夹中修改日期在一个月以上的文件,并删除它们
#$thresholdDate = (Get-Date).AddMonths(-1)#Get-ChildItem -Path $targetLocalDirectory | Where-Object { $_.LastWriteTime -lt $thresholdDate } | Remove-Item -Force
$ipAddresses = Get-NetIPAddress | Where-Object { $_.AddressFamily -eq 'IPv4' -and $_.PrefixOrigin -eq 'Manual' } | Select-Object -ExpandProperty IPAddress$ipAddressesString = $ipAddresses -join ','
# 等待 30 秒Start-Sleep -Seconds 10

try {# 创建数据库连接对象$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)
# 打开数据库连接$connection.Open()
# 创建 SQL 命令对象$command = $connection.CreateCommand()
# 设置 SQL 命令文本$command.CommandText = "INSERT INTO LogFiles (BTree, Tree, FileName, FileContent, memo) VALUES (@BTree, @Tree, @FileName, @FileContent,@memo)"
# 添加参数$command.Parameters.AddWithValue("@Tree", "$taskName")$command.Parameters.AddWithValue("@BTree", "$btree")$command.Parameters.AddWithValue("@FileName", "$logFile")$command.Parameters.AddWithValue("@memo", "$memo")
# 读取日志文件内容$logFileContent = Get-Content -Path $logFile -Raw# 附加上 IP 地址$logFileContent =  $logFileContent + $ipAddressesString$command.Parameters.AddWithValue("@FileContent", $logFileContent)
# 执行 SQL 命令$command.ExecuteNonQuery()
Write-Host "日志文件内容已成功保存到数据库表。"}catch {Write-Host "发生错误: $($_.Exception.Message)"}finally {# 关闭数据库连接$connection.Close()}
# 删除日志文件if (Test-Path $logFile) {Remove-Item -Path $logFile -ForceWrite-Host "已删除日志文件: $logFile"}else {Write-Host "未找到日志文件: $logFile"}


# -------------------------以下仅适用于删除旧文件,保留5份最新文件的情况!----------------------


$folderPath = $targetLocalDirectory$fileExtension = ".bak"  # 文件扩展名$keepLatestCount = 5  # 保留的最新文件数量
# 获取文件列表并按照日期降序排序$fileList = Get-ChildItem -Path $folderPath | Where-Object { $_.Extension -eq $fileExtension } | Sort-Object -Property LastWriteTime -Descending
# 创建一个哈希表,用于存储不同文件的前缀和对应的文件列表$filePrefixes = @{}
# 遍历文件列表,将文件按前缀存入哈希表foreach ($file in $fileList) {$fileName = $file.Name$filePrefix = $fileName -replace "_\d{4}-\d{2}-\d{2}.*$"
if (-not $filePrefixes.ContainsKey($filePrefix)) {$filePrefixes[$filePrefix] = @()}
$filePrefixes[$filePrefix] += $file}
# 遍历哈希表,对每个前缀的文件列表进行处理,保留最新的文件数量foreach ($prefixFiles in $filePrefixes.Values) {if ($prefixFiles.Count -gt $keepLatestCount) {$filesToDelete = $prefixFiles | Select-Object -Skip $keepLatestCount$filesToDelete | Remove-Item -Force}}


  # -------------以下勿拷贝,ROBOCOPY使用方法及参数仅供参考!-------------------

  # -----------------------------------------------------------------------------

  Usage: ROBOCOPY source destination [file [file]...] [options]

  source 源路径(源文件夹)

  destination目标路径(目标文件夹)

  file 可选参数,指定要复制的特定文件(可以是通配符或文件名列表)

  Options:

  /S 复制子目录(包括空子目录)

  /E 复制子目录(包括空子目录),连同目录树中的空目录一起复制

  /Z 在网络连接出现故障时重新尝试

  /R:n 在错误发生时重新尝试的次数(默认值为1,000,000)

  /W:n 在错误发生时的等待时间(默认值为30秒)

  /NFL 不记录文件列表

  /NDL 不记录目录列表

  /TEE 在屏幕上显示复制的输出

  /LOG:file 将输出信息写入指定的日志文件

  /XX排除已经存在于目标目录中的额外文件(根据文件大小和修改日期进行匹配)

  /XL排除目标目录中已经存在于源目录中的额外文件和目录

  /COPY:copyflags 复制文件的属性(默认值为DAT)

  D - 日期

  A - 属性

  T - 时间

  S - 安全

  O - 拥有者信息

  U - 重新启动数据:包括非数据流文件

  M - 重新启动数据:不包括非数据流文件

  B - 离线文件

  /IS包括同样的文件

  /IT包括更改的文件和时代

  8.Powershell 在任务计划中执行脚本

  在 windows 系统中,使用 powershell 执行脚本,请在写字板中调整相关参数,注意把参数一次性拷贝完整。之所以选择带参数的原因,是避免 power shell 打开时出现安全性限制对话框导致执行失败

powershell.exe -NonInteractive -NoProfile -NoLogo -ExecutionPolicy Unrestricted -File D:\DataDiskFor151\stlCopy.ps1

  根据备份的周期做好任务计划

  注意:如果希望系统未登录也执行脚本,请务必选择“不管用户是否登录都要执行”选择项,需要提供超级用户密码

  ---------------------------------------------------------------------

  以下是可能出现的报错信息参考注意事项:

  在 PowerShell 执行脚本时,可以使用 -ExecutionPolicy 参数来设置执行策略,以避免出现弹框提示。执行策略用于控制 PowerShell 可以执行的脚本类型和来源。

  有以下几种执行策略可供选择:

  Restricted(默认):不允许执行任何脚本文件。

  AllSigned:只允许执行经过数字签名的脚本文件。

  RemoteSigned:允许执行本地创建的脚本文件,但对于从网络下载的脚本文件必须经过数字签名。

  Unrestricted:允许执行任意脚本文件,不论是否经过数字签名。

  要避免弹框提示,您可以将执行策略设置为 RemoteSigned 或 Unrestricted。请注意,更改执行策略可能会带来一定的安全风险,请根据您的需求和安全考虑进行设置。

  上述命令将当前用户的执行策略设置为 RemoteSigned。您可以将 -Scope 参数设置为 CurrentUser 或 LocalMachine,具体取决于您想要设置的范围。

  请注意,要执行上述命令,您需要以管理员身份运行 PowerShell 提示符或具有足够权限的用户帐户。

  使用适当的执行策略设置,您可以避免 PowerShell 执行脚本时出现弹框提示。请记住在执行脚本时要保持谨慎,并确保来源可信。

  在 PowerShell 中执行以下命令来查询当前的执行策略:

  Get-ExecutionPolicy

  你遇到的错误信息表明你尝试运行的 PowerShell 脚本 "example.ps1" 未通过 AuthorizationManager 检查。这个错误通常发生在权限不足或安全限制阻止脚本执行的情况下。

  以下是一些建议来解决这个问题:

  以管理员身份运行 PowerShell:右键单击 PowerShell 快捷方式,选择 "以管理员身份运行",确保你拥有提升的权限。这可能有助于绕过某些限制。

  检查执行策略:在 PowerShell 中运行命令 Get-ExecutionPolicy,验证当前的执行策略。如果执行策略设置为 "Restricted",你需要将其更改为更宽松的策略。可以在提升的 PowerShell 会话中运行 Set-ExecutionPolicy Unrestricted 来进行更改。

  解除脚本的阻止:如果脚本文件是从互联网下载或从压缩文件中提取的,可能会被阻止。右键单击脚本文件,选择属性,如果有 "解除" 按钮,点击它。这样应该会取消文件的阻止状态。也可以打开另存为其他文件打开即可。

  检查文件权限:确保运行 PowerShell 命令的用户帐户具有足够的权限来访问和执行脚本文件。确保该帐户对文件及其所在的文件夹具有适当的读取和执行权限。

  禁用防病毒软件/防火墙:临时禁用任何可能干扰脚本执行的防病毒软件或防火墙。有时,这些安全工具可能会将脚本标记为潜在有害并阻止其执行。

  通过应用这些步骤,你应该能够解决 "AuthorizationManager 检查失败" 错误,并成功执行 PowerShell 脚本。

  通过以下路径可观看本次视频精讲

  1.进入CHIMA公众号

  2.点击服务栏目

29.jpg

  3.可看到活动栏目下方有CHIMA大讲堂板块

30.jpg

  4.点击CHIMA大讲堂,可看到“实操课——Step By Step 做好全院级数据备份”这一期大讲堂,点开后可看到视频精讲。

31.jpg