PowerShell: Objektstapelimporte

4. Dezember 2014 19:14

Mit dieser Funktion kann man durch 3 Ordner (DB_INDEX_NAV70DE für NAV2013-Datenbanken, DB_INDEX_NAV71DE für NAV2013R2-Datenbanken, DB_INDEX_NAV80DE für NAV2015-Datenbanken) laufen, die jeweils die Namen der Datenbanken enthalten, in die Objekte importiert werden sollen (im Beispiel ohne Dateierweiterung analog wie hier, es kann aber auch eine vorhanden sein, da nur der Basisdateiname weiterverwendet wird).
Diese Ordner sollten meist länderspezifisch mit den jeweiligen Datenbanknamen versorgt sein, damit man keine DE-Objekte in AT oder CH-Datenbanken oder umgekehrt einspielt, es sei denn, dass Universalobjekte z.B. für den internen Gebrauch in alle Datenbanken "eingepflanzt" werden sollen.

Die einzelnen Importfunktionen liegen hier.

Das Objektpaket, das importiert werden soll, muss dabei als einzige Datei im Importordner liegen. Dieses wird zur Laufzeit gesprüft, es wird nur importiert, wenn genau ein Paket vorhanden ist.
Ordnernamen hier: DB_IMPORT_NAV70DE, DB_IMPORT_NAV71DE und DB_IMPORT_NAV80DE.
BatchimportingImportFolder.png

$WorkingFolder,$ImportAction und $Synchronize (für NAV 2015) werden am Anfang der Funktion nach Bedarf gesetzt.
GrundparameterBatchImport.png

Anzeige zu Laufzeit:
ImportAnzeigezurLaufzeit.png

In der Beispielfunktion werden zwei 2 Servernamen verwendet, NAV2013-Datenbanken liegen auf KK-NB\SQL_NAV und NAV2013R2- sowie NAV2015-Datenbanken auf KK-NB\NAVDEMO.
Auschnitt vom Ende der Funktion
AuschnittImportFunktion.png

Code:
function ImportObjectPackToAllDatabases
{
# Use you own settings here:
$WorkingFolder = "C:\TEMP\BATCHIMPORTING"
$ImportAction = 'overwrite'
$Synchronize = 'No'

function ImportObjectsNAV70
{
 [CmdletBinding()]param (
 [String]$WorkingFolder,
 [String]$Server,
 [String]$Database,
 [String]$ImportFile,
 [String]$ImportAction   
)

 $ImportFile = $ImportFile.Trim("""")

 $LogFile = "$WorkingFolder\$Server\$Database\navcommandresult.txt"
 if (Test-Path "$LogFile\navcommandresult.txt") {Remove-Item "$LogFile\navcommandresult.txt"}
 if ($ObjectFile -ne "")
  {
   $NAVFolder = 'C:\Program Files (x86)\Microsoft Dynamics NAV\70\RoleTailored Client'
   $importfinsqlcommand = """$NAVFolder\finsql.exe"" command=importobjects, file=$ImportFile, servername=$Server, database=$Database,importAction=$ImportAction,logfile=$LogFile"
   $Command = $importfinsqlcommand
   Write-Debug $Command
   cmd /c $Command
  }
}

function ImportObjectsNAV71
{
 [CmdletBinding()]param (
 [String]$WorkingFolder,
 [String]$Server,
 [String]$Database,
 [String]$ImportFile,
 [String]$ImportAction   
)

 $ImportFile = $ImportFile.Trim("""")

 $LogFile = "$WorkingFolder\$Server\$Database\navcommandresult.txt"
 if (Test-Path "$LogFile\navcommandresult.txt") {Remove-Item "$LogFile\navcommandresult.txt"}
 if ($ObjectFile -ne "")
  {
   $NAVFolder = 'C:\Program Files (x86)\Microsoft Dynamics NAV\71\RoleTailored Client'
   $importfinsqlcommand = """$NAVFolder\finsql.exe"" command=importobjects, file=$ImportFile, servername=$Server, database=$Database,importAction=$ImportAction,logfile=$LogFile"
   $Command = $importfinsqlcommand
   Write-Debug $Command
   cmd /c $Command
  }
}

function ImportObjectsNAV80
{
 [CmdletBinding()]param (
 [String]$WorkingFolder,
 [String]$Server,
 [String]$Database,
 [String]$ImportFile,
 [String]$ImportAction,   
 [String]$Synchronize
 )

 $ImportFile = $ImportFile.Trim("""")

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

# Start of processing #########
$ServerName = "KK-NB\SQL_NAV"

$directoryInfo = Get-ChildItem -Path .\DB_IMPORT_NAV70DE\ | Measure-Object
IF ($directoryInfo.count -eq 1)
{
$ImportFile = Get-ChildItem -Path .\DB_IMPORT_NAV70DE\
Get-ChildItem -Path .\DB_INDEX_NAV70DE\ |
foreach `
(
  {
  Write-host "Importing $ImportFile objects to NAV 2013 database:" $_.Name
  $databasename = [System.IO.Path]::GetFileNameWithoutExtension($_.Name)   
   ImportObjectsNAV70 `
   -WorkingFolder $WorkingFolder `
   -Server $ServerName `
   -Database $databasename  `
   -ImportFile $ImportFile `
   -ImportAction $ImportAction
  }
)
}

$ServerName = "KK-NB\NAVDEMO"
$directoryInfo = Get-ChildItem -Path .\DB_IMPORT_NAV71DE\ | Measure-Object
IF ($directoryInfo.count -eq 1)
{
$ImportFile = Get-ChildItem -Path .\DB_IMPORT_NAV71DE\
Get-ChildItem -Path .\DB_INDEX_NAV71DE\ |
foreach `
(
  {
  Write-host "Importing $ImportFile objects to NAV 2013 R2 database:" $_.Name
  $databasename = [System.IO.Path]::GetFileNameWithoutExtension($_.Name)   
   ImportObjectsNAV71 `
   -WorkingFolder $WorkingFolder `
   -Server $ServerName `
   -Database $databasename  `
   -ImportFile $ImportFile `
   -ImportAction $ImportAction
  }
)
}
$directoryInfo = Get-ChildItem -Path .\DB_IMPORT_NAV80DE\ | Measure-Object
IF ($directoryInfo.count -eq 1)
 {
   $ImportFile = Get-ChildItem -Path .\DB_IMPORT_NAV80DE\
   Get-ChildItem -Path .\DB_INDEX_NAV80DE\ |
   foreach `
   (
     {
     Write-host "Importing $ImportFile objects to NAV 2015 database:" $_.Name
     $databasename = [System.IO.Path]::GetFileNameWithoutExtension($_.Name)   

   ImportObjectsNAV80 `
   -WorkingFolder $WorkingFolder `
   -Server $ServerName `
   -Database $databasename  `
   -ImportFile $ImportFile `
   -ImportAction $ImportAction `
    -Synchronize $Synchronize
   }
 )
}
}
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.