27.02.2015, 14:00 | #1 |
Участник
|
This coffee break post illustrates how to search a text file for specific words or a phrase. You can do this with Windows PowerShell in any text files, but let's use some Dynamics NAV objects exported as text. Technically speaking we are reading a text file then piping it line for line through a search cmdlet, which pipes matching lines further to a log.txt file.
Coffee Break 5 - Searching through a Dynamics NAV text file Customer story: The developer wants an automated way of locating all occurrences of a string (table name, field name, comment, ...) in a country-specific version of Dynamics NAV, in this example the Norwegian version. And we will log the output of this search to a log file in c:NAVAppLog. Exporting objects from Dynamics NAV: Prerequisites: Crete a folder C:MyNAVApp with a subfolder Log so that the resulting full path is C:MyNAVAppLog. For this purpose we use the Microsoft Dynamics NAV Application Merge Utilities. Note that these install to the equivalent of C:Program Files (x86)Microsoft Dynamics NAV80RoleTailored Client. This time we don't need to import the Management module, only the application merge utilities: Import-Module "${env:ProgramFiles(x86)}Microsoft Dynamics NAV80RoleTailored ClientMicrosoft.Dynamics.Nav.Model.Tools.psd1"
$objectPath = 'C:MyNAVApp' $sourcepath = Join-Path $ObjectPath 'MyObjects' $NAVobjects = Join-Path $ObjectPath 'NAVobjects.txt' $LogPath = Join-Path $ObjectPath 'logwhereused.txt' #Note, a search string can also be an array of strings $SearchString = '”G/L Account”' Export the objects you like, either all objects: Export-NAVApplicationObject -DatabaseName "Demo Database NAV (8-0)" -DatabaseServer ".NAVDEMO" -Path $NAVObjectFile Or filter (choose the filter you like): $FilterString = "Version List=*NAVNO*" #or $FilterString = "Modified=Yes" Export-NAVApplicationObject -DatabaseName "Demo Database NAV (8-0)" -DatabaseServer ".NAVDEMO" -Path $NAVObjects -Filter $FilterString #Split into individual object files split-navapplicationobjectfile -Source $NAVobjects -Destination $sourcepath -PassThru -Force Now load the list of files in the folder. We're using the -File parameter with Get-ChildItem to limit the scope to files only (sub folders are not included). $myobjects = Get-ChildItem -Path $SourcePath -Filter *txt -File The next line shows a very simple way to read through all text files in the specified path (c:MyNAVApp) and for each file searches for the search string (in our case "G/L Account) and for each hit pipe the source line to the log file along with the line number. For this we will use the Select-String cmdlet, that can work directly on Objects with File Info (objects returned by calling Get-ChildItem cmdlet). $myobjects | Select-String $SearchString | Out-File –Filepath $LogPath Note that using the parameters and segments above implies that:
Jasminka Thunes, Escalation Engineer Dynamics NAV EMEA Lars Lohndorf-Larsen, Escalation Engineer Dynamics NAV EMEA Bas Graaf, Senior Software Engineer Dynamics NAV [img]//feeds.feedburner.com/~r/MicrosoftDynamicsNavTeamBlog/~4/Tg3z4-wtRgw[/img] Источник: http://feedproxy.google.com/~r/Micro...ject-file.aspx
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|