PowerShell: Compilerstapellauf

3. Dezember 2014 18:18

Mit dieser Funktion kann man durch 3 Ordner (DB_INDEX_NAV70 für NAV2013-Datenbanken, DB_INDEX_NAV71 für NAV2013R2-Datenbanken, DB_INDEX_NAV80 für NAV2015-Datenbanken) laufen, die jeweils die Namen der Datenbanken enthalten, die kompiliert werden sollen (im Beispiel ohne Dateierweiterung, es kann aber auch eine vorhanden sein, da nur der Basisdateiname weiterverwendet wird).
In der Beispielfunktion werden zwei 2 Servernamen verwendet, NAV2013-Datenbanken liegen auf KK-NB/SQL_NAV und NAV2013R2- und NAV2015-Datenbanken auf KK-NB/NAVDEMO, außerdem bei allen Datenbanken ein Versionslistenfilter *OPP*.

Die Basisfunktionen sind hier beschrieben.

Im jeweiligen Indexordner trägt man alle Datenbanken ein, die im Batch berücksichtigt werden sollen.
BeispielDatebankIndexOrdner.png


In der PowerShell wechselt man in den Ordner, wo die Indexordner liegen (C:\Batchcompiling).
Anzeige zur Laufzeit:
AnzeigezurLaufzeit.png

Nach dem Kompiliervorgang werden ab NAV 2013 R2 jeweils die navcommandresult.txt in dem Pfad abgelegt, der aus Server- und Datenbanknamen gebildet wird.
logfile.png




Code:
function CompileAllDatabases
{
# Note: There are 2 different server names in this example, also KK\NAVDEMO, it changes between CompileNAV70 and CompileNAV71
$ServerName = "KK-NB\SQL_NAV"
# Use your own filters and log file path here
$VersionListFilter = '"*OPP*"'
$ObjectFilter = "Version List=$VersionListFilter"
$WorkingFolder = "C:\Temp\BATCHCOMPILING"

  function CompileNAV70
    {
     [CmdletBinding()]param (
     [String]$WorkingFolder,
     [String]$Server,
     [String]$Database,
     [String]$Filter
    )

     $LogFile = "$WorkingFolder\$Server\$Database\navcommandresult.txt"
     if (Test-Path "$LogFile\navcommandresult.txt") {Remove-Item "$LogFile\navcommandresult.txt"}
 
     $NAVFolder = '"C:\Program Files (x86)\Microsoft Dynamics NAV\70\RoleTailored Client'
     $compilefinsqlcommand = """$NAVFolder\finsql.exe"" command=compileobjects,servername=$Server,database=$Database,logfile=$LogFile"
     if ($Filter -ne ""){$compilefinsqlcommand = "$compilefinsqlcommand,filter=$Filter"}
     $Command = $compilefinsqlcommand
     Write-Debug $Command
     cmd /c $Command
    }
   
  function CompileNAV71
      {
         [CmdletBinding()]param (
         [String]$WorkingFolder,
         [String]$Server,
         [String]$Database,
         [String]$Filter
        )

         $LogFile = "$WorkingFolder\$Server\$Database\navcommandresult.txt"
         if (Test-Path "$LogFile\navcommandresult.txt") {Remove-Item "$LogFile\navcommandresult.txt"}
     
         $NAVFolder = '"C:\Program Files (x86)\Microsoft Dynamics NAV\71\RoleTailored Client'
         $compilefinsqlcommand = """$NAVFolder\finsql.exe"" command=compileobjects,servername=$Server,database=$Database,logfile=$LogFile"
         if ($Filter -ne ""){$compilefinsqlcommand = "$compilefinsqlcommand,filter=$Filter"}
         $Command = $compilefinsqlcommand
         Write-Debug $Command
         cmd /c $Command
        }
  function CompileNAV80
    {
         [CmdletBinding()]param (
         [String]$WorkingFolder,
         [String]$Server,
         [String]$Database,
         [String]$Filter,
        [String]$Synchronize
        )


          $LogFile = "$WorkingFolder\$Server\$Database\navcommandresult.txt"
       
         if (Test-Path "$LogFile\navcommandresult.txt") {Remove-Item "$LogFile\navcommandresult.txt"}
     
         $NAVFolder = '"C:\Program Files (x86)\Microsoft Dynamics NAV\80\RoleTailored Client'
         $compilefinsqlcommand = """$NAVFolder\finsql.exe"" command=compileobjects,servername=$Server,database=$Database,logfile=$LogFile,synchronizeschemachanges=$Synchronize"
         if ($Filter -ne ""){$compilefinsqlcommand = "$compilefinsqlcommand,filter=$Filter"}
         $Command = $compilefinsqlcommand
         Write-Debug $Command
         cmd /c $Command
        }

  Get-ChildItem -Path .\DB_INDEX_NAV70\ |
   foreach `
   (
    {
     Write-host "Compiling objects in NAV 2013 database:" $_.Name
     $databasename = [System.IO.Path]::GetFileNameWithoutExtension($_.Name)   
     CompileNAV71 `
     -WorkingFolder $WorkingFolder `
     -Server $ServerName `
     -Database $databasename  `
     -Filter $ObjectFilter
    }
   )
  # Change of server name in this example, since the NAV 2013 R2 and NAV 2015 databases are located here
  $ServerName = "KK-NB\NAVDEMO"

  Get-ChildItem -Path .\DB_INDEX_NAV71\ |
  foreach `
   (
   {
   Write-host "Compiling objects in NAV 2013 R2 database:" $_.Name
   $databasename = [System.IO.Path]::GetFileNameWithoutExtension($_.Name)   
 
  CompileNAV71 `
   -WorkingFolder $WorkingFolder `
   -Server $ServerName `
   -Database $databasename  `
   -Filter $ObjectFilter
 
   } 
   
   )

  Get-ChildItem -Path .\DB_INDEX_NAV80\ |
  foreach `
   (
   {
   Write-host "Compiling objects in NAV 2015 database:" $_.Name
   $databasename = [System.IO.Path]::GetFileNameWithoutExtension($_.Name)   
 
   CompileNAV80 `
   -WorkingFolder $WorkingFolder `
   -Server $ServerName `
   -Database $databasename  `
   -Filter $ObjectFilter `
   -Synchronize 'No'
  }
)

}
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.