2015-10-31 18 views
0

PowerShell的SQL查询如何可以结合查询结果是swSaturday = 1swSunday = 1[RebootTime]可能是swSunBeginTimeswSatBeginTime服务器,它也可能不帮助我只是尝试在运行此查询文本文件中的机器列表。使用下面的字符串和变量扩展

收到的错误是Exception calling "Fill" with "1" argument(s): "Incorrect syntax near the keyword 'WHERE'.",如果WHERE swName = $($props.Server)被删除,则错误消失。

Function GetServer-RebootLookUp{ 

Begin{ 
$servers = GC D:\Scripts\reboots1.txt 
$SQLServer = 'Server101' 
$Database = 'Database101' 
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $Database; Integrated Security = True" 
}#End Begin 

Process{ 
$servers | ForEach-Object{ 
$props = @{} 
$props.Server = $_ 

$ServerQuery = @" 
SELECT swName AS [Server], swRack AS [Rack], swEnvironment AS [Environment], swSunBeginTime AS [RebootTime], swSchedule as [Schedule] 
FROM SW_SERVICE_LVL 
INNER JOIN SW_SPECIALTY 
ON swDiscount = swSpecialtyId 
AND swEnvironment IN ('Cert', 'Test', 'Prod') 
AND swSchedule IN ('SCCM - Monthly') 
AND swGrpResp = 'MyGroup' 
AND swRootObjectType = 'Server' 
WHERE swSunday = 1 
WHERE swName = $($props.Server) 
"@ 
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlCmd.CommandText = $ServerQuery 
$SqlCmd.Connection = $SqlConnection 
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
$SqlAdapter.SelectCommand = $SqlCmd 
$DataSet = New-Object System.Data.DataSet 
$SqlAdapter.Fill($DataSet) 
$DataSet.Tables[0] 
} 
}#end process 

End{ 
$SqlConnection.Close() 
} 
}#End function! 
GetServer-RebootLookUp 
+0

我不知道,如果你只是需要一些报价? 'WHERE swName ='$($ props.Server)'' – Matt

+0

哎呦忘了补充一点,我试了一下,得到了同样的异常。我必须将这里的字符串更改为“@”,这样变量才会扩展,而不是通常使用的“@”。 – user4317867

+0

如果您键入来自$($ props.Server)的静态字符串, '''WHERE swName = comp1' – Matt

回答

0

您的查询有两个WHERE子句。这不是有效的SQL。

更改此:

WHERE swSunday = 1 
WHERE swName = $($props.Server) 

要这样:

WHERE swSunday = 1 
    AND swName = $($props.Server) 
+0

奇怪的是,这样做使查询循环以某种方式。 – user4317867