请告诉我,有谁遇到过如何通过 SQL Server 代理以管理员身份运行脚本/bat 文件 (微软 SQL Server 2016)?
我在代理中创建一个任务(需要清理服务器上目录中超过 7 天的文件)-> 我想进入步骤,我创建 PowerShell:
$folderPath = "C:\backup\MSSQL\Daily"
$cutoffDate = (Get-Date).AddDays(-7)
Get-ChildItem -Path $folderPath | Where-Object { $_.LastWriteTime -LT $cutoffDate } | Remove-Item -Force
我运行它 - 它可以工作,但它不会删除文件,因为我需要以管理员身份运行它。
我认为运行一个文件会更好。
我创建了一个用于删除的
.bat
文件(名称为DEL_OLD_BACKUP_TEST.bat
),我将一个清理脚本放入其中(以管理员身份在服务器上手动运行它可以正常工作)->我在代理中设置了PowerShell任务
Start-Process -FilePath "C:/backup/MSSQL/DEL_OLD_BACKUP_TEST.bat" -Verb runas
不清理文件,尽管它有效“进程退出代码 0。该步骤成功。”
我需要在特定用户下运行它吗?
您还可以使用sql脚本来删除文件。
CREATE PROCEDURE [dbo].[PurgeOldFiles]
@DaysToKeep INT,
@FolderPath NVARCHAR(255)
AS
BEGIN
-- Enable xp_cmdshell
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
DECLARE @Cmd NVARCHAR(4000);
SET @Cmd = 'FORFILES /P "' + @FolderPath + '" /S /M * /D -' + CAST(@DaysToKeep AS NVARCHAR(3)) + ' /C "CMD /C DEL @FILE"';
EXEC xp_cmdshell @Cmd;
END
在数据库中创建上述过程并通过 SQL Server Agent 运行它