如何从存储过程执行PowerShell文件

时间:2016-07-28 16:33:24

标签: sql-server powershell stored-procedures

如何从存储过程中执行PowerShell文件?

我没有幸运从存储过程中执行PowerShell文件。

exec xp_cmdshell 'powershell ""E:\PowershellScripts\todayErrorLog.ps1""'

当我运行存储过程时,我得到访问被拒绝的文件错误。我知道ps1文件本身很好,因为我可以在命令行和代理作业上执行它。所以我认为这是给存储过程足够的权限。

Access denied errors

以前,我确保使用此脚本启用xp_cmdshell

-- To allow advanced options to be changed.  
EXEC sp_configure 'show advanced options', 1;  
GO  

-- To update the currently configured value for advanced options.  
RECONFIGURE;  
GO  

-- To enable the feature.  
EXEC sp_configure 'xp_cmdshell', 1;  
GO  

-- To update the currently configured value for this feature.  
RECONFIGURE;  
GO  

为了从存储过程执行PowerShell脚本文件,我还需要做什么?

这是存储过程:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[RefreshErrorQuery] 
    -- No parameters    
AS
BEGIN
    SET NOCOUNT ON;
    -- Step 1
    exec xp_cmdshell 'powershell ""E:\PowershellScripts\todayErrorLog.ps1""'

    -- Step 2: TODO: Run SSIS package
END

1 个答案:

答案 0 :(得分:0)

您的问题是因为代理正在使用的帐户没有足够的权限来访问该文件。

如何检查:

(1)您可以从命令行运行PS (2)您无法在xp_cmdshell中运行该脚本 (3)将包含该文件的文件夹更改为Everyone完全控制 (4)尝试通过xp_cmdshell运行脚本

或者,对于测试,您可以将正在运行的SQL代理登录到您的凭据。然后代理运行为"你",就像在命令行上运行一样。