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

Sql server 如何从存储过程执行PowerShell文件,sql-server,powershell,stored-procedures,Sql Server,Powershell,Stored Procedures,如何从存储过程内部执行PowerShell文件 我没有幸从存储过程中执行PowerShell文件 exec xp_cmdshell 'powershell ""E:\PowershellScripts\todayErrorLog.ps1""' 当我运行存储过程时,如果文件中出现错误,则拒绝访问。我知道ps1文件本身很好,因为我可以在命令行和代理作业中执行它。所以我认为这是一个给予存储过程足够权限的问题 在此之前,我确保使用此脚本启用xp\u cmdshell -- To allow adva

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

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

exec xp_cmdshell 'powershell ""E:\PowershellScripts\todayErrorLog.ps1""'
当我运行存储过程时,如果文件中出现错误,则拒绝访问。我知道ps1文件本身很好,因为我可以在命令行和代理作业中执行它。所以我认为这是一个给予存储过程足够权限的问题

在此之前,我确保使用此脚本启用
xp\u 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) 您可以从命令行运行PS (2) 无法从xp\u cmdshell中运行脚本 (3) 将包含该文件的文件夹更改为由所有人完全控制 (4) 尝试通过xp\u cmdshell运行脚本


或者,对于测试,您可以将运行的登录SQL代理更改为您的凭据。然后代理以“您”的身份运行,就像您在命令行上运行一样。

您的问题是代理使用的帐户没有足够的权限访问该文件

如何检查:

(1) 您可以从命令行运行PS (2) 无法从xp\u cmdshell中运行脚本 (3) 将包含该文件的文件夹更改为由所有人完全控制 (4) 尝试通过xp\u cmdshell运行脚本


或者,对于测试,您可以将运行的登录SQL代理更改为您的凭据。然后代理以“您”的身份运行,就像您在命令行上运行一样。

您是否考虑过只从存储过程中执行您提到的SQLAgent作业?我从未尝试过从proc直接运行powershell,但我已经从proc中执行了代理作业,这里有大量的示例和在线帮助来实现这一点。这都是因为:。有人建议我将代理作业转换为存储过程,这样我的MVC控制器就可以知道该过程何时完成。您是否考虑过只在存储过程中执行您提到的SQLAgent作业?我从未尝试过从proc直接运行powershell,但我已经从proc中执行了代理作业,这里有大量的示例和在线帮助来实现这一点。这都是因为:。有人建议我将我的代理作业转换为存储过程,这样我的MVC控制器就可以知道该过程何时完成。当我尝试在存储过程中执行文件时,我遇到了问题。代理是否能够将其作为计划作业运行(而不是通过SMS以交互方式运行)?通过SMS以交互方式运行作业使用您的登录凭据,而不是代理凭据。我可以将其作为计划作业运行--根本问题是,我希望能够使用MVC控制器方法触发代理作业按需运行,并在作业完成后刷新视图。我被告知需要运行存储过程而不是作业,存储过程异步运行作业,并且在作业完成时不会通知我。代理运行它没有问题。当我尝试在存储过程中执行文件时,我遇到了问题。代理是否能够将其作为计划作业运行(而不是通过SMS以交互方式运行)?通过SMS以交互方式运行作业使用您的登录凭据,而不是代理凭据。我可以将其作为计划作业运行--根本问题是,我希望能够使用MVC控制器方法触发代理作业按需运行,并在作业完成后刷新视图。我被告知需要运行存储过程而不是作业,存储过程异步运行作业,并且在作业完成时不会通知我。