由於PowerShell在X64的操作系統上有X86 & X64兩種,對於安裝的SQL Server同樣有兩種版本X64 & X86,如果安裝的是X86的SQL Server只能通過X86的PowerShell去執行Invoke-sqlcmd cmdlet,同理只能在安裝X64的SQL Server只能通過X64的PowerShell去執行Invoke-sqlcmd cmdlet,所以爲了防止這種隱患的存在,我們選擇了System.Data.SqlClient命名空間去實現,其中$SQLCommand爲SQL查詢語句,實現如下:
functionGet-DBObject
{
[OutputType([System.Array])]
param(
[Parameter(Position=0, Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[System.String]
$SQLCommand
)
process
{
Write-Verbose"Get DataBase Object and returned."
$SQLCommand+=" ORDER BY CONVERT(Varchar(50),[id]) "
$connStr="Data Source=$DefaultServer;Initial Catalog=$DataBaseName;User ID=$DBUserName;Password=$DBPassword"
[System.Data.SqlClient.SqlConnection]::ClearAllPools()
[System.Data.SqlClient.SqlConnection]$sqlconn=New-ObjectSystem.Data.SqlClient.SqlConnection($connStr)
[System.Data.SqlClient.SqlCommand]$sqlcmd=New-ObjectSystem.Data.SqlClient.SqlCommand($SQLCommand,$sqlconn)
[System.Data.SqlClient.SqlDataAdapter]$sqladp=New-ObjectSystem.Data.SqlClient.SqlDataAdapter($sqlcmd)
[System.Data.DataSet]$ds=New-ObjectSystem.Data.DataSet
$output=$sqladp.Fill($ds,"Table0")
[Object[]]$dbObject=$ds.Tables["Table0"]
return$dbObject
}
}