一步一步做好全院數據備份
由于微信公眾號限制,本文中提到的各種鏈接及所有內容可通過點擊閱讀原文后打開。作者視頻精講請通過CHIMA大講堂觀看(具體觀看方法見文末)。
1.應用效果圖
(1)主頁面
(2)點擊業務詳情
(3)打開備份日志
(4)可以查看到備份文件的基本信息
(5)根據頻次或者近3天備份可視化
2.系統基礎軟件下載
(1)必備:
1)下載SQL Server Management Studio (SSMS),如有已安裝管理器,可在管理器中執行腳本。
2)下載 .NET 7.0,注意,我們需要安裝的是在IIS中駐存用的asp.ne core運行時,如圖所示,下載備用。
--------
可選騰訊的下載網站,相對來說安全很多。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%)
GO
use BackupLogview
Go
CREATE 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]
GO
CREATE VIEW [dbo].[View_Num]
AS
SELECT COUNT(ID) AS Num, BTree + '-' + Tree AS Class
FROM dbo.LogFiles
WHERE (DATEDIFF(month, Adddate, GETDATE()) < 6) AND (NOT (BTree + '-' + Tree IS NULL))
GROUP BY BTree + '-' + Tree
GO
CREATE VIEW [dbo].[View_Num_Day]
AS
SELECT 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 Num
FROM dbo.LogFiles
WHERE (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 '前日' END
GO
ALTER TABLE [dbo].[LogFiles] ADD CONSTRAINT [DF_LogFiles_Adddate] DEFAULT (getdate()) FOR [Adddate]
-- 創建用戶并分配權限
USE [master]
GO
CREATE LOGIN [backuser] WITH PASSWORD = 'backusr'
GO
USE [BackupLogview]
GO
CREATE USER [backuser] FOR LOGIN [backuser]
GO
EXEC sp_addrolemember 'db_datareader', 'backuser';
EXEC sp_addrolemember 'db_datawriter', 'backuser';
5.IIS 配置
(1)文件準備
(2)安裝IIS管理器
(3)依次安裝 dotnet-hosting-7.0.8-win,aspnetcore-runtime-7.0.8-win-x64,注意如果安裝 IIS 晚于此步,需要在 IIS 安裝完再次安裝,以便 IIS 可以識別出 dotnet core
(4)IIS 配置 .net core 環境,務必選擇修改為無托管代碼
(5)修改 IIS 網站主文件夾為桌面的 app
(6)增加權限,內網使用,everyone最簡單
(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 ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[BackupAllDatabases]
@BackupDirectory NVARCHAR(255)
AS
BEGIN
-- 獲取當前日期和時間
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 #BackupFiles
SELECT name, @BackupDirectory + '\' + name + '_' + @CurrentDateTime + '.bak'
FROM sys.databases
WHERE 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 FOR
SELECT DatabaseName, BackupFilePath
FROM #BackupFiles;
OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @DatabaseName, @BackupFilePath;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @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 #ToDelFiles
SELECT @BackupDirectory + '\' + name + '_' + @DateTimeAMonthAgo + '.bak'
FROM sys.databases
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')
AND state = 0;
-- 執行 xp_cmdshell 刪除過期備份文件
DECLARE @DeleteSQL NVARCHAR(MAX) = '';
DECLARE @TodelBackupFilePath NVARCHAR(255);
DECLARE del_cursor CURSOR FOR
SELECT BackupFilePath
FROM #ToDelFiles;
OPEN del_cursor;
FETCH NEXT FROM del_cursor INTO @TodelBackupFilePath;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @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_home
export 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_backup
else
# 判斷是否為增量備份時間(每天的0點執行)
if [ "$CURRENT_HOUR" == "00" ] && [ "$CURRENT_MINUTE" == "00" ]; then
# 執行增量備份
incremental_backup
fi
# 執行日志備份
log_backup
fi
在window環境下使用Oracle備份腳本中,可以嘗試的 Power Shell 腳本如下:
REM RMAN備份腳本
REM 設置環境變量
set ORACLE_HOME=C:\path\to\oracle_home
set 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_backup
echo Starting full backup...
%ORACLE_HOME%\bin\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!
goto end
REM 定義增量備份函數
:incremental_backup
echo Starting incremental backup...
%ORACLE_HOME%\bin\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!
goto end
REM 定義日志備份函數
:log_backup
echo Starting log backup...
%ORACLE_HOME%\bin\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!
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_backup
goto 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-Null
Write-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 -Force
Write-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.點擊服務欄目
3.可看到活動欄目下方有CHIMA大講堂板塊
4.點擊CHIMA大講堂,可看到“實操課——Step By Step 做好全院級數據備份”這一期大講堂,點開后可看到視頻精講。
上一篇: 基于MDT診療模式的基層醫院幫扶模式探索
下一篇: 汪春亮:醫院數據治理探索與實踐