gpt4 book ai didi

sql-server - CMD powershell命令不允许管道

转载 作者:行者123 更新时间:2023-12-02 23:01:46 25 4
gpt4 key购买 nike

我正在尝试使用xp_cmdshell来使SQL执行一些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时,它可以正常工作。问题是我没有收到尝试使用“选择和格式化”功能来获取完整详细信息的完整事件消息,但是管道似乎是问题所在。如果在启动powershell之后运行相同的命令(IE运行powershell.exe,然后运行命令),则可以正常工作,但是,当您使用SQL在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

最佳答案

| Select Message部分由cmd.exe而不是PowerShell解释,因为管道符号(|)在cmd.exe中也是特殊的(含义大致相同),并且您没有将其括在"..."中。

cmd.exe 调用PowerShell的的最佳方法是将整个PowerShell命令作为单双引号字符串("...")传递给-Command参数:

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"

有关嵌入式报价的提示:
  • 要引用文字,可以在整个'...'字符串内使用"..."
  • 请注意,原始命令中引用的值实际上并不需要引用(例如"2018-04-18T22:02:23"),因此我在重新编写公式时使用了未引用的值。
  • 如果您需要嵌入"字符,请使用\"(原文如此-尽管PowerShell内部是`充当转义字符)。
  • 关于sql-server - CMD powershell命令不允许管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49921868/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com