När man kör SQLPS kommandon såsom Invoke-SqlCmd visas ibland varningar och sökvägen byts till PS SQLSERVER:\>. Detta sker första gången SQLPS-modulen laddas. Varningarna beror oftast på problem vid laddningen av andra moduler såsom Azure Powershell Tools och är inget man behöver tänka på.
Exempel på varning:
WARNING: Could not obtain SQL Server Service information. An attempt to connect to WMI on 'Microsoft.WindowsAzure.Commands.SqlDatabase.Types.ps1xml' failed with the following error: RPC-servern är inte tillgänglig. (Undantag från HRESULT: 0x800706BA)
Ett bra sätt att lösa detta på är att spara undan sökvägen till aktuellt skript, ladda SQLPS-modulen manuellt och samtidigt gömma outputen av varningar och sen lägga tillbaka sökvägen.
Exempel på hur detta kan göras:
function Import-Module-SQLPS {
# Only load sqlps module if not already loaded
if((get-module sqlps) -eq $null){
push-location
import-module sqlps 3>&1 | out-null
pop-location
}
}
Referens med mer utförlig information:
https://developer42.wordpress.com/2016/02/03/powershell-sql-a-quick-fix-for-the-sqlps-problems/
pushd and popd to avoid import from changing the current directory
http://stackoverflow.com/questions/12915299/sql-server-2012-sqlps-module-changing-current-location-automatically
3>&1 puts warning stream to standard output stream
https://connect.microsoft.com/PowerShell/feedback/details/297055/capture-warning-verbose-debug-and-host-output-via-alternate-streams
out-null blocks that output, so we don’t see the annoying warnings described here:
https://www.codykonior.com/2015/05/30/whats-wrong-with-sqlps/