【发布时间】:2018-04-19 13:03:47
【问题描述】:
我正在尝试让 SQL 使用 xp_cmdshell 执行一些 powershell 命令,该命令一直在工作,但是我遇到了一个不寻常的问题。当我尝试使用管道时,它无法识别管道之后的命令。我从标准 cmd 行尝试了这个,可以确认发生了同样的问题。这是我正在使用的命令:
powershell.exe -command get-eventlog -Newest 10 -LogName Application -Before "2018-04-18T22:02:23" -After "2018-04-17T22:02:23" -computername dk01sv1115 | Select Message
当我在最后使用命令而不使用| Select Message 时,它可以正常工作。问题是我没有收到完整的事件消息,我尝试使用 Select 和 Format 函数来尝试获取完整的详细信息,但管道似乎是问题所在。如果在启动 powershell 后运行相同的命令(IE 运行 powershell.exe 然后运行命令),它可以正常工作,但是当您使用 SQL 将 powershell.exe 作为 SQL 中的单独行运行时,它会无限期地运行。示例 SQL:
Declare @command nvarchar(1000),@computername nvarchar(1000)
Set @computername = 'test'
Set @command = 'powershell.exe
get-eventlog -Newest 10 -LogName Application -Before "' + REPLACE(Convert(VARCHAR(255),GETDATE(),120),' ','T') +'" -After "' + REPLACE(Convert(varchar(255),DateAdd(dd,-1,GETDATE()),120),' ','T') + '" -computername ' + @computername + '
exit'
exec xp_cmdshell @command
【问题讨论】:
标签: sql-server powershell cmd command-line-interface xp-cmdshell