09.06.2015, 13:00 | #1 |
Участник
|
This time, we will look at a couple of ways you can use Windows PowerShell to handle files. Either for the purpose of checking file versions without having to ask users, or as an example here we will look at some ideas for applying an update automatically. Please note that the intention with this post is not to provide you with a tool or process of deploying updates, but to get you familiar with the potential of Windows PowerShell using some real-life scenario (as real as they get from a Support perspective).
Check file version To read file properties in order to find out which build and version of the Dynamics NAV Windows client is installed, we can create a FileSystemObject and get the version with these commands: $fso = New-Object -ComObject "Scripting.FileSystemObject" $fso.GetFileVersion("${env:ProgramFiles(x86)}Microsoft Dynamics NAV80RoleTailored ClientMicrosoft.Dynamics.Nav.Client.exe") Or, we can do the same in a simpler way: Get-Item "${env:ProgramFiles(x86)}Microsoft Dynamics NAV80RoleTailored ClientMicrosoft.Dynamics.Nav.Client.exe” | % VersionInfo | % ProductVersion Or in the case that the NAV client is not installed in program files: (Get-ItemProperty 'HKLM:SOFTWAREWow6432NodeMicrosoftMicrosoft Dynamics NAV80RoleTailored Client').Path # Or equivalent for a 32-bit machine Now let's create a PSSession object so we can remote into it and run the check on remote user(s) machine(s). Note that the actual script we run is exactly the same as shown above - just run in a PSSession. $RemoteMachineName = "UsersMachine" $PSSession = New-PSSession $RemoteMachineName Invoke-Command -Session $PSSession -ScriptBlock{Get-Item "${env:ProgramFiles(x86)}Microsoft Dynamics NAV80RoleTailored ClientMicrosoft.Dynamics.Nav.Client.exe” | % VersionInfo | % ProductVersion} For more details about Remoting, including extending remoting to a VM in the Azure cloud, see the Windows PowerShellRemoting coffee break. Download and unzip latest cumulative update If you don't use the Dynamics NAV image in the Azure marketplace, check this blog for the latest cumulative update. For example, choose the "NAV 2015" tag as in this URL: http://blogs.msdn.com/b/nav/archive/...ment/nav+2015/ In this example, we have downloaded Cumulative Update 7 (483510_intl_i386_zip.exe) to disk. $UpdateFile = "C:UpdatesCU7483510_intl_i386_zip.exe" Our downloads are stamped with an extra stream, so in case Microsoft is not in your list of trusted sites, remember to unblock it (or the next steps will fail): Unblock-File $UpdateFile For tips on how to (un)zip files using PowerShell, and many other useful tips and scripts, check the excellent PowerShell blog: Hey, Scripting Guy!Blog To unzip files, we'll use the archiving capabilities delivered with .NET framework 4.5 (this will not work with earlier .NET Versions). You can find more details about this library here: https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx To load the assembly, run this command: Add-Type -assembly "system.io.compression.filesystem" $Destination = "C:tempHotfix" [io.compression.zipfile]::ExtractToDirectory($UpdateFile,$destination) This zip file contains another zip file, so extract that in the same way $UpdateFile = "C:tempHotfixNAV.8.0.40938.W1.DVD.zip" [io.compression.zipfile]::ExtractToDirectory($UpdateFile,$destination) Check file date stamps Find the date stamp of your Microsoft.Dynamics.Nav.Client.exe (of course this can also be remoted): $lastupdate = Get-Item -path "${env:ProgramFiles(x86)}Microsoft Dynamics NAV80RoleTailored ClientMicrosoft.Dynamics.Nav.Client.exe" | % LastWriteTime $lastupdate Or check a whole folder: $lastupdate = (get-childitem -path "${env:ProgramFiles(x86)}Microsoft Dynamics NAV80RoleTailored Client").LastWriteTime $lastupdate #Notice that this is now an array of dates as opposed to a single date so we pipe it $lastupdate = $lastupdate | Sort-Object DateTime -Descending | Select-Object -Last 1 Copy newer files from the Cumulative Update Find newer files: $UpdateFolder = "C:tempHotfixRoleTailoredClientprogram filesMicrosoft Dynamics NAV80RoleTailored Client" get-childitem -path $UpdateFolder –recurse | where-object lastwritetime -gt $lastupdate And finally pipe them to the destination folder: $ClientFolder = "${env:ProgramFiles(x86)}Microsoft Dynamics NAV80RoleTailored Client" or use the absolute path (and equivalent for each component): $ClientFolder = (Get-ItemProperty 'HKLM:SOFTWAREWow6432NodeMicrosoftMicrosoft Dynamics NAV80RoleTailored Client').Path #Notice that the above is the path of NAV Client installed on a x64 machine). get-childitem -path $UpdateFolder | where-object {$_.lastwritetime -gt $lastupdate} | Copy-Item -Destination $ClientFolder There are lots of things we haven't considered here, like what if the client is in use, how to handle the rest of the update (Microsoft Dynamics Nav Server and so on), but again, this is not meant as a tool or a step-by-step process, merely an illustration of some of the ways we have for manipulating files, using PowerShell. Jasminka Thunes, Escalation Engineer Dynamics NAV EMEA Lars Lohndorf-Larsen, Escalation Engineer Dynamics NAV EMEA Bas Graaf, Senior Software Engineer Dynamics NAV Источник: http://feedproxy.google.com/~r/Micro...owershell.aspx
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|