Logging 使用Start process启动LogParser进程时,遇到错误

Logging 使用Start process启动LogParser进程时,遇到错误,logging,powershell,logparser,start-process,Logging,Powershell,Logparser,Start Process,我正在使用下面的代码尝试使用日志解析器启动.csv文件并将其内容转储到SQL数据库中。我必须尝试使用一个自定义函数来去除非字母数字字符,以便可以动态创建列,因为最终目标是使此功能能够处理我提供的任何.csv文件 代码如下: start-process -NoNewWindow -FilePath "C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" -ArgumentList @" "Create Function [dbo].[Remov

我正在使用下面的代码尝试使用日志解析器启动.csv文件并将其内容转储到SQL数据库中。我必须尝试使用一个自定义函数来去除非字母数字字符,以便可以动态创建列,因为最终目标是使此功能能够处理我提供的任何.csv文件

代码如下:

start-process -NoNewWindow -FilePath "C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" -ArgumentList @"

"Create Function [dbo].[RemoveNonAlphaNumCharacters](@Temp VarChar(1000))
Returns VarChar(1000)
AS
Begin

    Declare @KeepValues as varchar(50) = '%[^a-z0-9]%'
    While PatIndex(@KeepValues, @Temp) > 0
        Set @Temp = Stuff(@Temp, PatIndex(@KeepValues, @Temp), 1, '')

    Return @Temp
End
SELECT.RemoveNonAlphaNumCharacters * INTO SQLCounters FROM C:\Users\SeanLon\Desktop\SQL_Log_0.csv" -i:CSV -o:SQL -server:MJNHNX4 -database:PerfmonCounters -driver:"SQL Server" -createTable:ON

"@
错误是:

start-process : Process with an Id of 221104 is not running.
At C:\Users\seanlon\Desktop\Performance\Powershell examples\LogParser.ps1:1 char:1
+ start-process -NoNewWindow -FilePath "C:\Program Files (x86)\Log Parser 2.2\LogP ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Start-Process], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.StartProcessCommand

启动进程或日志解析器不能简单地处理参数列表中复杂的SQL吗?还是LogParser进程在其他事情发生之前就结束了?

在PowerShell 3.0上,它看起来正在干净地传递参数。但是,为了简化此过程,您可以将SQL放在foo.SQL文件中,然后调用logparser,如下所示:

$logParser = "C:\Program Files (x86)\Log Parser 2.2\LogParser.exe"
& $logParser file:c:\foo.sql -i:CSV -o:SQL -server:MJNHNX4 -database:PerfmonCounters -driver:"SQL Server" -createTable:ON

LogParser对数据库一无所知,它在内部引擎中解释和执行简单的SQL查询,而内部引擎不处理存储过程。另请参见。

我将试一试,看看它是否能让我以这种方式启动整个过程。它可能只是因为格式问题而窒息。当然,引用另一个文件意味着,如果我从其他工作站执行此操作,我必须记住修改c:\foo.sql目录,或者将目录放入参数中。不过这是一个小麻烦。这是一个开始,如果上面的方法有效,那么它会让您知道它失败的地方,也许您可以进一步查看SQL字符串。如果它仍然失败,那么可能是另一个参数不正确或者被PowerShell屏蔽了。对于该文件,请使用[io.path]::GetTempFileName()获取可以写入的新临时文件的名称。