如何使用代理SQL Server运行bat文件(具有管理员权限)

问题描述 投票:0回答:1

请告诉我,有谁遇到过如何通过 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-server sql-server-agent
1个回答
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 运行它

© www.soinside.com 2019 - 2024. All rights reserved.