C# 带换行符的查询无法在PowerShell中执行

C# 带换行符的查询无法在PowerShell中执行,c#,sql-server,powershell,C#,Sql Server,Powershell,我正在使用Microsoft.SqlServer.Management.SMO程序集自动化PowerShell中的一些数据库任务。出于某种原因,执行带有换行符的查询似乎不起作用。然而,我也在C中复制了完全相同的任务,它确实有效。我不确定是否有我一直忽略的细微差别,或者在PowerShell中读取文件是否有导致我出现问题的奇怪差别。以下是复制所需的所有信息: SQL脚本test.SQL: select * from INFORMATION_SCHEMA.TABLES PowerShell不工作:

我正在使用Microsoft.SqlServer.Management.SMO程序集自动化PowerShell中的一些数据库任务。出于某种原因,执行带有换行符的查询似乎不起作用。然而,我也在C中复制了完全相同的任务,它确实有效。我不确定是否有我一直忽略的细微差别,或者在PowerShell中读取文件是否有导致我出现问题的奇怪差别。以下是复制所需的所有信息:

SQL脚本test.SQL:

select
* from INFORMATION_SCHEMA.TABLES
PowerShell不工作:

下面是PowerShell提供的错误消息:

使用1个参数调用ExecuteOnQuery时发生异常: 数据库“Salesforce Neptune”的ExecuteOnQuery失败。--> Microsoft.SqlServer.Management.Smo.FailedOperationException: 数据库“Salesforce Neptune”的ExecuteOnQuery失败。--> Microsoft.SqlServer.Management.Common.ExecutionFailureException:异常 执行Transact-SQL语句或批处理时发生异常。 -->System.Data.SqlClient.SqlException:“选择”附近的语法不正确

C确实起作用:

如果我编辑test.sql文件并将整个查询放在一行上,那么我的PowerShell脚本可以工作。怎么回事

或者,如果在PowerShell中读取导致我出现问题的文件存在一些奇怪的差异

我相信这是因为Get内容在默认情况下以行数组的形式读取文件,就像C IIRC中的ReadAllLines一样


从V3开始,您可以使用-Raw开关禁用此行为,在V2中,您必须使用[IO.File]::ReadAllTextfile\path。

Ah!这正是问题所在。这是有道理的。谢谢你的帮助。
Add-Type -Path 'C:\Program Files\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.SqlServer.Smo.dll'

$server = New-Object Microsoft.SqlServer.Management.SMO.Server('serverName')
$database = New-Object Microsoft.SqlServer.Management.SMO.Database($server, 'myDatabase')
$setupScript = Get-Content "$PSScriptRoot\scripts\test.sql"
$database.ExecuteNonQuery($setupScript)
var server = new Server("serverName");
var sql = System.IO.File.ReadAllText(@"D:\code\test.sql");
var database = new Database(server, "myDatabase");
database.ExecuteNonQuery(sql);