Ich habe ein . sql
Datei. Ich versuche, Verbindungszeichenfolgendetails über ein Powershell-Skript zu übergeben und eine .sql
Datei aufzurufen .
Ich suchte und fand ein Cmdlet mit Bezug zu Invoke-sqlcmd
. Während ich versuchte, ein Modul zu finden, das SQL entspricht, habe ich keines in meinem Computer gefunden.
Sollte ich irgendetwas auf meinem Computer installieren (der Computer verfügt bereits über SQL Server Management Studio 2008 R2), um die Module abzurufen, oder gibt es eine einfache Möglichkeit, .sql
Dateien mit Powershell auszuführen ?
sql
sql-server
powershell
powershell-module
Samselvaprabu
quelle
quelle
Imoprt-Module SQLPS
stattdessen versuchenGet-Module -List | ? Name -eq sqlps
oder prüfen, ob ein oder mehrere SQLPS-Module zum Importieren verfügbar sind.Zitieren aus Importieren des SQLPS-Moduls auf MSDN,
Ja, Sie könnten den
Add-PSSnapin
von Christian beschriebenen Ansatz verwenden, aber es ist auch nützlich, den empfohlenen SQLPS-Modulansatz zu schätzen.Im einfachsten Fall wird davon ausgegangen, dass Sie über SQL Server 2012 verfügen: sqlps ist in der Installation enthalten, sodass Sie das Modul einfach wie jedes andere (normalerweise in Ihrem Profil ) über laden
Import-Module sqlps
. Mit können Sie überprüfen, ob das Modul auf Ihrem System verfügbar istGet-Module -ListAvailable
.Wenn Sie nicht über SQL Server 2012 verfügen, müssen Sie lediglich das SQLPS- Modul in Ihr Modulverzeichnis herunterladen, damit Get-Module / Import-Module es findet. Merkwürdigerweise hat Microsoft nicht dieses Modul zum Download zur Verfügung stellen! Chad Miller hat jedoch freundlicherweise die erforderlichen Teile verpackt und dieses Modul heruntergeladen . Entpacken Sie es in Ihrem Verzeichnis ... Documents \ WindowsPowerShell \ Modules und fahren Sie mit dem Import fort.
Es ist interessant festzustellen, dass der Modulansatz und der Snapin-Ansatz nicht identisch sind. Wenn Sie die Snapins laden und dann ausführen
Get-PSSnapin
( ohne den Parameter -Registered, um nur das anzuzeigen, was Sie geladen haben), werden die SQL-Snapins angezeigt. Wenn Sie andererseits das sqlps-Modul laden, werden die geladenen SnapinsGet-PSSnapin
nicht angezeigt, sodass die verschiedenen Blogeinträge, die dasInvoke-Sqlcmd
Cmdlet testen, indem sie nur die Snapins untersuchen, möglicherweise zu einem falsch negativen Ergebnis führen.2012.10.06 Update
Die vollständige Geschichte über das SQLPS-Modul im Vergleich zu den SQLPS-Mini-Shell- und SQL Server-Snap-Ins finden Sie in meiner zweiteiligen Miniserie Practical PowerShell für SQL Server-Entwickler und DBAs, die kürzlich auf Simple-Talk.com veröffentlicht wurde wo ich laut einem Kommentar eines Lesers das Thema erfolgreich "entwirrt" habe. :-)
quelle
PowerShellTools.msi
gibt es eine x86 und eine x64 version.Get-Module -ListAvalable
>> ein korrekter Befehl istGet-Module -ListAvailable
.Install-Module -Name SqlServer
if(Test-Path "C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS") { #Sql Server 2012 Import-Module SqlPs -DisableNameChecking C: # Switch back from SqlServer } else { #Sql Server 2008 Add-PSSnapin SqlServerCmdletSnapin100 # here live Invoke-SqlCmd } Invoke-Sqlcmd -InputFile "MySqlScript.sql" -ServerInstance "Database name" -ErrorAction 'Stop' -Verbose -QueryTimeout 1800 # 30min
quelle
Hier ist eine Funktion, die ich in meinem PowerShell-Profil zum Laden von SQL-Snapins habe:
function Load-SQL-Server-Snap-Ins { try { $sqlpsreg="HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.SqlServer.Management.PowerShell.sqlps" if (!(Test-Path $sqlpsreg -ErrorAction "SilentlyContinue")) { throw "SQL Server Powershell is not installed yet (part of SQLServer installation)." } $item = Get-ItemProperty $sqlpsreg $sqlpsPath = [System.IO.Path]::GetDirectoryName($item.Path) $assemblyList = @( "Microsoft.SqlServer.Smo", "Microsoft.SqlServer.SmoExtended", "Microsoft.SqlServer.Dmf", "Microsoft.SqlServer.WmiEnum", "Microsoft.SqlServer.SqlWmiManagement", "Microsoft.SqlServer.ConnectionInfo ", "Microsoft.SqlServer.Management.RegisteredServers", "Microsoft.SqlServer.Management.Sdk.Sfc", "Microsoft.SqlServer.SqlEnum", "Microsoft.SqlServer.RegSvrEnum", "Microsoft.SqlServer.ServiceBrokerEnum", "Microsoft.SqlServer.ConnectionInfoExtended", "Microsoft.SqlServer.Management.Collector", "Microsoft.SqlServer.Management.CollectorEnum" ) foreach ($assembly in $assemblyList) { $assembly = [System.Reflection.Assembly]::LoadWithPartialName($assembly) if ($assembly -eq $null) { Write-Host "`t`t($MyInvocation.InvocationName): Could not load $assembly" } } Set-Variable -scope Global -name SqlServerMaximumChildItems -Value 0 Set-Variable -scope Global -name SqlServerConnectionTimeout -Value 30 Set-Variable -scope Global -name SqlServerIncludeSystemObjects -Value $false Set-Variable -scope Global -name SqlServerMaximumTabCompletion -Value 1000 Push-Location if ((Get-PSSnapin -Name SqlServerProviderSnapin100 -ErrorAction SilentlyContinue) -eq $null) { cd $sqlpsPath Add-PsSnapin SqlServerProviderSnapin100 -ErrorAction Stop Add-PsSnapin SqlServerCmdletSnapin100 -ErrorAction Stop Update-TypeData -PrependPath SQLProvider.Types.ps1xml Update-FormatData -PrependPath SQLProvider.Format.ps1xml } } catch { Write-Host "`t`t$($MyInvocation.InvocationName): $_" } finally { Pop-Location } }
quelle
mit 2008 Server 2008 und 2008 R2
Add-PSSnapin -Name SqlServerCmdletSnapin100, SqlServerProviderSnapin100
mit 2012 und 2014
Push-Location Import-Module -Name SQLPS -DisableNameChecking Pop-Location
quelle