PowerShell: Datenbanknamen als Dateinamen auslesen

Bild Tipps & Tricks zu den Dynamics NAV Versionen
Hier bitte keine Fragen stellen, sondern nur bereits vorhandene Tricks veröffentlichen.
Forumsregeln
Impressum • Community-Knigge • Nutzungsbedingungen • Datenschutzrichtlinie
Hier bitte keine Fragen stellen, sondern nur bereits vorhandene Tricks veröffentlichen.

PowerShell: Datenbanknamen als Dateinamen auslesen

Beitragvon Kowa » 23. Dezember 2014 11:19

Mit dieser Funktion kann man über das SQL Server Management Studio die Datenbanknamen als Dateinamen in einem Indexordner anlegen, um damit Stapelverarbeitungen durchführen zu können.
Anwendungsfälle sind z.B. Objektstapelimporte oder Compilerläufe.

Hiermit können dann die betroffenen Datenbanken für die jeweilig anstehenden Stapelverarbeitungen schnell zusammengestellt werden.
So sieht die Datenbankliste fĂĽr den im Beispiel verwendeten Server bei mir lokal aus:
ExtractDatabaseNames4.png
ExtractDatabaseNames4.png (12.76 KiB) 740-mal betrachtet

Die Systemdatenbanken und einige andere "Spielwiesen" sollen dabei ĂĽbergangen werden, damit nur die relevanten Datenbanknamen berĂĽcksichtigt werden.

In der Powershell wechselt man in den Ordner, der nach AusfĂĽhrung die Dateinamen enthalten soll, und ruft dann die Funktion mitsamt dem Servernamen auf.

ExtractDatabaseNames1.png


Der Servername wird dabei in die automatische $args-Variable ĂĽbergeben.
Accepting Arguments for PowerShell Functions: Best Practices

In der Beispielfunktion werden die Datenbanknamen ĂĽber
Code: Alles auswählen
$filename.StartsWith('NAV'))

gefiltert, hier kann man nach Bedarf die eigenen Filter anwenden.
Andere Möglichkeiten an dieser Stelle wären z.B.
  • $filename.Substring
  • $filename.Contains
  • $filename.EndsWith

Ausgabe zur Laufzeit, angezeigt werden alle Datenbanknamen, als Datei angelegt werden nur die gefilterten, hier alle die mit "NAV" beginnen.
ExtractDatabaseNames2.png

Ausschnitt aus den durch die Funktion angelegten Dateien im aktuellen Ordner.
ExtractDatabaseNames3.png


Funktionscode
ExtractDatabaseNamesFunction.png


Code: Alles auswählen
function ExtractNAVDatabaseNames
{
    #Connect and run a command using SMO
    [reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
    #  $args = Servername
   $sqlServer = new-object ("Microsoft.SqlServer.Management.Smo.Server") $args
    foreach($sqlDatabase in $sqlServer.databases)
    {
    $sqlDatabase.name
    $filename = $sqlDatabase.name.ToString()
    # use own filtering here
    if  ($filename.StartsWith('NAV'))
      {New-Item $filename -type file -force}
    }
}
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7835
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

ZurĂĽck zu NAV Tipps & Tricks

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast