I have been working on a new version of my PowerShell script I use to export models to disk. I wanted to increment the build number each time a model was exported, so I started with my export script and added a single method and hooking things up.
The PowerShell method looks like this:
Function Update-Version ([string]$model, [string]$server, [string]$database, [int]$incrementBuildBy) { $manifest = Get-AXModelManifest -Server $server -Database $database -Model $model $manifestVersion = $manifest.Version $manifestVersionSplit = $manifestVersion.Split('.') $manifestVersionSplit[3] = $incrementBuildBy + $manifestVersionSplit[3] $ofs = "." $versionStr = [string] $manifestVersionSplit $manifestVersion = "Version=" + $versionStr Edit-AXModelManifest -Server $server -Database $database -Model $model -ManifestProperty $manifestVersion return $manifest }
Given this method I changed my export to look more like this:
$backupFilePath = New-BackupFolder($axBackupFolder) $models = Get-AXModel -Server $server -Database $database foreach ($model in $models) { $backupFileName = "" $elementCount = "" $nameToBackup = $model.Name.ToString() $layer = $model.Layer.ToString() $elementCount = $model.ElementCount.ToString() $versionStr = $model.Version.ToString() $backupFileName = $backupFilePath + "\" + $nameToBackup + ".axmodel" if ($layer.ToUpper().Contains($layerFilter.ToUpper()) -and $nameToBackup.ToUpper().Contains($modelFilter.ToUpper())) { Update-Version $nameToBackup $server $database $incrementBuildBy $backupFileName = $backupFilePath + "\" + $nameToBackup + "_" + $versionStr + ".axmodel" "Exporting " + $elementCount + " elements from " + $nameToBackup + "..." File-Backup $nameToBackup $backupFileName $server $database } else { "Skipping " + $backupFileName + " in layer " + $layer } } "Completed!"
The two other utility methods are simply like this:
Function New-BackUpFolder([string]$destinationFolder) { $dte = get-date $dte = $dte.tostring() -replace "[:\s/]", "." $backUpPath = "$destinationFolder" + $dte $null = New-Item -path $backUpPath -itemType directory return $backUpPath } Function File-Backup([string]$model, [string]$fileName, [string]$server, [string]$database) { Export-AXModel -Model $model -File $fileName -Server $server -Database $database }
So in order to wrap things up, all you need is to declare at the top a few variables:
$server = "mydbserver" $database = "MicrosoftDynamicsAx" $axBackupFolder = "c:\axModelBackup\" $modelFilter = "AwesomeApp" $layerFilter = "ISV" $incrementBuildBy = 1
And that's a wrap!
Great Post. Need your advice. In my current project, i am seeing two models created with the same name and when i try to get rid of one of them, it throws an error saying more than one model with the same name. Any idea?
ReplyDelete