我正在尝试使用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后再运行相同的命令(例如运行powershell.exe然后运行命令),它将正常工作,但是当您在SQL中使用单独的行运行powershell.exe时,它会无限期地运行。例如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