SQLPS byter sökväg och visar varningar vid laddning

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/