[Changelog]

opsi-script (4.12.17.2-6)
  Fixes:
    - GetProductPropertyList(<propertyname>,<default_value>): now correctly works with opsiconfd >= 4.3.28.15
    Updates:
    - openssl version to 3.0.16

-- j.werner <j.werner@uib.de> 13 February 2025

opsi-script (4.12.17.1-6)
  Fixes:
    - Logging: do not log product property states on lower log level than 9 during startup due to potential confidential content.
    - JSON handling: improvements in JSON handling for large and complex JSON strings including lot of special chars 

-- j.werner <j.werner@uib.de> 22 January 2025


opsi-script (4.12.17.0-6)
  Fixes:
    - powershellcall/ExecWith powershell: avoid output with one empty string in stringlist also for a internal function may used in very rare cases 
 Updates:
   - increased performance (in some cases) while patching user profiles [W]
   - opsiscript lib: uib_exitcode.opsiscript now also handles winget exitcodes, function isWingetExitcodeFatal  

-- j.werner <j.werner@uib.de> 28 October 2024


opsi-script (4.12.16.1-6)
  Fixes:
    - powershellcall/ExecWith powershell output: avoid output with one empty string in stringlist

-- d.oertel <d.oertel@uib.de> 13 September 2024

opsi-script (4.12.16.0-6)
  Updates:
    - openssl version to 3.0.15

-- j.werner <j.werner@uib.de> 04 September 2024


opsi-script (4.12.16.0-5) urgency=medium
  Fixes:
    - sleepseconds: better handling of syntax and runtime errors
    - powershellcall/ExecWith powershell:  approvments in runnning of powershell
        commands on machines were the powershell execution policy is "Restricted" or "AllSigned" or "RemoteSigned"
    - HasMinimumSpace for Linux and macOS:
        if drive name is empty the actual dir "." is used, 
        if incorrectly %SYSTEMDRIVE% is used a warning is logged and as fallback the root dir: "/" is used
  Changes: 
    - logging: for more clarity we remove logging indents and set the log level for (IF-)conditions to "Debug2"

-- j.werner <j.werner@uib.de> 08 August 2024


opsi-script (4.12.15.4-5) urgency=medium
  Fixes:
    - an issue in connection with opsi-auto-update
    - jsonAsArrayToStringList, stringListToJsonArray: more robust conversion of JSON array from / to string list
    - testsyntax: sleepseconds - no parameter error message in testsyntax mode
    - files section: more reliable deleting of files under windows

-- j.werner <j.werner@uib.de> 17 July 2024

opsi-script (4.12.15.3-5) urgency=medium
  Fixes:
    - an error in the former hotfix (4.12.15.2-5) for High DPI screens

-- j.werner <j.werner@uib.de> 01 July 2024

opsi-script (4.12.15.2-5) urgency=medium
  Fixes:
    - BatchGUI was not displayed correctly on High DPI screens

-- j.werner <j.werner@uib.de> 27 June 2024

opsi-script (4.12.15.1-5) urgency=medium
  Fixes:
    - message in BatchGUI was not displayed correctly

-- j.werner <j.werner@uib.de> 19 June 2024

opsi-script (4.12.15.0-5) urgency=medium
  Fixes:
    - in some circumstances powershellcalls/ExecWith powershell does not work
      if powershell execution policy was set by "UserPolicy" to "AllSigned" or "Restricted"
    - TOML file handling: now correctly escape backslash
  Updates:
    - openssl version to 3.0.14
    - used openssl version is logged  

-- j.werner <j.werner@uib.de> 13 June 2024

opsi-script (4.12.14.1-5) urgency=medium
  Fixes:
    - opsi-template-with-userlogin: the fqdn/clientdID is no longer empty

-- j.werner <j.werner@uib.de> 24 April 2024

opsi-script (4.12.14.0-5) urgency=medium
  Fixes:
    - uib_reboot_lib.opsiscript: fix in prepare_uefi_boot_to for Linux
  Changes:
    - opsiservicecall now specifies its own user agent: ProductID + ' (opsiservicecall:<typeofcall>)'
  Updates:
    - uib opsiscript libs to version 4.12.14.0
    - uib_state_and_condition.opsiscript: Update for deffunc isRebootPending(), new reg keys; documentation

-- j.werner <j.werner@uib.de> 12 April 2024

opsi-script (4.12.13.0-5) urgency=medium
  Fixes:
    - getMyIpByTarget on MacOS
    - problem with backslash(\) in a comment
    - Files section: "unzipfile" now handles UTF8 filenames in zip archives correct
  Changes:
    - update the progress during product processing for action requests uninstall and always
    - isFatalError: additional log the error message in the logfile
    - Registry section: improvments regarding modifier AllUserProfiles(former AllNTUserDats) and for user logging scripts
  Updates:
    - opsi-script logging at startup now contains compile date information
    - Files section: unzipfile comment has a new parameter encoding
    - ExecWith section: now works with pwsh or pwsh.exe
    - FileExists-functions: log resulting filename

-- j.werner <j.werner@uib.de> 9 February 2024


opsi-script (4.12.12.1) urgency=medium
  Fixes:
    - opsiservicecall: using modifiers opsiclientd/opsiclientd-once now work also on Unix systems [L/M]

-- j.werner <j.werner@uib.de> 9 November 2023


opsi-script (4.12.12.0) urgency=medium
  Fixes:
    - local user profiles: patch local NTUSER.dat also if logged-in user could not be determined [W]
    - event silent install: show an individual error message in report
    - opsi-script will no longer run in an exception, if the setActionProgress command is used and no service is available
  Changes: 
    - powershellcall: improve robustness (ExecutionPolicy handling, old powershell versions) [W]
    - use new opsi 4.3 API method "configState_getValues" to read configs from service (opsi 4.3)
    - remove/replace deprecated API methods (opsi 4.3) 
  Updates: 
    - fpTOML library to new version (https://github.com/genericptr/fpTOML)
    - uib opsiscript libs to version 4.12.12.0

-- j.werner <j.werner@uib.de> 3 November 2023


opsi-script (4.12.11.1) urgency=medium
  Changes:
    updated graphics to new design
    Custom skin file handling

-- d.oertel <d.oertel@uib.de> 22 September 2023


opsi-script (4.12.11.0) urgency=medium

  Fixes:
    correct logviewer paths
  Changes:
    update ssl version to openssl 3
    use new product sorting algorithm (only opsi 4.3)
    update translations

-- j.werner <j.werner@uib.de> 21 July 2023

opsi-script (4.12.10.0) urgency=medium

  Fixes:
    Primary sections: fix subrelease in getLinuxVersionMap [L]
    Registry: do not create key Wow6432Node if writing in key HKCU/Software on 64 systems [W]
  Changes:
    Turn the fatal error in case of no or an empty actions section into a warning with improved description
  New:
    Files section: we prevent the deletion of the program files directories 'C:\Program Files\' and 'C:\Program Files (x86)\' [W]
    LinkFolder section: delete_element can now also delete url links if the link name ends on '.url'
    Registry section: allow modifier name '/AllUserProfiles' in addition to '/AllNTUserDats‘ [W]
    ShellInAnIcon/DosInAnIcon/ShellBatch/DosBatch sections: unify sections with 'ShellScript' as new name. The old names are discouraged.
    Logging: opsi-script log header now shows 'MS Windows 11.0 (10.0)' as version on Windows 11 operating systems [W]

-- j.werner <j.werner@uib.de> 14 June 2023


opsi-script (4.12.9.1) urgency=medium

  Fixes:
    Empty (property) values from service are now handled correct.

-- j.werner <j.werner@uib.de> 14 April 2023


opsi-script (4.12.9.0) urgency=medium

  Fixes:
    remove possible memory leaks
    remove TQProgressBar to fix memory leaks
    fix in handling profiles, avoid empty string in the profilelist [W]

  Changes:
    replace deprecated API methods, adaptations for opsi 4.3

-- j.werner <j.werner@uib.de> 11 April 2023


opsi-script (4.12.8.1) urgency=medium

  Fixes:
    fix a problem in BatchGUI related to user login scripts.
    fix in FileGetWriteAccess, only set rigths for the current director but not for any subdirectories and files within

-- j.werner <j.werner@uib.de> 03 April 2023


opsi-script (4.12.8.0) urgency=medium

  Fixes:
    removeFromListByContaining: Correct removing of the last element from the list.
    TOML files: Fix that all boolean values are lower case after modifications to match TOML syntax.
    Actions section: Log an error if an actions section is expected but not found.

  New:
    General:
      High DPI support for BatchGUI.
      opsi-script for aarch64 (raspi 64 bit). EXPERIMENTAL!
    Sections:
      Primary sections: New script statement 'setdebug_lib' to set/change the config opsi-script.global.debug_lib within your script.
      LinkFolder: delete_subfolder, better error reporting on non win32 systems.

-- j.werner <j.werner@uib.de> 17 March 2023


opsi-script (4.12.7.5-3) urgency=medium

  Fix:
    Syntax Check:
      - include_insert/include_append: if the include file is not found, the script is not set to failed in testsyntax mode anymore.
      - WinBatch/DosBatch: if timeoutseconds is not an integer, the script is not set to failed in testsyntax mode anymore.
      - ShowBitmap (only on windows): if a slash in the parameter string without number is given, the script is not set to failed in testsyntax mode anymore, because it could be unix code (with a unix path)
    opsi-script libs [W/L/M]:
      - uib_lin_install.opsiscript: fixes in installupdates(), linuxRemoveOneOf($packagelist$ : stringlist) : string, cleanupPackageSystem()


-- j.werner <j.werner@uib.de> 4 January 2023

opsi-script (4.12.7.4-3) urgency=medium

  Fix:
    Registry section [W]:
      - exportformat: hexdecimal values are now handled correctly.

-- j.werner <j.werner@uib.de> 14 December 2022


opsi-script (4.12.7.3-3) urgency=medium

  Fix:
    Registry section [W]:
      - exportformat: hexdecimal values with letters throw no syntax errors anymore.
    opsi-script libs [M]:
      - uib_macosinstalllib.opsiscript: fixes whitespace handling in deffunc install_macos_app($myapp$ : string) : string.

-- j.werner <j.werner@uib.de> 14 December 2022


opsi-script (4.12.7.2-3) urgency=medium
  New:
    Parser [W/L/M]:
    - Syntax Check: if testsyntax is set (via config or opsi-script-gui -> Button Test Syntax)
      only the syntax of the script is tested. The script is not excecuted.
  Fixes:
    Parser [W/L/M]:
     - fix in OpsiServiceCall section
    xml2 [W]:
     - attribute sequence
     - makeNodePathWithTextContent:
       - additional parameter for strictmode
       - use strictmode parameter for node creation
    LinkFolder [W/L/M]:
     - In DeleteShellLink use GetSpecialFolderPath instead of hard-coded path to handle all kinds of base folders

-- j.werner <j.werner@uib.de> 05 Dec 2022



opsi-script (4.12.6.2-3) urgency=high

Fixes:
  WinBatch, DOSBatch/ShellBatch/DOSInAnIcon/ShellInAnIcon [W]: fix in WaitForProcessEnding.

-- j.werner <j.werner@uib.de> 19 Oct 2022


opsi-script (4.12.6.1-3) urgency=medium
  New:
    Registry section [W]:
      - We support the data type QWord.
      - New command "deleteListEntries" to remove entries from list variables.
    Files section [L]: copy -u for Linux.
    Functions:
      - HashFromFile(<file>,<hash algorithm>) [W/L/M]: Supporting about 80 hashing algorithms.
      - GetValueFromIniFile (<file>, <section>, <key>, <defaultvalue>, [<encoding>]) [W/L/M]: new optional encoding parameter.
    EXPERIMENTAL:
      Statement reloadProductList [W/L/M]: Product list from the opsi-server can now be reloaded into ospi-script without the need of a reboot.
      The reload occured after finishing the script in which reloadProductList is called.

  Fixes:
    Interpreter [W/L/M]: If the script could not be loaded the product is not set to successful anymore.
    External processes[L/M]: at unix the exicodes also from child processes are caught to avoid zombies.
    Actions section [W/L/M]:
      - Parse and evaluate generic stringlist equal to createStringList for correct functionality.
      - Generic string list definition works the same way as the function createStringList now.
      - Throw an error if a variable is defined twice outside of defined functions.
    Files section [W/L/M]:
      - del command now deletes any file including hidden files.

  Changes:
    Actions section [W/L/M]:
      - direct initialization of variables (string and stringlist) works similar to 'set' now, e.g. logging.
    Registry section [W]:
      - synchronize data type handling with the documentation, i.e. supp does not change data types.
    Functions:
      - md5fromFile(<file>) [W/L/M]: now uses internally the new function HashFromFile.

-- j.werner <j.werner@uib.de> 31 Aug 2022


opsi-script (4.12.5.6-3) urgency=high

 Fixes:
   Files section: del command with empty string e.g. del -sf "" does not create an exception anymore, gives only a warning

-- j.werner <j.werner@uib.de> 14 July 2022

opsi-script (4.12.5.5-3) urgency=medium

 Fixes:
   getLinuxVersionMap/getLinuxDistroType now correctly work on new linux distributions where lsb_release does not work anymore

-- j.werner <j.werner@uib.de> 14 July 2022

opsi-script (4.12.5.4-3) urgency=low

  Fixes:
    config opsi-script.global.writeProductLogFile is created as boolean also if config opsi-script.global.writeProductLogFile already exists but with wrong type

-- j.werner <j.werner@uib.de> 29 June 2022

opsi-script (4.12.5.4-2) urgency=low

  Fixes:
    powershellcall with no access string given resulted in an empty modifier instead of the default 'sysnative'
    config opsi-script.global.writeProductLogFile is created as boolean.

-- j.werner <j.werner@uib.de> 22 June 2022

opsi-script (4.12.5.3-1) urgency=low

  Changes:
    * powershellCall [W]: execution of powershellcall with powershell.exe -ExecutionPolicy ByPass

-- j.werner <j.werner@uib.de> 09 June 2022

opsi-script (4.12.5.2-1) urgency=low

  Fixes:
    * webservice [M]: fix on openssl. Openssl units from opsi-script 4.12.5.1 did not work correctly on MacOS.
    * files section [W/L/M]: handle division by zero if files to zip are empty
    * powershellCall [W]: correction for powershellcall without assignment

-- j.werner <j.werner@uib.de> 09 June 2022

opsi-script (4.12.5.1-1) urgency=low

  New:
    * Patches section [W]: support %userprofiledir% inside of patches section.
    * Files section [L]: Command CHMOD with mode formats 'ugo=+-rwx' and '-rwxrwxrwx'
        and with parameter '/AllSubFiles'.
    * functions for TOML files handling [W/L/M]:
        LoadTOMLFile(<TOMLfilePath>): StringList,
        GetTOMLAsStringList(<TOMLcontents>): StringList,
        GetTOMLKeys(<TOMLcontents>): StringList,
        GetTOMLTableNames(<TOMLcontents): StringList,
        GetTOMLTable(<TOMLcontents>, <table>): StringList,
        ReadTOMLFile (<TOMLfilePath>): String,
        GetTOMLAsString(<TOMLcontents>): String,
        GetTOMLTableAsString(<TOMLcontents>, <table>): String,
        GetValueFromTOML(<TOMLcontents>, <keyPath>, <defaultValue>): String,
        ModifyTOML(<TOMLcontents>, <command>, <keyPath>, <value>): String,
        DeleteTableFromTOML(<TOMLcontents>, <tablePath>): String,
        ConvertTOMLtoJSON(<TOMLcontents>): String,
        SaveToTOMLFile (<TOMLcontents>, <TOMLfilePath>) : boolean,
        ConvertTOMLfileToJSONfile(<TOMLfilePath>, <JSONfilePath>): boolean.
    * GetRegistry functions [W]:
        getRegistryKeyList(<regkey>, <access str>),
        getRegistryVarList(<regkey>, <access str>),
        getRegistryVarMap(<regkey>, <access str>).
    * defined functions [W/L/M]: support string concatenation in call of defined functions.

  Changes:
    * openssl [W]: update openssl on Windows to version 1.1.1n.
    * webservice [W/L/M]: improved debugging and error handling.
    * getWinProcessList [W]: use wincp2utf8 to reencode results.

  Fixes:
    * PowershellCall [W]: now shows output also for piped commands e.g. powershellCall("Get-hotfix | Select HotfixId").
        Neverthless be carefull using piped commands in powershellCall!
    * Files section [W/L/M]: "del" now works with wildcards.
    * Registry section [W]: "deletekey" now handles umlauts correctly.
    * Comment [W/L/M]: Syntax errors in comments were ignored so far, now they will throw a syntax error.
    * isProcessChildOf [W/L/M]: avoiding of an endless loop (hanging) which might occur under certain circumstances.
    * sub <file name> [W/L/M]: spaces in front of the lines of a sub file will not be removed any more
    	(so that e.g. python code in an ExecWith section keeps its syntax).
    * opsiservicecall [W/L/M]: support newline and tab.
    * oswebservice: correct detection of opsi 4.0/4.1 (necessary for establishing the connection)

-- j.werner <j.werner@uib.de> 25 Mai 2022


opsi-script (4.12.4.37-1) stable; urgency=low

  * osparser: new global constant %opsiUsertmpDir%; implements #4496
  * osparser: allow json value syntax in params in opsiServiceCall:
    i.e. numeric/boolean values, arrays, objects and null without quotes; implements #4705
  * oscertificates: finalize function for linux /mac:
    function pemfileToSystemStore(filename: string): boolean;
    function removeCertFromSystemStore(labelstr: string): boolean;
    function listCertificatesFromSystemStore(): TStringList;
    function isCertInstalledInSystemStore(labelstr: string): boolean;
  * new function isCertInstalledInSystem(<label>): boolean; [WLM]
  * new function importCertToSystem(<filename>): noresult;  [WLM]
  * new function removeCertFromSystem(<label>): noresult;  [WLM]
  * new function listCertificatesFromSystem: stringlist;  [WLM]
  * new command ELSEIF <condition>  [WLM]
  * opsparser: implement elseif
  * opsparser: A more detailed description how the If / ELSE / ELSEIF / ENDIF parser works
  * interacticve GUI: Button "View Log" now shows the log in the opsi-logviewer [W/L]
  * killtask (fix): a process of another user can be killed if opsi-script is running as SYSTEM [W]
  * osnetworkcalculator: fixes at cidrToNetmask
  * osnetworkcalculator: new function netmaskToCidr(netmask: string): string;
  * new function cidrToNetmask(<string>): string;  [WLM]
  * new function netmaskToCidr(<string>): string;  [WLM]
  * osparser: new global constant %FQDN% for fqdn in network (not opsi service) context; implements #4554
  * osparser: fix occasionally access violation when using getReturnListFromSection/getOutStreamFromSection

-- d.oertel <d.oertel@uib.de> Tue, 01 Feb 2022 15:00


opsi-script (4.12.4.36-2) stable; urgency=low

  * library uib_lin_install: remove "--no-install-recommends" from debinstall

-- d.oertel <d.oertel@uib.de> Tue, 08 Feb 2022 15:00


opsi-script (4.12.4.36-1) stable; urgency=low

  * oszip: show progressbar while zipping or unzipping files
  * oswebservice: getOpsiModules: integrate new backend_getLicensingInfo method with fallback to old backend_info
  * oswebservice: retrieveJSONObject: retry on other communication mode only on 400- bad request result
  * oswebservice: retrieveJSONObjectByHttpPost: retry on other communication mode only on 400- bad request result
  * oswebservice: getOpsiModules: Legal notice to our license protection
  * osfunclin: linIsUefi: implemented uefi test for linux
  * boolean function runningOnUefi now also supports linux
  * updated unit uSMBIOS (TSMBIOS) (https://code.google.com/p/tsmbios/)
  * uSMBIOS: with fix https://github.com/RRUZ/tsmbios/issues/15
  * osparser: fix %Systemroot% and %SystemDrive% for terminal servers ; references #4711
  * oswebservice: better opsi 4.0 compatibility by investigating the server response
  * osurlparser: createUrl: initialize uriobj.HasAuthority

-- d.oertel <d.oertel@uib.de> Wed, 19 Jan 2022 15:00

opsi-script (4.12.4.35) stable; urgency=low

  * osparser: getMSVersionMap: remove double ReleaseID=
  * osparser: executeWith: AllSigned Hack: use:
        "Get-Content -Path '+ tempfilename +' | Out-String | Invoke-Expression"
  * osparser: new function getMSVersionName: string
  * oslinmount: replace getGeneralConfigValue by configState_getObjects
  * osprocesses: new isProcessChildOf(searchproc,parentproc: string): boolean;
  * new boolean opsi-script function: isProcessChildOf(<searchprocstr>, <parentprocstr>): bool;
    implemented for WLM
  * new opsi-script constant %opsiscriptprocname% represents the name of the
    just running opsi-script process (opsi-script.exe, opsi-script, opsi-script-gui)
    changes in opsiconf, osparser, opsiscript.lpr
  * write now component logs to subdir 'lastprodlogs'
  * osprocesses: isProcessChildOf also for win64
  * oswebservice: sendlog: fix boolean values for append at log_write
  * osfunclin: getProfilesDirListLin fix non standard lines from getent passwd
  * osparser: executewith: powershell: remove a trailing '-file' from programparas
  * osGUIcontrol: skindirectoryDevelopment = '../../../skin';
  * osGUIcontrol: Linux: skindirectoryCompatibility = '/opt/opsi-script/skin';

-- d.oertel <d.oertel@uib.de> Tue, 04 Jan 2022 15:00

opsi-script (4.12.4.34) stable; urgency=low

  * oszip: catch exceptions
  * osparser: fix callingsection parameter in call of SearchForSectionLines
    from producestringlist:getOutstreamFromSection / getReturnlistFromSection
  * powershell AllSigned Hack: type tmpfile | powershell -command -
    will be switched on automatically if AllSigned is detected.
    Additional parameters (to script or powershell) will be ignored in this case.
  * oslog: new property WriteComponentFile. if true a logfile for every component (product)
    is (re)written.
  * osconf: new config: opsi-script.global.writeProductLogFile (default=false)
  * oslog: changed histrory line to:
    'handled: <productid> Version: <versiion> Request: <request> Result: <result>
  * osparser: opsiservicecall: new line allowed: "timeout" : <int>
  * oswebservice: TOpsiMethodCall has now property timeout

-- d.oertel <d.oertel@uib.de> Wed, 15 Dec 2021 15:00

opsi-script (4.12.4.33) stable; urgency=low

  * osparser: more debug logs in getFileInfoMap
  * osparser: getFileInfoMap: a fix at PredefinedStrings

-- d.oertel <d.oertel@uib.de> Fri, 03 Dec 2021 15:00

opsi-script (4.12.4.32) stable; urgency=low

  * osparser: files section: unzip create target dir
  * added unit oscertificates
  * new void function ImportCertToSystem(<cert file name>)
  * oscertificates: add functions for linux /mac
  * osfunclin: getPackageLock: fix for zypper, general fix
  * ostxstinglist: new method: getStringValueWithDefault
  * GetProductProperty: if no service context, tries to find property in %scriptpah%/properties.conf
  * GetProductPropertyList: if no service context, tries to find property in %scriptpath%/properties.conf
  * new: stringlist literals in json style are allowed now (set $list$ = '["he","ho"]')
  * fix overwrite GUI messages by standard skinreload from  doAktionen
  * new: allow after DefVar inital value: defvar $str$ = "huhu"
  * new: allow after DefStringlist inital value: defstringlist $list$ = '["he","ho"]'

-- d.oertel <d.oertel@uib.de> Fri, 19 Nov 2021 15:00

opsi-script (4.12.4.31) stable; urgency=low

  * osfunc: AllCopyRecursive: for better performance:
        doNotChangeAccessRights: boolean = True;
  * osparser: executeWith: enable runasloggedonuser
  * osfilehelper: MakeBakFiles: correct format mask for log backups
  * osparser: files section: move / rename: allow also for directories

-- d.oertel <d.oertel@uib.de> Tue, 16 Nov 2021 15:00

opsi-script (4.12.4.30-2) stable; urgency=low

 * opsi-script.exe codesigned

-- j.werner <j.werner@uib.de> Fri, 05 Nov 2021 12:23

opsi-script (4.12.4.30-1) stable; urgency=low

 * osfuncwin: fixed that opsi-script crashed if Windows API function GetFirmwareType is not available in kernel32.dll
   (for example on Windows 7/ Windows Server 2008)

-- j.werner <j.werner@uib.de> Wed, 27 Oct 2021 12:22


opsi-script (4.12.4.29) stable; urgency=low

 * osfuncwin: WinIsUefi uses new function GetBiosMode if Windows Verison >= Windows10.
    This function calls the Windows API function GetFirmwareType to detect Bios mode
 * osparser: doLDAPSearch: callLDAP: if port 636 then use ssl
 * remove ldapsend.pas from opsi-script dir (use from synapse)
 * osfilehelper: MakeBakFiles: use two digit rotation numbers if log_rotation_count > 9
                               use three digit rotation numbers if log_rotation_count > 99
 * osconf: configuration: log_rotation_count (default = 8)  (max=999
   will need new config: opsi-script.global.log_rotation_count to change (allowed 0 - 999)
 * osfuncwin: getW10Release: Fixes detection of w10 release > 2009 (21h1) ; fixes #4665
   getW10Release is now also called from osparser

-- d.oertel <d.oertel@uib.de> Mon, 18 Oct 2021 15:00

opsi-script (4.12.4.28) stable; urgency=low

 * osparser: do XMLPatch2Main: new xml2-section commands:
    * setNodePair <keyNodeName> <keyNodeTextContent> <valueNodeName> <valueNodeTextContent>
      used for Apple info.plist
 * osxmlsections: TuibXMLDocument: new:
    setNodePair(keyNodeName: string; keyNodeTextContent: string;
      valueNodeName: string; valueNodeTextContent: string): boolean;
 * Execwith: if there is a parameter '/HookScript <path to script file>',
   then the existing 'script file' will be called with the temporary file
   as parameter before passing it to the interpreter.
   The call of the hookscript has a 40 sec Timeout
 * osfunc: additional log at FileCheckDate
 * DPI awareness True/PM_V2
 * osparser: doAktionen: FBatchOberflaeche.LoadSkin(''); and Processmess to reload DPI scaling
 * osparser: execPowershellCall has now additionl parameter optionstr that may hold additional
    execwith parameters
 * osparser: getDecimalCompareSign (used by compareDotSeperatedNumbers):
     now support leading zeros (then it will handled as float starting with 0.)
     now support a letter as last part of the number (1.0.23b like is used at openssl versions)
 * osparser: executewith: call powershell scripts with -file parameter in order to get the correct exitcode
 * osparser: fix Access Violation in CreateAndProcessScript on empty scriptfiles.

-- d.oertel <d.oertel@uib.de> Tue, 31 Aug 2021 15:00

opsi-script (4.12.4.27) stable; urgency=low

 * new generic section parameter /AllUserProfiles (as alias for /AllNTUserProfiles)
 * osxmlsections: fixes for creating not existing file
 * osparser: doXMLPatcg2Main: check acces rights and for successful savetofile
 * osparser: handleFileExists32: fileexists for win also via shlwapi.PathFileExistsW
 * new unit oswinacl with function AddAccessRightsToACL
 * osfunc: FileGetWriteAccess calls at windows also AddAccessRightsToACL
 * osencoding: saveTextFileWithEncoding: ForceDirectories for output
 * osfunc: toCopyOrNotToCopy: fix for copy -r

-- d.oertel <d.oertel@uib.de> Thu, 12 Aug 2021 15:00

opsi-script (4.12.4.26) stable; urgency=low

 * Parameter 'pcprofil' not supported any more
 * osencoding: new function  isPlainAsciiString(const searchText: string): boolean;
 * osencoding: func searchEncoding now detectd also isPlainAscii
 * osparser: supress any encoding Warnings if isPlainAscii
 * osencoding: getFileBom: added fmShareDenyNone to open mode
 * osencoding: getFileBom: 3 retries
 * osparser: tsImportLib: do not reload the file at 'Imported all functions from file'
 * osparser: tsecExpected: (external sub sections): try-exept getFileBom +  LoadValidLinesFromFile

-- d.oertel <d.oertel@uib.de> Tue, 27 Jul 2021 15:00

opsi-script (4.12.4.25) stable; urgency=low

 * switch to Lazarus 2.2 / FPC 3.2.2
 * osparser: include_append:  comment out 'encoding=' lines from include_append because
              this line can become a part of a secondary section

-- d.oertel <d.oertel@uib.de> Tue, 20 Jul 2021 15:00


opsi-script (4.12.4.24) stable; urgency=low

 * new: xml2 sections: /encoding Parameter
 * new: xml2 sections: /AllNTUserProfiles Parameter
 * osfunc: file functions use findfirstUTF8 instead of findfirst
 * xml2 sections: many log warnings lowerd ti LLInfo
 * xml2 sections: new command: rootNodeOnCreate = <node>
 * xml2 sections: not existing files will be created
    using the value of rootNodeOnCreate, fallback to 'rootnode' if not existing
 * osparser: include (append / insert) statements fixes on read file with encoding
 * osparser: importlib statements fixes on read file with encoding
 * osparser: less encoding reload in LoadValidLinesFromFile
 * osencoding: more logging and retries at loadTextFileWithEncoding in order to fix
   'file in use' error.

-- d.oertel <d.oertel@uib.de> Mon, 05 Jul 2021 15:00

opsi-script (4.12.4.23) stable; urgency=low

 * osfuncwin2: fix for function resolveWinSymlink
 * new constant %opsiserviceClientId% (FQDN in service context, empty without)
 * parameter /clientid if present wil be ussed as preferred source for %hostid%
 * new parameter /depotpath (only together with /opsiservice) to pass the path to the depot
 * linux opsi-script library search path:
    %scriptpath%                     // standard by definition
    %ScriptPath%/../lib              // standard by definition
    './lib'                          // new standard directory in opsi-script directory
    '/usr/share/opsi-script/lib'     // backward compatibility directory
 * linux skin directory search path:
    '/usr/share/opsi-script/customskin'  // custom skin directory
    './skin'                          // new standard skin directory in opsi-script directory
    '/usr/share/opsi-script/skin'     // backward compatibility directory
 * linux locale directory search path:
    './locale'                        // new standard locale directory in opsi-script directory
    '/usr/share/locale/....'          // backward compatibility directory
 * removing links to http://www.opsi.org/credits/
 * osinteractivegui: set copyright tro 1995-2021
 * Fixes detection of w10 release > 2009 (21h1) (osparser) ; fixes #4665
 * New cli parameter /ServiceBatch  if /serviceBatch then also needed:
          /ClientId <> /opsiservice <> /username <> /password <> /productId <> and <script path>
 * New config opsi-script.global.supressSystemEncodingWarning
     if true then the following warning will be suppressed:
     'Encoding=system makes the opsiscript not portable between different OS'
 * osfuncwin2: replace of winst32.exe in funcwin2 by ExtractFileName(ParamStr(0)

-- d.oertel <d.oertel@uib.de> Tue, 08 June 2021 15:00

opsi-script (4.12.4.22) stable; urgency=low

 * new (common) unit osfilehelper
 * osfunc: function makbakfile with two parameters (name,maxbak number) is moved as makbakfiles
   to osfilehelper
 * oslog: function makbakfile with two parameters (name,maxbak number) is moved as makbakfiles
   to osfilehelper
 * osfunc files section copy: moving some log messages from Loglevel 6 to 7

-- d.oertel <d.oertel@uib.de> Fri, 04 June 2021 15:00

opsi-script (4.12.4.21) stable; urgency=low

 * osfunc: function isSymLink(const filepath : string) : boolean;
 * osfuncunix: function resolveUnixSymlink(const filepath : string; recursive : boolean = true) : string;
 * osparser: function resolveWinSymlink(const filepath : string; recursive : boolean = true) : string;
 * new function resolveSymlink(<string>) : string; on error it returns input
 * new constant %realScriptpath% ; if the script is called via symlink
      then it is the resolved version of %scriptpath%
 * new common unit osfuncunix
 * new function forcePathDelims(<path string>) : <path string>
      sets all slash and backslash as pathdelim according to the OS
 * new boolean fileIsSymlink(FilePath: string): boolean;

-- d.oertel <d.oertel@uib.de> Tue, 25 May 2021 15:00

opsi-winst/opsi-script (4.12.4.20) stable; urgency=low

 * again: fix debug_lib do imported libs added to nologfiles in oslog

-- d.oertel <d.oertel@uib.de> Thu, 6 May 2021 15:00

opsi-winst/opsi-script (4.12.4.19) stable; urgency=low

 * osparser: fix fileexists, fileOrFolderExists, DirectoryExists with quoted filenames

-- d.oertel <d.oertel@uib.de> Wed, 5 May 2021 15:00

opsi-winst/opsi-script (4.12.4.18) stable; urgency=low

 * osfunc: fix for getOSArchitecture at windows 64 bit
 * osparser: doAktionen: executesection: call sections with catchout=true
   fixes: nooutput in log and showoutput
 * osfuncmac: getProfilesDirListMac implemented
 * osmain: allow /batch with /productid and opsi-service parameters

-- d.oertel <d.oertel@uib.de> Wed, 14 Apr 2021 15:00

opsi-winst/opsi-script (4.12.4.17) stable; urgency=low

 * change getFileBom to fileHasBom(<filename>) : boolean

-- d.oertel <d.oertel@uib.de> Wed, 31 Mar 2021 15:00


opsi-winst/opsi-script (4.12.4.16) stable; urgency=low

 * can now handle *.opsiscript files with bom
 * call of execwith section with /encoding parameter (by j.laajili)
 * new string function: getOSarchitecture (x86_32 / x86_64/ arm_64)
 * new boolean function: runningInWAnMode (true if opsiserver = localhost) default=false

-- d.oertel <d.oertel@uib.de> Fri, 26 Feb 2021 15:00

opsi-winst/opsi-script (4.12.4.15) stable; urgency=low

 * new function asConfidentialList(<list>) : stringlist
 * new GUI Interface implementation
 * some additional try excet in osjson and load testfile variants
 * osGUIControl: unify skin directories to 'skin' with fallback to custom\winstskin at windows
 * standard out file at windows now opsi-script.exe
 * locale is now opsi-script.po (also at windows)
 * winstxx.exe only as symbolic links to opsi-script.exe (for backward compatibility)
 * osparser: executesection: shellinanIcon: logleveloffset=0

-- d.oertel <d.oertel@uib.de> Fri, 12 Feb 2021 15:00

opsi-winst/opsi-script (4.12.4.14) stable; urgency=low

 * redesign of TXStringlist file in and out encoding  (by j.laajili)
 * call of patches section with /encoding parameter (by j.laajili)
 * call of patchTextFile section with /encoding parameter  (by j.laajili)
 * new boolean function: fileorfolderExists(<file name>, [<access arch>]) (by j.laajili)
 * osregistry: open Registry with KEY:READ instead of KEY_ALL_ACCESS. Thanks to Jens Boettge. ; fixes  #4625

-- d.oertel <d.oertel@uib.de> Fri, 29 Jan 2021 15:00


opsi-winst/opsi-script (4.12.4.13) stable; urgency=low

 * osfunc: new: TUibIniFile.ReadRawSection (by j.laajili)
 * new function getSectionFromIniFile based on ReadRawSection (by j.laajili)
 * osxmlsections: fix for xml2 delnode

-- d.oertel <d.oertel@uib.de> Mon, 25 Jan 2021 15:00

opsi-winst/opsi-script (4.12.4.12) stable; urgency=low

 * repair center batchgui on screen
 * osregex: another empty string regex test
 * license functions: opsiserviceuser if possible
 * linux: shellBatch implemented as shellInAnIcon
 * macos: osfunclin: getmyipbytarget: use path to ip command
 * macos: runningWithGui also working for macos
 * update opsi-script-lib
 * update ssl libraries to 1.0.2u

-- d.oertel <d.oertel@uib.de> Wed, 16 Dec 2020 15:00

opsi-winst/opsi-script (4.12.4.11) stable; urgency=low

 * files: copy: deny-list with '.DS_Store'
 * files: on 'permission denied' call handle.exe if existing in opsi-script directory
 * dosInAnIcon: if win7 and no new Arguments then call runAndCaptureOut

-- d.oertel <d.oertel@uib.de> Mon, 14 Dec 2020 15:00

opsi-winst/opsi-script (4.12.4.10) experimental; urgency=low

 * macos: modify locale path for opsi-script-gui.app
 * macos / linux: oscheck_gui_startable: kill opsi-laz-gui-test if not terminated
 * osregex: filter empty input to avoid execeptions

-- d.oertel <d.oertel@uib.de> Thu, 26 Nov 2020 15:00


opsi-winst/opsi-script (4.12.4.9) experimental; urgency=low

* GetSectionFromIniFile: remove encoding transformation (windows only)

-- j.werner <j.werner@uib.de> Wed, 25 Nov 2020 17:39


opsi-winst/opsi-script (4.12.4.8) experimental; urgency=low

* isRegexMatch: checks if string is NOT empty before exec is executed
		catchs exceptions

-- j.werner <j.werner@uib.de> Tue, 24 Nov 2020 14:55


MISSING CHANGELOGS:

opsi-winst/opsi-script (4.12.4.7)



opsi-winst/opsi-script (4.12.4.6) experimental; urgency=low

 * import osprocesses
 * call of opsi-laz-gui-test in extra log: ogdatei.StandardMainLogPath+'opsi-script-gui-test.log'

-- d.oertel <d.oertel@uib.de> Wed, 04 Nov 2020 15:00

opsi-winst/opsi-script (4.12.4.5) experimental; urgency=low

 * the one and only project file is now opsi-script.lpi
   you hav to switch zhe build mode for differen archtictures (win / mac / lin) (gui)
 * the opsi-script nogui version is now opsi-script
 * the opsi-script gui version is now opsi-script-gui
 * opsi-script tests via opsi-laz-gui-test if a gui can be used
   and if yes calls opsi-script-gui (via execv)

-- d.oertel <d.oertel@uib.de> Wed, 04 Nov 2020 15:00

opsi-winst/opsi-script (4.12.4.4) experimental; urgency=low

* new boolean function: isValidFQDN
* fix debug_lib do imported libs added to nologfiles in oslog
* osfunc: new randomstrWithParameters (also called by randomstr
* new string function randomstrWithParameters(minLength,nLowerCases,nUpperCases,nDigits,nSpecialChars : Integer): string;
* powershellcall and execwith calls at windows RunAndCaptureOut bydefault

-- d.oertel <d.oertel@uib.de> Tue, 13 Oct 2020 15:00

opsi-winst/opsi-script (4.12.4.3) experimental; urgency=low

* macos: integrate to opsiscript and opsiscriptnogui project
  (Remove mac project files)
* new unit osstartprocess_cp (from osfunc, will be used in opsi-script-pilot)
* more logging on alldelete
* repair del -c
* try to remove dirs also with copy_delay
* new del option -r (retryOnReboot) default false (Windows only)
  If -r is set a missed delete action will be retried on Reboot.
  In this case normally a 'reboot after this script' flag will be set.
  By using the -c option setting this flag will be supressed
  The option -c (continue) make only sense in combination with -r
* section name now as header of showoutput

* startprocess_cp fix (jan werner)

-- d.oertel <d.oertel@uib.de> Wed, 23 Sep 2020 15:00

opsi-winst/opsi-script (4.12.4.2) experimental; urgency=low

* macos: try to read mountpoint from opsiclientd.conf
  default to /var/opsisetupadmin/opsi_depot

-- d.oertel <d.oertel@uib.de> Tue, 15 Sep 2020 15:00

opsi-winst/opsi-script (4.12.4.1) experimental; urgency=low

  * some more log on startup
  * oslog: makebakfiles: rename instead of copy (much faster)
  * fix uefi detection on win10 >= release 1004
  * osfuncwin: WinIsUefi: the fix is here
  //* macos: change mountpoint to /Network/opsi_depot
  //* macos: changeback mountpoint to /Volumes/opsi_depot
  * macos: change mountpoint back to /var/opsisetupadmin/opsi_depot
  * osbatchgui: formresize function disabled for Darwin

-- d.oertel <d.oertel@uib.de> Thu, 27 Aug 2020 15:00

opsi-winst/opsi-script (4.12.4.0) experimental; urgency=low

  * includes changes from github merge request "Feature / Implementation parity between WinBatch, DosBatch and ExecWith"
    * DosBatch-Sections to be executed with elevated privileges like WinBatch could be using /RunElevated
    * /Run*-Parameters for ExecWith
    * Output catching, /showouput and getOutStreamFromSection support for WinBatch
  * ToDo: write opsi-script tests for these changes
  * compiled with lazarus 2.0.10
  * fix for /showoutput at win64
  * fix for runningonuefi if w10 release >= 2004
  * new lib:  uib_lin_install.opsiscript

-- j.werner <j.werner@uib.de> Thu, 30 Jul 2020 17:54

opsi-winst/opsi-script (4.12.3.18) experimental; urgency=low

  * UTF8String replaced by String
  * AnsiToUTF8() removed accordingly
  * compiled with lazarus 2.0.10

-- j.werner <j.werner@uib.de> Thu, 30 Jul 2020 16:56

opsi-winst/opsi-script (4.12.3.17) stable; urgency=low

  * osfunc: StartProcess_cp: log message: 'Started process' now in utf8 encoding
  * osfunc: StartProcess_cp: use filename and parameters
  * compiled with lazarus 2.0.10

-- d.oertel <d.oertel@uib.de> Thu, 23 Jul 2020 15:00

opsi-winst/opsi-script (4.12.3.16) stable; urgency=low

  * oswebservice:sendlog: Log that using default if getLogsize failed
  * osfuncwin: some logprog in WinIsUefi
  * osfuncwin:  getW10Release
  * osfuncwin: WinIsUefi: fix uefi detection if w10 release >= 2004
  * osparser: good bye to cmd64.exe
  * osfunc: alldelete: change loglevel for not deleted files
  * add auto-it lib

-- d.oertel <d.oertel@uib.de> Fri, 19 Jun 2020 15:00

opsi-winst/opsi-script (4.12.3.15) experimental; urgency=low

  * oswebservice: avoid double /rpc in service url;
  * osfunclin: better getProfilesDirListLin
  * osparser: doTextpatch: Do not crash on not creatable files
  * osprocessess: ProcessIsRunning: more info in warning

-- d.oertel <d.oertel@uib.de> Tue, 09 Jun 2020 15:00

opsi-winst/opsi-script (4.12.3.14) experimental; urgency=low

  * osparser: new flag: cmd64checked to avoid repeated checks for cmd64.exe
  * osmain: bool var runSilent used in cli parameter check and to call
    FBatchOberflaeche.setVisible(True/False);
  * osbatchgui: start FBatchOberflaeche visible=false ; fixes #4485

-- Detlef Oertel <d.oertel@uib.de>  Thu, 04 Jun 2020 15:00:00 +0200

opsi-winst/opsi-script (4.12.3.13) experimental; urgency=low

  * osmain: bootmode: now using opsiclientagentconf
  * linux: osprocesses: ProcessIsRunning: look for exact match in 15 char shortcmd
  * osfunclin: os_shutdown()
  * osmain: (linux) try to direct reboot or shutdown

-- Detlef Oertel <d.oertel@uib.de>  thu, 12 Mar 2020 15:00:00 +0200

opsi-winst/opsi-script (4.12.3.12) experimental; urgency=low

  * osmain: /batch + /productid (template+with admin):
    * if no connection to real server, retry with localhost
    * if no connection to localhost - run any way

-- Detlef Oertel <d.oertel@uib.de>  Tue, 10 Mar 2020 15:00:00 +0200

opsi-winst/opsi-script (4.12.3.11) experimental; urgency=low

  * oswebservice: new function macosAgentActivated: boolean;
  * osmain: on macos: check macosAgentActivated
  * Info-os.plist: add opsi.icns file

-- Detlef Oertel <d.oertel@uib.de>  Wed, 26 Feb 2020 15:00:00 +0200
opsi-winst/opsi-script (4.12.3.10) experimental; urgency=low

  * uib_exitcode: isMsExitcodeFatal_short calls isMsiExitcodeFatal_short
  * activate history logging again
  * osfunc / osparser: linkfolder: new link element window_state with the allowed values 'normal', 'min', 'max'

-- Detlef Oertel <d.oertel@uib.de>  Tue, 28 Jan 2020 15:00:00 +0200

opsi-winst/opsi-script (4.12.3.9) experimental; urgency=low

  * winbatch combine /timeoutseconds with WaitForWindowAppearing or WaitForWindowVanished
    done this in osfunc: StartProcess_cp
  * new statement: executeSection( < string expr with section call>)

-- Detlef Oertel <d.oertel@uib.de>  Tue, 28 Jan 2020 15:00:00 +0200

opsi-winst/opsi-script (4.12.3.8) experimental; urgency=low

  * fix: osparser: doAktionen: do not double backslashes in sub_sections
         ApplyTextConstantsToString (Remaining, false);

-- Detlef Oertel <d.oertel@uib.de>  Mon, 27 Jan 2020 15:00:00 +0200

opsi-winst/opsi-script (4.12.3.7) experimental; urgency=low

  * skiped

-- Detlef Oertel <d.oertel@uib.de>  Tue, 14 Jan 2020 15:00:00 +0200

opsi-winst/opsi-script (4.12.3.6) experimental; urgency=low

  * new statement: forceLogInAppenMode = (true/false)
  * RequiredOpsiscriptVersion
  * %OpsiscriptVersion%
  * %OpsiscriptDir%

-- Detlef Oertel <d.oertel@uib.de>  Thu, 09 Jan 2020 15:00:00 +0200

opsi-winst/opsi-script (4.12.3.5) experimental; urgency=low

  * new procedure reverseProductOrderByUninstall: ProductList is reordered so that
      uninstall actions will be conducted first and in reverse order as the prodcuts were installed
  * new config opsi-script.global.ReverseProductOrderByUninstall
  * postinst script was adapted for the new config opsi-script.global.ReverseProductOrderByUninstall

-- Jan Werner <j.werner@uib.de>  Mon, 6 Jan 2020 13:35:00 +0200


opsi-winst/opsi-script (4.12.3.4) experimental; urgency=low

  * new unit ostxstringlist
  * osfunclin: which() now using FindDefaultExecutablePath
  * osfunc: StartProcess_cp: now supports WaitForProcessEnding also for [L/M]
  * Winbatch now supports WaitForProcessEnding also for [L/M]
  * new string function which(<command in path>) : string (command with path) [W/L/M]
  * new stringlist function replaceOpsiConstants(<list>) : <list>
  * new string function replaceOpsiConstants(<string>) : <string>
  * osparser: create cmd64.exe in execshellcall and execdosbatch:
      create also cmd64.exe.mui files
  * new boolean function isPingReachable(<target host>) : bool

-- Detlef Oertel <d.oertel@uib.de>  Fri, 27 Dec 2019 15:00:00 +0200

opsi-winst/opsi-script (4.12.3.2) experimental; urgency=low

  * osProcessux: getCommandResult: give always the first string ; fixes a getmyip Problem

-- Detlef Oertel <d.oertel@uib.de>  Tue, 19 Nov 2019 15:00:00 +0200
opsi-winst/opsi-script (4.12.3.1) experimental; urgency=low

  * update function listFiles: including switch for disabling redirections under 64bit-Windows

-- Jan Werner <j.werner@uib.de>  Fri, 15 Nov 2019 13:43:00 +0200

opsi-winst/opsi-script (4.12.3.0) experimental; urgency=low

  * update oswebservice with gzip support (Jan Werner)
  * new StringList function listFiles (Jan Werner)
  * osbatchgui: log on setWindowstate
  * oswebservice: move logging to log_prog
  * osparser info to macos version at log start
  * new boolean function: runningWithGui (osparser,osfunc) (at win+Mac always true)
  * macos: osbatchgui: temporary disable setWindowState
  * update to openssl 1.0.2t

-- Detlef Oertel <d.oertel@uib.de>  Wed, 23 Oct 2019 15:00:00 +0200

opsi-winst/opsi-script (4.12.2.3) experimental; urgency=low

  * feature/macos integrated
  * new library uib_state_and_condition:
      Collection of functions that gives info about system states that are relevant for product installations
  * new library uib_state_and_condition:
      Collection of functions that helps to install driver
  * osparser: differences between %CurrentProfileDir% and %UserProfileDir% fixes: #4118

-- Detlef Oertel <d.oertel@uib.de>  Thu, 29 Aug 2019 15:00:00 +0200

opsi-winst/opsi-script (4.12.2.2) experimental; urgency=low

  * oswebservice: switch most of log to log_prog
  * oswebservice: code cleanup (remove unused code)

-- Detlef Oertel <d.oertel@uib.de>  Tue, 06 Aug 2019 15:00:00 +0200

opsi-winst/opsi-script (4.12.2.1) experimental; urgency=low

  * oswebservice: sendlog: check max logsize to send via backend_getSystemConfiguration
  * switch to Lazarus 2.0.4

-- Detlef Oertel <d.oertel@uib.de>  Tue, 06 Aug 2019 15:00:00 +0200

opsi-winst/opsi-script (4.12.2.0) experimental; urgency=low

  * oswebservice: switch from indy to synapse

-- Detlef Oertel <d.oertel@uib.de>  Thu, 04 Jul 2019 15:00:00 +0200

opsi-winst/opsi-script (4.12.1.5) experimental; urgency=low

  * osdefinedfunctions: delLocalVar : fix removing loopvar after empty loop
  * osmain: fix in GetTempPath: if Univention temppath is /var/tmp
  * osconf: new const opsiclientagentconf
  * osmain: freeLinuxAgentStart: now using opsiclientagentconf
  * Linux: osparser: CreateAndProcess: more logging around remount
  * Linux: osparser: CreateAndProcess: moved remount

-- Detlef Oertel <d.oertel@uib.de>  Thu, 06 Jun 2019 15:00:00 +0200

opsi-winst/opsi-script (4.12.1.4) experimental; urgency=low

  * osfunc: more logging around gettemppath
  * osparser: enabled getHWBiosInfoMap again
  Linux only:
    * osfunclin: getpackagelock: fix memory leak
    * osfunclin: new: function getLinuxDistroName : string;
    * osfunclin: new: function getLinuxDistroRelease : string;
    * osfunclin: new: function getLinuxDistroDescription
    * osmain: GetTempPath: if Univention temppath is /var/tmp
    * osparser: createandprocessscript: check for depotmount
    * osparser: createandprocessscript: give some distro infos in log

-- Detlef Oertel <d.oertel@uib.de>  Mon, 03 Jun 2019 15:00:00 +0200

opsi-winst/opsi-script (4.12.1.3) experimental; urgency=low

  * shellInAnIcon: on loglevel 9: reread teporary files and do not delete
  * oslog: logdatei property usedloglevel (this is real used log level with force_min_loglevel)
  * osfunclin: new function getMyIpDeciceByDefaultRoute
  * osparser: GetMACAddress2: use getMyIpDeciceByDefaultRoute
  * osfunclin: more logging in getMyIpDeciceByDefaultRoute, getMyIpByDefaultRoute
  * osparser: demandlicensekey: try 3 ways to get the own fqdn
  * osfunc: createtextfile: Message:'Directory ' + dirname + ' did not exist und was created' now on loglevel 6 (was warning)
  * osfunc: StartProcess_cp_el: minor logging change ; //no {$OVERFLOWCHECKS ON}
  * osfunc / osfuncwin: replace 'exitCode := lpExitCode;' by 'exitCode := longint(lpExitCode);'

-- Detlef Oertel <d.oertel@uib.de>  Tue, 14 May 2019 15:00:00 +0200

opsi-winst/opsi-script (4.12.1.2) stable; urgency=low

  * add oslistedit to projectfiles
  * fixes in oslistedit
  * add osinputstring
  * add new string function stringinput(< message str>,< boolstr confidential>)
  * document randomIntStr(<>)
  * fix on gettemppath

-- Detlef Oertel <d.oertel@uib.de>  Fri, 12 Apr 2019 15:00:00 +0200

opsi-winst/opsi-script (4.12.1.1) stable; urgency=low

  * fix in oswmi (give stringlist as stringlist)


-- Detlef Oertel <d.oertel@uib.de>  Thu, 04 04 2019 15:00:00 +0200

opsi-winst/opsi-script (4.12.1.0) experimental; urgency=low

  * integration of new xml functions:
    * new units in common: osxml, osxmltdom, osxmlsections
    * new section type xml2
    * osparser: Tuibinstscript: new method doxml2patch:
      * OpenNode <node path : string>
      * DeleteNode <node path : string>
      * setNodeText <text : string>
      * setAttribute <name : string>, <value:string>
      * addAttribute <name : string>, <value:string>
      * delAttribute <name : string>
      * adNewNode <name : string>
      * gotoParentNode
    * getXml2AttributeValueByKey(<xml node:stringlist>,<key:string>): string
    * getXml2Text(<xml node:stringlist>) : string
    * getXml2DocumentFromFile(<filename:string>) : <xml-doc:stringlist>
    * getXml2Document(<pure xml :stringlist>) : <xml-doc:stringlist>
    * getXml2UniqueChildnodeByName
    * xml2GetFirstChildNodeByName(<xml-doc:stringlist>,<node name:string>) : <xml node:stringlist>
    * xml2NodeExistsByPathInXMLFile(myfilename, path: string; attributes_strict: boolean): boolean;

  * new regex functions:
  * isRegexMatch(<string>, <pattern>) : boolean
  * getSubListByContainingRegex(<pattern>, <target list>) : stringlist
  * getSubListByContainingRegex(<pattern list>, <target list>) : stringlist
  * getRegexMatchList(<pattern>, <target list>) : stringlist
  * getRegexMatchList(<pattern list>, <target list>) : stringlist
  * removeFromListByContainingRegex(<pattern>, <target list>) : stringlist
  * removeFromListByContainingRegex(<pattern list>, <target list>) : stringlist
  * stringReplaceRegex(<string>, <pattern>, <replacement string>) : string
  * stringReplaceRegexInList(<target list>, <pattern>, <replacement string>) : stringlist

  * new network functions
  * isValidIP4 (<ip4adr>) : boolean
  * isValidIP4Network (<ip4adr>, <netmask>) : boolean
  * isValidIP4Host (<ip4adr>, <netmask>) : boolean
  * getIP4NetworkByAdrAndMask (<ip4adr>, <netmask>) : string
  * getDefaultNetmaskByIP4adr (<ip4adr>) : string

  * new url related functions
  * parseUrl(<url string>) : stringlist
  * createUrl(<urlcomponents list>) : string

  * macos related:
  * getos detect macos as 'macos'
  * osparser: new function GetMacosVersionInfo : string
  * osparser: new function getMacosVersionMap : stringlist

  * misc:
  * ExtractFileExtension (`<path>`) : string [W/L]
  * ExtractFileName (`<path>`) : string [W/L]
  * DirectoryExists (`path`[,<accessstr>]) : boolean [W/L]

  * osparser: new (undocumented) command 'setDebug_prog = (true/false)'
  * osshowsysinfo: caption is Systeminfo (instead of SystemInfo)
  * reencode(paramstr(0),'system')
  * remove some svn entries
  * replace unit osxbase64 by fpc unit base64
  * Release now compiled with activated Checks for IO, Range, Overflow and Stack
  * unit oscrypt with {$RANGECHECKS OFF}
  * osparserhelper: fix in geouterfunction
  * osdefinedfunction: isvisiblelocalvar: serach optimization
  * osfunc: checkfileexists: use widechsr/utf16 for filenames
  * osparserhelper: new function stringlistintersection (get stringlist intersection)
  * new cli parameter /processproducts productId [,productId ]*
  * added unit oszip
  * osparser: fileActionsMain: zipfile, unzipfile
  * new in file sections: zipfile <file or dir> <zipfile>
  * new in file sections: unzipfile <zipfile> <targetdir>
  * osparser: fix in Hasminimumspace
  * osparser: fix searchpath from %opsiScriptHelperPath% to %opsiScriptHelperPath%\lib; fixes #3975
  * osparser: producestringlist: createstringlist: fix: empty strings as argument allowed
    and createstringlist() gives empty list

  * osparser: modified : getListFromWMI
    * `getListFromWMI(`<wmi namespace str>,<wmi class str>,<property list>,<condition str>`) : stringlist`
    * If <wmi namespace str> is empty, it defaults to `root\cimv2`.


-- Detlef Oertel <d.oertel@uib.de>  Wed, 23 01 2019 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.36) stable; urgency=low

  * osdefinedfunctions: better errormessages
  * osdefinedfunctions: complete redesign of local var
  * osdefinedfunctions: now works also with recursive calls
  * oslog: fix: cleanup old partlogs
  * osparser: fix in md5sumfromfile (Linux)

-- Detlef Oertel <d.oertel@uib.de>  Wed, 13 Feb 2019 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.35) stable; urgency=low

  * osparser: producestringlist: getsublist: with whitespaces around numbers

-- Detlef Oertel <d.oertel@uib.de>  Tue, 15 Jan 2019 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.34) stable; urgency=low

  * osparser: producestringlist: getsublist: with string expression instead of numbers
  * osparser: producestringlist: createstringlist: fix: empty strings as argument allowed

-- Detlef Oertel <d.oertel@uib.de>  Thu, 10 Jan 2019 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.33) stable; urgency=low

  * postinst: create config opsi-script.global.w10BitlockerSuspendOnReboot=false
  * osconf: new config opsi-script.global.w10BitlockerSuspendOnReboot
  * osconf: new global config variable: w10BitlockerSuspendOnReboot (default= false)
  * osmain: buildPC: >=win 10 and  w10BitlockerSuspendOnReboot and (txrImmediateReboot or txrImmediateReboot)
     then suspend bitlocker for 1 reboot     fixes: #3816
  * new units oswmi, utilwmi
  * osparser: producestringlist:
    new function getListFromWMI(<wmi class str>,<property list>,<condition str>) : stringlist
    example: set $plist$ = createStringList ('Model','Vendor')
             set $list$ = getListFromWMI('Win32_ComputerSystem',$plist$,'where model like Esprimo%')
    if <property list> is empty all properties of <wmi class str> will be returned
    on error a empty list will be returned

-- Detlef Oertel <d.oertel@uib.de>  Mon, 17 12 2018 15:00:00 +0200


opsi-winst/opsi-script (4.12.0.32) stable; urgency=low

  * osconf: no more OpsiServiceConfigs: in log

-- Detlef Oertel <d.oertel@uib.de>  Thu, 25 10 2018 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.31) stable; urgency=low

  * new paths for Linux:
     osconf: opsiscriptconfinit = '/etc/opsi-script/opsi-script.conf';
     osbatchgui: skindirectoryDefault = '/usr/share/opsi-script/skin';
     osbatchgui: skindirectoryCustomWin = '/usr/share/opsi-script/customskin';
     osparser: // search in /usr/share/opsi-script/lib
     osparser: '%opsiLogDir%' = '/var/log/opsi-script'
     oslog: StandardLogPath := '/var/log/opsi-script/';
  * osencoding: do not write out supported encodings; fixes #3700

-- Detlef Oertel <d.oertel@uib.de>  Wed, 17 10 2018 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.30) stable; urgency=low

  * osparser: fix for close log file after script finished:
     (only in interactive mode)
  * oslog: all loglines trimright; fixes #3708

-- Detlef Oertel <d.oertel@uib.de>  Mon, 15 10 2018 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.29) stable; urgency=low

  * osparser: doRegitryHack*: remove HKCU on flag_all_usrclass

-- Detlef Oertel <d.oertel@uib.de>  Tue, 25 Sep 2018 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.28) stable; urgency=low

  * osconf: (fix): get ScriptErrorMessages, AutoActivityDisplay
  * osparser: move log message 'line is starting with' to log_prog
  * osinteractivegui: radiobutton 'NewFile' visible
  * osinteractivegui: at execute viewlist: use CreateTheLogfile
  * osinteractivegui: at execute_button: use CreateTheLogfile
  * osparser: close log file after script finished
  * switch to lazarus 1.8.4.

-- Detlef Oertel <d.oertel@uib.de>  Fri, 14 Sep 2018 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.27-2) stable; urgency=low

  * library uib_exitcode: a lot of fixes and enhancements

-- Detlef Oertel <d.oertel@uib.de>  Fri, 14 Aug 2018 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.27) stable; urgency=low

  * osparser: (fix) registry: new parameter /AllUsrClassDats
       new function doRegistryAllUsrClassDats ; fix from Terry Strooband (thank you)
       flag_all_usrclass

-- Detlef Oertel <d.oertel@uib.de>  Mon, 10 Sep 2018 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.26) stable; urgency=low

  * osparser: more log_prog in folderlink and getstring
  * osparser: reporterror: catch unknown origin and exceptions ; references #3655
  * osparser: doAktionen: endif: catch exception in log message ; references #3655
  * osparser: execDosBatch: log8 temp file content
  * osparser: executeWith: log8 temp file content
  * osparser: execPowershellCall: log executing ; fixes #3621
  * osparser: doAktionen: registry: Ignoring parameter /32bit for /AllNTUserdats. ; fixes #3643
  * osjson: jsonAsArrayToStringList: "[true]" now results to "true" ; fixes #3627
  * oswebservice: createSocket: log openssl version
  * osfunclin: getLinuxDistroType: read /etc/os-release  ; fixes #3651
  * osparserhelper: GetOuterFunctionOrExp
  * OsDefinedFunction.parseCallParameter: handle functions as parameter ; fixes #3623
  * osparser: registerSectionOrigins: fix origin for external sub sections
  * osparser: registry: new parameter /AllUsrClassDats
       new function doRegistryAllUsrClassDats ; fix from Terry Strooband (thank you)

-- Detlef Oertel <d.oertel@uib.de>  Tue, 28 Aug 2018 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.25) stable; urgency=low

  * osconf: readConfigFromService: more debug and try-except with
  * oswebservice: function isConnected2(loglist : TStringlist): boolean;

-- Detlef Oertel <d.oertel@uib.de>  Tue, 17 Jul 2018 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.24) stable; urgency=low

  * osconf: readConfigFromService: more debug and try-except
  * * update indy 5455 to 5464

-- Detlef Oertel <d.oertel@uib.de>  Mon, 16 Jul 2018 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.23) stable; urgency=low

  * switch High DPI support off for Win7 (did not work correctly)

-- Detlef Oertel <d.oertel@uib.de>  Thu, 12 Jul 2018 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.22) stable; urgency=low

  * osparser: doAktionen: importlib; remove double call of
    Script.FSectionNameList.Add(importFunctionName) fixes #3560
  * OsDefinedFunction.parseCallParameter: fixes #3569

    * lib/uib_backend.opsiscript: more documentation

-- Detlef Oertel <d.oertel@uib.de>  Wed, 06 Jun 2018 15:00:00 +0200


opsi-winst/opsi-script (4.12.0.21) stable; urgency=low

  * osconf: default for debuglib = true
  * osparser: doAktionen: additional log for indefFunc3
  * osparser: doAktionen: inc/dec indefFunc3 only if keyword is at begining of line
  * oswebservice connection timeout 20 sec not at linux

-- Detlef Oertel <d.oertel@uib.de>  Thu, 17 May 2018 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.20) stable; urgency=low

  * osparserhelper: GetWord: search backwards=true;backwardfirst=true : / get from "hu)hu)))" as expr "hu)hu" with remaining ")))"
  * osparserhelper: GetWord: search backwards=true;backwardfirst=false : / get from "hu)hu)))" as expr "hu)hu))" with remaining ")"
  * osparserhelper: GetWordOrStringConstant: new params search backwards=true;backwardfirst=false
  * osparser: producestringlist: do not delete remaining after call of defined function
  * osdefinedfunctions: parseCallParameter: better error messages
  * osdefinedfunctions: parseCallParameter: trim paramstr ; fixes #3526
  * osdefinedfunctions: call: set inDefFuncIndex on leaving function ; fixes #3528
  * osparser: executeWith: use autoactivitydisplay
  * osparser: execShellCall: use autoactivitydisplay
  * osparser: execPowerShellCall: use autoactivitydisplay

-- Detlef Oertel <d.oertel@uib.de>  Mon, 14 May 2018 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.19) stable; urgency=low

  * osparser: new SearchForSectionLines
  * osparser: SearchForSectionLines used in produceStringlist and doAktionen
  * oswebservice connection timeout 20 sec
  * osdefinedfunctions: fix at free the local Vars (no $result$ if dfpVoid

-- Detlef Oertel <d.oertel@uib.de>  Tue, 8 May 2018 15:00:00 +0200


opsi-winst/opsi-script (4.12.0.18) stable; urgency=low

  * oslog: fix logging defined function that are included

-- Detlef Oertel <d.oertel@uib.de>  Thu, 3 May 2018 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.17) stable; urgency=low

  * osparser: processcall: log Executing on LLNotice
  * new unit osparserhelper in common (Skip / getword /  ...)
  * osdefinedfunctions: int new local string vars
  * osdefinedfunctions: isVisibleLocalVar check for empty varname
  * osparser: catch powershellCall at Linux
  * OsDefinedFunction.parseCallParameter: fix handling parameters with ')'

-- Detlef Oertel <d.oertel@uib.de>  Fri, 13 Apr 2018 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.16) stable; urgency=low

  * update to openssl-1.0.2o

  * typo of log messages
  * change to Lazarus 1.8.2
  * switch HighDPI awareness on (8.1+, per monitor)
  * osparser: reportError: more info on defined functions at syntax error
  * osfunc: getsectionlines: include leading comments and empty lines
  * osdefinedfunctions, osparser: allow defined functions with no parameters; fixes #3182
  * osdefinedfunctions, osparser: allow defined functions with data  type void
  * oslog: fixed check for library logging
  * activate normal debug_lib again (see 4.12.0.13 temporary always true)
  * osparser: doAktionen: tsDefineFunction: try-excepts
  * osparser: reread opsi.conf parameters for every script; fixes #3337
  * osparser: splitstring: if string is confidential all parts are confidential as well; fixes #3186
  * osparser: splitStringOnWhiteSpace: if string is confidential all parts are confidential as well; fixes #3186
  * osfunc: FSaveToFile new param raise_on_error ; fixes #3253
  * new string function asConfidential:
     1. backup and set loglevel to warning |2 get the input | 3 make it confidential
      | 4 give it to output |5 restore loglevel           #3441
  * found undocumented string function upper(<str>); fixes #3283
  * new boolean function RegKeyExists(<keystr> [,<access str>])
      <access str> = one of 32bit, 64bit, sysnative ; default sysnative   ; fixes #3078
  * new boolean function RegVarExists(<keystr> [,<access str>])
  * no warning for not existing releaseid  ; fixes #2595
  * new boolean function isConfidential(<str>)  for testing
  * initvars in CreateAndProcessScript ; hopefully fixes errors on restart modified scripts
  * redesign of origin detection
  * osfuncwin2: reimplementation of getProfileImagePathfromSid
         https://forum.opsi.org/viewtopic.php?f=7&t=9941
  * osfuncwin2: reimplementation of  delUserProfile
  * osfunclin: getpackagelock: look also for UCS ; fixes #3189
  * oslindesktopfile:  DeleteShellLink: del hard in /usr/share/applications/ ; fixes #3402
  * osparser: getregistryvalue(<keystr>, <varstr> [, <access str>]) : string ; fixes #3279
  * osparser: powershellcall(<commandstr> [,<access str>='sysnative' [,<policy bool str>='true']]) : [void,str,stringlist] ; fixes #3442

-- Detlef Oertel <d.oertel@uib.de>  Wed, 14 Mar 2018 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.15) stable; urgency=low

  * oswebservice: getMapOfLoginscripts2Run: fix: check not only for productId but also for productVersion and PackageVersion
  * oswebservice: getMapOfLoginscripts2Run: change logging to log_prog

-- Detlef Oertel <d.oertel@uib.de>  Fri, 09 Mar 2018 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.14) stable; urgency=low

  * osparser: evaluateBoolean: sendlog: switch log append mode on
      in order to avoid that a final log removes this one
  * new function : getSubListByMatch(<search string>, <target list>) :stringlist
  * new function : getSubListByMatch(<search list>, <target list>) :stringlist
  * new function : getSubListByContaining(<search string>, <target list>) :stringlist
  * new function : getSubListByContaining(<search list>, <target list>) :stringlist
  * new function : getSubListByKey(<search string>, <target list>) :stringlist
  * new function : getSubListByKey(<search list>, <target list>) :stringlist
  * new function : getKeyList(<list>) :stringlist

-- Detlef Oertel <d.oertel@uib.de>  Tue, 13 Feb 2018 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.13-2) stable; urgency=low

  * uib_bootutils: DefFunc enablePEPartition: use powershell if possible

-- Detlef Oertel <d.oertel@uib.de>  Wed, 07 Dec 2018 15:00:00 +0200


opsi-winst/opsi-script (4.12.0.13) stable; urgency=low

  * osparser: for-to loop: fix failure at for x to x loop
  * oslog: includelogtail: now log includelog at log level 7
  * new function getIndexFromListByContaining(<list> : stringlist,<search string> : string) : <number> : string
  * temporary set debug_lib always to true
  * osparser / osdefinedfunctions: call from a local function an other local function
      using a local variable as call by value parameter
  * osparser: more fixes for nestinglevel (if then else through localfunctions and sub)
  * new booealn function: runningInPE (osparser,osfunc,osfuncwin) (at linux always false)
  * osdefinedfunctions: fixes on parsing paramtype
  * osparser: Ifelseendiflevel : longint = 0; // global nestlevel store
     used to pass nestlevel to evaluatestring and producestringlist  --> local functions
  * osdefinedfunctions: fix in isVisibleLocalVar
  * osjson: jsonAsArrayToStringList: allow strings as valid array components
  * osparser: indeffunc3 : integer = 0; // we are between deffunc and endfunc line (even in a not active code)

-- Detlef Oertel <d.oertel@uib.de>  Wed, 27 Dec 2017 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.12) stable; urgency=low

  * fix sections in local functions: osparser: doAktionen:
  * New constant %opsidata%, %opsiapplog%

-- Detlef Oertel <d.oertel@uib.de>  Wed, 13 Dec 2017 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.11) stable; urgency=low

  * Additional fix for Support brackets '[]' in Registry keys
    * osfunc: function posFromEnd(const substr : string; const s : string) : integer;
    * osparser: doRegistryHack: openkey, deletekey in Registry sections
    * osparser: evaluatestring: GetRegistryStringValue*

-- Detlef Oertel <d.oertel@uib.de>  Tue, 12 Dec 2017 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.10) stable; urgency=low

  * osdefinedfunctions: TOsDefinedFunction.call: free local Vars on leaving the function; fixes #3230
  * Fix call of defined functions inside if statement ; fixes #3232
    * osdefinedfunctions: call: new param Nestlevel
    * osparser: evaluatestring: new param Nestlevel  (to use while call defined function)
    * osparser: producestringlist: new param Nestlevel  (to use while call defined function)
    * osparser: doSetVar: new param Nestlevel  (to use while call evaluatestring/producestringlist)
  * Support brackets '[]' in Registry keys ; fixes #2825
    * osparser: doRegistryHack: openkey, deletekey in Registry sections
    * osparser: evaluatestring: GetRegistryStringValue*
  * Encoding Parameter for sections which modify files (patches,Patchtext,...); references #3140
    * osencoding: LoadFromFileWithEncoding
    * osparser: doIniFilesPatchesMain: shortcut for utf8
  * other encoding Problems:
    * osencoding: reencode: encode by Default to utf8 which is the internal encoding
    * osencoding: LoadFromFileWithEncoding (more changes)

-- Detlef Oertel <d.oertel@uib.de>  Wed, 06 Dec 2017 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.9) stable; urgency=low

  * osmain: log command line parameter of opsi-script call
  * osmain: startprogrammodes: fix for /productid (bug created with /logproductid)

-- Detlef Oertel <d.oertel@uib.de>  Mon, 06 Nov 2017 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.8) stable; urgency=low

  * start to wor on new modifier '/encoding <encoding>' for patches sections
  * osparser: fix Message 'ReportMessages' changed to 'ScriptErrorMessages'
  * osparser: fix Message 'ScriptErrorMessages' 'is set to' true/false was wrong
  * osparser:  tsImportLib: replace constants

-- Detlef Oertel <d.oertel@uib.de>  Mon, 06 Nov 2017 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.7) stable; urgency=low

  * default loglevel is now 7 (was 6)
  * new config: opsi-script.global.ScriptErrorMessages : boolean ; default=true (created as false)
  * config: opsi-script.global.default_loglevel will be created as 7

-- Detlef Oertel <d.oertel@uib.de>  Tue, 10 Oct 2017 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.6) stable; urgency=low

  * osconf: readConfigFromService reads configstates:
     temporary uncommented: opsi-script.global.ScriptErrorMessages : boolean ; default=true (created as false)
     opsi-script.global.AutoActivityDisplay : boolean ; default=false  (created as true)
  * general: adjusting log levels
    5:LLNotice: comments,messages, Execution of sections
    6:LLInfo; Statements, New values for stringvars , complete boolean expression
    7: new values for stringlist vars, Output from sections,
       shellcall if the output is not written to a stringlist, parts of a boolean expression
    8: other stringlist output
    9: content of saved temporary files

-- Detlef Oertel <d.oertel@uib.de>  Wed, 27 Sep 2017 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.5) stable; urgency=low

  * osmain / osinteractivegui: new cli argument /logproductid
    just used for logging, do not try to get data from service
  * osbatchGUI: TFBatchOberflaeche.FormActivate also for Linux

-- Detlef Oertel <d.oertel@uib.de>  Mon, 11 Sep 2017 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.4-1) stable; urgency=low

  * postinst: configs "opsi-script.global.default_loglevel" and "opsi-script.global.force_min_loglevel" not editable
  * osconf: readConfigFromService: protect from wrong data types from service

-- Detlef Oertel <d.oertel@uib.de>  Fri, 01 Sep 2017 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.3-1) stable; urgency=low

  * global: rising the level of a lot of loging

-- Detlef Oertel <d.oertel@uib.de>  Fri, 01 Sep 2017 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.2) stable; urgency=low

  * osbatchgui: ForceStayOnTop modified
  * osbatchgui: ForceStayOnTop in form.activate
  * osconf: default_loglevel = 6
  * osfunc: alldelete: del command: allow also partly wildcards (*.yxz or xyz.*)
  * postinst: create configs
  * postinst: remove /opt/pcbin/utils support

-- Detlef Oertel <d.oertel@uib.de>  Thu, 24 Aug 2017 15:00:00 +0200


opsi-winst/opsi-script (4.12.0.1) experimental; urgency=low

  * oswebservice: changed loglevels in retrieveJSONObject
  * osfunc: FindLocalIPData / getMyHostEnt : better Error handling

-- Detlef Oertel <d.oertel@uib.de>  Thu, 27 Jun 2017 15:00:00 +0200

opsi-winst/opsi-script (4.12.0.0) experimental; urgency=low

  * new unit osdefinedfunctions
  * osparser: support for defined functions
  * osparser: moved sync between FExtremeErrorLevel and extremeErrorLevel before final output
  * osparser: new functions: boolToString(<bool expression>) and stringToBool(< string>)
  * osparser: new statement: ImportLib
  * oslog: new method log_prog for program debugging
  * osconf: readConfigFromService reads configstates:
     opsi-script.global.debug_prog : boolean ; if true log log_prog if > LLWarning
     opsi-script.global.debug_lib : boolean ; if true log libraries if > LLWarning
     opsi-script.global.default_loglevel : intstring ; set the default loglevel
     opsi-script.global.force_min_loglevel : intstring ; set the minimal loglevel
  * osmain: if /productid is set then use it also for the log
  * opsihwbiosInfo: typo Manufacturer ; fixes #2994

-- Detlef Oertel <d.oertel@uib.de>  Mon, 19 Jun 2017 15:00:00 +0200

opsi-winst/opsi-script (4.11.6.14) stable; urgency=low

  * osparser: isNumber: now check against int64
  * osparser: new file section copy option -h (follow symlinks; default=false)
  * osfunc: support for followsymlinks:
    FileInstall.AllCopy: AllCopy Recursive: ToCopyOrNotCopy
    filecopy  : fixes #2537

-- Detlef Oertel <d.oertel@uib.de>  Thu, 29 Jun 2017 15:00:00 +0200


opsi-winst/opsi-script (4.11.6.13) stable; urgency=low

  * oswebservice: typo: lastcation
  * osbatchgui: use myStringToTColor to interpret rgb colors from ini file
  * ssl library upgrade to 1.0.2.12 (1.0.2L) (do 16.6.2017)

-- Detlef Oertel <d.oertel@uib.de>  Mon, 29 May 2017 15:00:00 +0200

opsi-winst/opsi-script (4.11.6.12-1) stable; urgency=low

  * osjson: escape chars in jsonAsArrayToStringList
  * osparser: Logging at errorsOccurredSinceMark
  * osparser: move/rename/symlink/hardlink: no Syntax error on wrong parameters ; fixes #2036
  * some changes for 64 Bit Version

  * update to openSSL 1.0.2k (1.0.2.11)
  * integrate winst64.exe to the package for usage in winpe

-- Detlef Oertel <d.oertel@uib.de>  Tue, 03 Jan 2017 15:00:00 +0200


opsi-winst/opsi-script (4.11.6.11) stable; urgency=low

  * source migrated from svn to git and direcories restructured
  * compiled with Lazarus 1.6.2
  * osparser: doOpsiServiceCall: new Parametzer opsiclientd-once (=tscOpsiclientdOnce)
     resets local_opsidata after servicecall
  * osparser: CreateAndProcessScript: resets local_opsidata before script
  * osparser: doAktionen: Statement: 'opsiservicecall /preloginservice' (without sektion) allowed
  * oswebservice: sendLog: shrinking temporary disabled until size can be asked via service call
  * osfuncwin: StrSIDToName: do not try empty string
  * osparser: use 'on e: exception do' in exception handling
  * osfuncwin2: updateenvironment: use lazarus sendmessage
  * osregistry: WriteEntry: unicode / utf8 Support
  * osparser: Resourcestring for translation: rsReadyToContinue
  * osparser: fileactionsmain: GetString with true
  * osfunc: TPatchList.FindFirstItemWith: more logging
  * osinteracticegui: message for not working logview
  * osparser: symlink: check via cmd.exe after create symlink
  * osparser: removed cmd.exe call from fileexists%
  * osparser: success or failed after 'script finished' in log footer
  * osparser: dosbatch: retry on erroer 19 (WRITE_PROTECT)
  * updateted lang (po) files
  * updated indy lib 10-rev5391
  * osparser: fix in getstring call chain
  * osfunc: fix in chmod error handling

-- Detlef Oertel <d.oertel@uib.de>  Tue, 06 Dec 2016 15:00:00 +0200

opsi-winst/opsi-script (4.11.6.10) stable; urgency=low

  * osfuncwin: RunCommandAndCaptureOut: transfer exitcode if process could not start
  * osparser: execShellCall: new parameter FatalOnFail : boolean = true
  * osparser: execShellCall: returns exitcode on fail
  * osparser: evaluateBoolean: FileExists* : call execshellCall with FatalOnFail=false

-- Detlef Oertel <d.oertel@uib.de>  Wed, 09 Nov 2016 15:00:00 +0200

opsi-winst/opsi-script (4.11.6.9) stable; urgency=low

  * osregistry: TuibRegistry.ReadEntry: use RegQueryValueExW on trdString, trdExpandString
  * osregistry: fix encoding in deletekey

-- Detlef Oertel <d.oertel@uib.de>  Fri, 04 Nov 2016 15:00:00 +0200

opsi-winst/opsi-script (4.11.6.8) stable; urgency=low

  * osconf: global bool variable readconfig_done which is set by readconfig to true
  * osparser: CreateAndProcessScript: do not call readconfig if  readconfig_done
  * should fix: uib#2016101810000104

-- Detlef Oertel <d.oertel@uib.de>  Fri, 28 Oct 2016 15:00:00 +0200

opsi-winst/opsi-script (4.11.6.7) stable; urgency=low

  * new unit oskeyboard
  * linkfolder knows now parameter shortcut for key like Shift-Alt-O

-- Detlef Oertel <d.oertel@uib.de>  Fri, 21 Oct 2016 15:00:00 +0200

opsi-winst/opsi-script (4.11.6.6) stable; urgency=low

  * osmain: GetParameter: log error if readconfig failed
  * osparser: CreateAndProcessScript: log error if readconfig failed
  * osparser: CreateAndProcessScript: backup depot path and restor if rad config failed
  * osparser: CreateAndProcessScript: backup depot path and restor if rad config failed
  * osparser: evaluateBoolean: Fileexists* calling execShellCall architecture dependent
  * osparser: produceStinglist: getFileInfoMap32, getFileInfoMap64, getFileInfoMapSysnative

-- Detlef Oertel <d.oertel@uib.de>  Thu, 20 Oct 2016 15:00:00 +0200

opsi-winst/opsi-script (4.11.6.5) stable; urgency=low

  * osjson: fix at jsonAsObjectGetKeyList
  * osparser: fix at jsonAsObjectDeleteByKey
  * osencoding: new overloaded version of reencode with destEncoding
  * osfunc: fix TXStringlist.savetofile (use new reencode verion)
  * osparser: fix reencodestr (use new reencode verion)

-- Detlef Oertel <d.oertel@uib.de>  Mon, 10 Oct 2016 15:00:00 +0200

opsi-winst/opsi-script (4.11.6.4) stable; urgency=low

  * osjson: jsonAsObjectGetKeyList: also true on empty keylist
  * osjson: new functions: jsonAsObjectDeleteByKey, jsonAsArrayDeleteObjectByIndex
  * osparser: new functions: jsonAsObjectDeleteByKey, jsonAsArrayDeleteObjectByIndex
  * osencoding:  : trim of found encoding ; fixes #2411 ;  https://forum.opsi.org/viewtopic.php?p=38236#p38236
  * oswebservice: sendlog: no more reencoding to uft8 ; Perhaps Fehler #2408
  * osparser: getMSVersionMap: Do not try to read ReleaseID if below win10; fixes #2316
  * osparser / osmain: use LLCritical in fatal situations; fixes #2263
  * osparser: CompareDotSeparatedNumbers (str/bool): better wrong parameter handling fixes #2045  #2369
  * osparser: new boolean command savetextfilewithencoding(<list>,<filename>,<endoding>)
  * osregistry: readentry: trdString, trdExpandString: expicit use empty value if 0 bytes

-- Detlef Oertel <d.oertel@uib.de>  Wed, 05 Oct 2016 15:00:00 +0200

opsi-winst/opsi-script (4.11.6.3-2) stable; urgency=low

  * update to openSSL 1.0.2j

-- Detlef Oertel <d.oertel@uib.de>  Tue, 04 Oct 2016 15:00:00 +0200

opsi-winst/opsi-script (4.11.6.3) stable; urgency=low

  * osfunc: new functions: isValidUtf8String(str:string) : boolean;
                           getFixedUtf8String(str:string) : string;
  * osparser : new opsiscript functions:
      isValidUtf8String(str:string) : boolean;
      getFixedUtf8String(str:string) : string;

-- Detlef Oertel <d.oertel@uib.de>  Thu, 08 Sep 2016 15:00:00 +0200

opsi-winst/opsi-script (4.11.6.2) stable; urgency=low

  * more Logging for GetProductPropertyList
  * oswebservice: getProductPropertyList(myproperty: string;
        defaultlist: TStringList,
        myClientId,
        myProductId): TStringList;  overload;
  * osparser: GetProductPropertyList overload 2 and 4 arguments

-- Detlef Oertel <d.oertel@uib.de>  Mon, 05 Sep 2016 15:00:00 +0200
opsi-winst/opsi-script (4.11.6.1) stable; urgency=low

  * Merge from (4.11.5.14):
    * oswebservice: assume opsiservice version=4 in retrieveJSON*
      to avoid access to opsidata which fails if we use local_opsidata
      fixes Access Violations in initial opsi-client-agent installation
    * osfunc: FuncSaveToFile / SaveToFile: logging content on Loglevel 9 ; references #1679
    * osfuncwin: fix broken Shellbatch /showoutput
  * Merge from opsi-winst/opsi-script (4.11.5.13) stable; urgency=low
    * do not try to run non existing external sub sections
  * Merge from  (4.11.5.12) stable; urgency=low
    * Bugfix: osparser: doAktionen: fullfilename not initialized:
      causes causes double load of include or sub if searched file is not existing ; fixes #1656
    * Bugfix: osparser: Filexists*: do not check for existing file with dir/ls if trim(filename)=''
      fixes: https://forum.opsi.org/viewtopic.php?f=6&t=7697
      (FileExists auf leere Variable gibt wahr zurück)
  * osfunc: rewrite of FindLocalIPData for linux
  * osfunclin: new: getMyIpByTarget(target): implemented as: ip route get <target>
  * osfunclin: new: getMyIpByDefaultRoute: implemented as: ip route get 255.255.255.255
  * osparser:  getMyIpByTarget now also for linux
  * osfunclin: getCommandResult: Exitcode on higher (+2) loglevel
  * osfuncwin2: getPid4user: fix logging on not found
  * osfuncwin2: getPid4user: add logging on process found with wrong user
  * osfuncwin2: Impersonate2User: 5 retrys of getPid4user and explorer.exe
  * osconf,osmain: change depotdrive for linux from /mnt to /media/opsi_depot
  * osmain: new command line parameter: 'credentialfile' for username, password and sessionid in format:
     username=<username>
     password=<password>
     sessionid=<sessionid>
    If the parameter 'credentialfile' is used all thre parameter will be used from the file and
    the parameters : username, password and sessionid will be ignored
  * osmain: BuildPC: create flag files in /var/run/opsiclientd for shutdown or reboot
    execute reboot only if no opsiclientd in processlist
  * osparser: savetextfile: call FuncSaveToFile  (merge from 4.11.5.17)
  * opsiscript.lpr / winst.lpr replace defaulttranslator by lcltranslator
  * osmain: (GUI) GetParameter: new parameter: lang <2 letter lang code>
    is set to lcltranslator.SetDefaultLang
  * osmain: BuildPC: termonate after exception in BuildPC: final ; references #1820
  * oswebservice: finishOpsiConf: catch exception at backend_exit ; fixes #1820
  * changes for lazarus 1.6 / FPC 3.0
  * new unit osjson
  * new json functions:
    * jsonIsValid(<jsonstr>) : boolean
    * jsonIsArray(<jsonstr>) : boolean
    * jsonIsObject(<jsonstr>) : boolean
    * jsonAsObjectHasKey(<jsonstr>,<keystr>) : boolean
    * jsonAsArrayCountElements(<jsonstr>) : intstr
    * jsonAsObjectCountElements(<jsonstr>) : intstr
    * jsonAsArrayGetElementByIndex(<jsonstr>, <indexstr>) : jsonstring
    * jsonAsObjectGetValueByKey(<jsonstr>, <keystr>) : valuestring
    * jsonAsObjectSetValueByKey(<jsonstr>, <keystr>,<valuestring>) : jsonstring
    * jsonAsObjectSetStringtypeValueByKey(<jsonstr>, <keystr>,<valuestring>) : jsonstring
    * jsonAsArrayPutObjectByIndex(<jsonstr>, <indexstr>, <objectstr>) : jsonstring
    * jsonAsArrayToStringList(<jsonstr>) : stringlist
    * jsonAsObjectGetKeyList(<jsonstr>) : stringlist
    * jsonStringListToJsonArray(<strlist>) : jsonstr
  * new function: setStringInListAtIndex(<newstring>,<list>,<indexstr>) : list
  * Port from opsi-script 4.11.5.20:
    * More logging to find bug: loginscrpits do not always can Impersonate (uib#2015121410000075):
      * osfuncwin2: Impersonate2User: change parameter / add usercontextsid
      * osfuncwin2: Impersonate2User: more logging if usercontext not found
      * osparser: doLinkFolderActions: if runLoginScripts: call Impersonate2User with usercontextsid
  * osparser: at getMSVersionMap list.add ('ReleaseID=' + GetRegistrystringvalue("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" "ReleaseID",true));
  * DosBatch /showoutput:
    * osfuncwin: switch main window to left/top corner and output window to right/down corner
    * osfunclin: the same and fixes #1936
  * fix: strip newline from strLoadTextfile  and strLoadTextFileWithEncoding
  * new string function md5sumFromFile(<path to file>)
  * new string function timeStampAsFloatStr (floattostrF(now,ffFixed,15,3))
  * new bool function processIsRunning(<process string>)
  * new variant of shellcall as procedure (no result)
  * new variant of shellcall with result string which have the exitcode
  * new string function encryptStringBlow(<keystring>,<datastring>)
  * new string function decryptStringBlow(<keystring>,<datastring>)
  * new String function startProcess(<string>) returns exitcode from sysnative started process
  * new String function startProcess(<string>) returns exitcode from sysnative started process
  * osparser: at getLinuxVersionMap list.add ('SubRelease=' (patchlevel from SLES)
  * osfunclin: function getPackageLock(timeoutsec : integer; kill : boolean) : Boolean;
  * new bool function waitForPackageLock(<seconds timeout string>,<bool should we kill>) (Linux only)
  * Linux: check for free start count
  * osparser:doAktionen:getWord use WorddelimiterSet4 before FindKindOfStatement (needed for 'shellCall(' statement)
  * osconf: Linux: reading winstversion via fileinfo.TFileVersionInfo
  * use LazFileUtils in different units (may replace fileutil ?)
  * osfunclin/osfunc: use FPCProcess.ExitCode instead of ExitStatus to get the final exitcode
  //* oswebservice: retrieveJSONObject: // test memorystream to raise exception here
  * oswebservice: productonClients_getObjects__actionrequests: use getProductOrdering
  * oswebservice: productOnClient_getobject_actualclient: use getProductOrdering
  * new unit osfuncwin3 with fuctions to windows version
  * osparser: at getMSVersionMap new key prodInfoNumber from win32 GetProductInfo
  * osparser: at getMSVersionMap new key prodInfoText from getProductInfoStrByNum from win32 GetProductInfo
  * osfuncwin3: fix GetWinSystemDirectory
  * osmain: initialization:  GetDefaultLang;
  * do not delete temporary cmd files on Loglevel LLconfidential
  * Logging of productordering to LLDebug2 (8)
  * Windows: writing ReleaseId and ProductId to log file header
  * osparser: md5sumFromFile: use ExpandFileName
  * osparser: getValueFromFile / getValueFromFileBySeparator : empty string on failure
  * osencoding: internal Defaultencoding=utf8
  //* oslog: DependentAdd: reencode log strings from utf-8 to system
  * oslog: Logfile now utf-8 encoded
  * oswebservice: productonClients_getObjects__actionrequests: fallback to old sorting method
      if exception in new method (eg. getProductOrdering not reachable)
  * new stringlist function removeFromListByMatch(<searchstring>,<list>)
  * new string function getStringFromListAtIndex(<list>,<indexstring>)
  * osparser: getJsonUrlString: fix for json array as parameter
  * wispecfolder, osfunc: replace SHGetPathFromIDList by SHGetPathFromIDListW
  * osfunc: MakeShellLink: for LinkFile.Save filename in system encoding

-- Detlef Oertel <d.oertel@uib.de>  Tue, 22 Sep 2015 15:00:00 +0200



opsi-winst/opsi-script (4.11.5.14) stable; urgency=low

  * oswebservice: assume opsiservice version=4 in retrieveJSON*
    to avoid access to opsidata which fails if we use local_opsidata
    fixes Access Violations in initial opsi-client-agent installation
  * osfunc: FuncSaveToFile / SaveToFile: logging content on Loglevel 9 ; references #1679
  * osfuncwin: fix broken Shellbatch /showoutput

-- Detlef Oertel <d.oertel@uib.de>  Thu,  10 Sep 2015 15:00:00 +0200

opsi-winst/opsi-script (4.11.5.13) stable; urgency=low

  * do not try to run non existing external sub sections

-- Detlef Oertel <d.oertel@uib.de>  Thu,  21 Aug 2015 15:00:00 +0200

opsi-winst/opsi-script (4.11.5.12) stable; urgency=low

  * Bugfix: osparser: doAktionen: fullfilename not initialized:
    causes causes double load of include or sub if searched file is not existing ; fixes #1656
  * Bugfix: osparser: Filexists*: do not check for existing file with dir/ls if trim(filename)=''
    fixes: https://forum.opsi.org/viewtopic.php?f=6&t=7697
    (FileExists auf leere Variable gibt wahr zurück)

-- Detlef Oertel <d.oertel@uib.de>  Thu,  20 Aug 2015 15:00:00 +0200

opsi-winst/opsi-script (4.11.5.11) stable; urgency=low

  * Bugfix: (FileExist call) changes (GetLastExitCode Result Value):
    (because it call execshellCall to detect symlinks correctly):
    osparser: new parameter for execshellCall: FetchExitCodePublic
    if false result is on FLastPrivateExitCode
    if false true is on FLastExitCodeOfExe (GetLastExitCode)

-- Detlef Oertel <d.oertel@uib.de>  Thu,  13 Aug 2015 15:00:00 +0200

opsi-winst/opsi-script (4.11.5.10) stable; urgency=low

  * oswebservice: retreiveJSONObject
     * start with (new) correct Mimetype and AcceptEncoding
       and fall back to old (wrong) parameters
  * osfunc: FileCopyWin: more log on file in use
  * osfunc: FileCopyWin: fix for Err 32 on setTimeForFile
  * osfunc: TuibRegistry.Create(myforce64: boolean; readonly: boolean);
  * osparser: GetRegistrystringvalue* works now with readonly registry ; fixes #1647
  * osmain: BuildPC: speed up: only ask for changed action request if there was one (uib#2015080710000015)

-- Detlef Oertel <d.oertel@uib.de>  Tue,  21 Jul 2015 15:00:00 +0200

opsi-winst/opsi-script (4.11.5.9) stable; urgency=low

  * osmain: initproduct before run update script: refresh getProductMap
  * osmain: but still use setup as lastaction even if was setup+update
  * oswebservice: new procedure TOpsi4Data.setActualProductActionRequest

-- Detlef Oertel <d.oertel@uib.de>  Fri,  17 Jul 2015 15:00:00 +0200

opsi-winst/opsi-script (4.11.5.8-2) stable; urgency=low

  * update to openssl 1.0.2d

-- Detlef Oertel <d.oertel@uib.de>  Wed,  17 Jul 2015 15:00:00 +0200

opsi-winst/opsi-script (4.11.5.8) stable; urgency=low

  * new statement LoadProductProperties <clientId> <productId> (re-loads productproperty list from Server if possible)
  * GetProductproperty: do not try to use also local_opsidata or opsidata

-- Detlef Oertel <d.oertel@uib.de>  Thu,  09 Jul 2015 15:00:00 +0200

opsi-winst/opsi-script (4.11.5.7) stable; urgency=low

  * GetProductproperty: try / except added

-- Detlef Oertel <d.oertel@uib.de>  Tue,  07 Jul 2015 15:00:00 +0200

opsi-winst/opsi-script (4.11.5.6) stable; urgency=low

  * GetProductpropertyList: also with list as second (default) parameter ; fixes #1602
  * GetProductpropertyList: try to use also local_opsidata, log using default
  * GetProductproperty: if empty try to use also local_opsidata or opsidata, log using default

-- Detlef Oertel <d.oertel@uib.de>  Thu,  02 Jul 2015 15:00:00 +0200

opsi-winst/opsi-script (4.11.5.5) stable; urgency=low

  * upgrade to ssl Libraries 1.0.2c (libeay32.dll, ssleay32.dll); fixes #1586
  * osfuncwin2: updateEnvironment: do not try to run updateEnvironment on windows < 6; fixes #1591
  * osmain: BuildPC: process product only if we have a original action request wich is still set

-- Detlef Oertel <d.oertel@uib.de>  Thu,  25 Jun 2015 15:00:00 +0200

opsi-winst/opsi-script (4.11.5.4) stable; urgency=low

  * Working with ssl protocol: sslvSSLv23 - auto negotation

-- Detlef Oertel <d.oertel@uib.de>  Tue,  02 Jun 2015 15:00:00 +0200

opsi-winst/opsi-script (4.11.5.3) stable; urgency=low

  * (Security Update) oswebservice: use TLS1.2 instead of SSLv3 and fallback downto SSLv3

-- Detlef Oertel <d.oertel@uib.de>  Mon,  01 Jun 2015 15:00:00 +0200

opsi-winst/opsi-script (4.11.5.2) stable; urgency=low

  * upgrade to ssl Libraries 1.0.2a (libeay32.dll, ssleay32.dll)
  * files commands move / rename / hardlink / symlink now work with overwrite; fixes #1435
  * if move / rename fails (file is in use) we retry it with MOVEFILE_DELAY_UNTIL_REBOOT
    So the move will be done at the next reboot. Reboot will be set automatically if not Option -c is set.
  * file command del / delete now with option -c and retry to delete on next boot if file in use ; fixes # 788
  * osfunc: new function opsiunquotestr2
  * new string function unquote2(s1,s2): like unquote but:
        removes only quotes if they found at start and end
        s2 may be two chars long. Then the first char is the start mark
        and the second char is the end mark
  * osparser: GetString: new boolean switch requote
  * osparser: GetString requote=true: change double quoted (""str"") to alternative double quoted ('""');  references #1284
  * new string function: GetShortWinPathName(longpath) ; fixes #581
        Windows only
        Gives short path (8.3) from a long path e.g.
        GetShortWinPathName("C:\Program Files (x86)") gives "C:\PROGRA~2"
        In case of Error the result is an empty string
  * osfunc: startprocess_cp: translate windows showWindowFlag to TProcess TShowWindowOptions
  * osparser: doRegistryHack* : fix for not HKCU reg enties in loginscripts; fixes #1538
  * oswebservice: more log for "unexpected Result from webservice in retrieveJSONObject, number of lines: 0"
  * new string function: GetConfidentialProductProperty : like GetProductProperty but handles the result as confidential string ; fixes #462
  * fixes at GetNTVersion for Win10
  * new boolean function CompareDotSeparatedNumbers(<str1>,<relation str>,<str2>)
        <relation str> may be: one of [<,<=,=,>=,>]
  * new boolean function CompareDotSeparatedStrings(<str1>,<relation str>,<str2>)
        <relation str> may be: one of [<,<=,=,>=,>]

-- Detlef Oertel <d.oertel@uib.de>  Wed,  01 Apr 2015 15:00:00 +0200

opsi-winst/opsi-script (4.11.5.1) stable; urgency=low

  * osparser: commandline := 'cmd64.exe /c "reg delete ""'+key_completepath+'"" /f'; (fixes #1299)
  * port of the changes since 4.11.4.6 to Linux
  * osparser: New files commands hardlink, symlink, rename, move
  * osfunc: new tuibinstall methods: hardlink, symlink, rename (Linux / Windows ; fixes #1319, #362)
  * osparser: execDosBatch: The path to temporary file is only quoted if it contains spaces
  * osparser: execDosBatch: Variables are now allowed as Parameters (but no functions) fixes #1312
  * osparser: executeWith: Variables are now allowed as Parameters (but no functions)
  * osparser: doAktionen: Variables and functions are now allowed as sleepsecond Parameters; fixes #1193
  * osparser: %SriptPath%/../lib as additional Path in Search path for includes; fixes #1201
  * osparser: searchpath for includes are now works also for sub <file> ; fixes #1201
  * New loop statement: for %s% = $start$ to $stop$ do <statement> ;  refernces #407
      - $start$ and $stop$ has to be integer strings
      - $start$ < $stop$ is required
      - in fact a stringlist $start$ to $stop$ is generated over which we iterate while loop
  * osparser: tsLoopForTo  for %s% = $start$ to $stop$ do <statement>
  * osparser: activating winbatch for linux ; fixes #1170
  * replacing opsi-winst constants by opsi-script
  * osparser: produceStringList: New (overloaded) stringlist function (references #1110):
              - removeFromListByContaining(<search string>, <target list>) removes  <search string> from <target list>
              - removeFromListByContaining(<search list>, <target list>) removes  <search list> from <target list>
              - both functions search case insensitive for a matching substring
  * ospparser: fix for filexists* to detect symlinks
  * upgrade to ssl Libraries 1.0.1L (libeay32.dll, ssleay32.dll)
  * osmain: GetParameter + StartProgramModes: more try - except : port from 4.11.4.16
  * osparser: doOpsiServiceCall: more try - except : port from 4.11.4.16
  * osparser: doTextPatchMain: do not use CheckFileExists in SaveToFile ; references #171
  * HowToBuild.txt ; fixes #1372
  * oswebservice: finishOpsiConf: if runproductlist then Logg-Appendmode := true; references #1379
  * new Statement: UpdateEnvironment : Triggers Windows to reload Environment from Registry; Win only; references #1364
  * new Control Statement: Switch  ; references  #740
    - osparser: Switch <string expr ; normally variable>
                  Case <string expr; normally const>
                    statments
                  EndCase
                  [Defaultcase
                    statments
                  EndCase]
                EndSwitch
  * LinkFolder for Linux activated:  No Iconindex
      but link_categories: 'AudioVideo',
      'Audio', 'Video', 'Development', 'Education', 'Game', 'Graphics',  'Network',
      'Office', 'Settings', 'System', 'Utility'
      // from http://standards.freedesktop.org/menu-spec/menu-spec-1.0.html#category-registry
      changes in osparser, osfunclin and new unit oslindesktop
  * some more ExpandFilename calls to handle incorrect path delimiter
  * oswebservice: sendlog: replace old writeLog by new log_write method
  * New Statement: MaximizeWinst at osparser
  * New Functions LoadTextFileWithEncoding(file,encoding) strLoadTextFileWithEncoding(file,encoding) at osparser
  * osencoding: LoadFromFileWithEncoding
  * oswebservice: sendlog: at Linux do not convert logstrings to uft8
  * oslog: dependentadd: more try except
  * osparser: sleepseconds (tsSleep): more try except and more logging
  * osparser: winbatch: trim targetfilename
  * osparser: shellBatch: Parameter at Linux (wrong bash parameter)
  * osmain: User Profile Management (runloginscripts) is now free

-- Detlef Oertel <d.oertel@uib.de>  Thu,  22 Dec 2014 15:00:00 +0200

opsi-winst/opsi-script (4.11.4.14) stable; urgency=low

  * less (only 512 chars) debug output: oswebservice: retrieveJSONObject: log ResultLines.Strings[0] if Result = nil
  * oswebservice: retrieveJSONObject: FillChar(buffer^, 655360,' '); before read to buffer
  * manifest extended for win 10: <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>

-- Detlef Oertel <d.oertel@uib.de>  Thu,  04 Dec 2014 15:00:00 +0200

opsi-winst/opsi-script (4.11.4.13) stable; urgency=low

  * more debug output: oswebservice: retrieveJSONObject: log ResultLines.Strings[0] if Result = nil

-- Detlef Oertel <d.oertel@uib.de>  Wed,  12 Nov 2014 15:00:00 +0200

opsi-winst/opsi-script (4.11.4.12) stable; urgency=low

  * fix: osmain: StartProgramModes: correct Path to the opsiclientd.conf in batch mode
  * Logdevel while writing log to Service decreased
  * fix: command typo: ErrorsOccuredSinceMark is wrong, now also allowed: ErrorsOccurredSinceMark  fixes #1121
  * bakup files of log now are opsi-script.log.x where x is 0 - 8
  * do not run login scripts if user is 'opsisetupadmin'

-- Detlef Oertel <d.oertel@uib.de>  Fri,  24 Oct 2014 15:00:00 +0200

opsi-winst/opsi-script (4.11.4.11) stable; urgency=low

  * new unit: SystemCriticalU
  * osmain: in StartprogramModes set SystemCritical.IsCritical := true;
  * osmain: in BuildPC set SystemCritical.IsCritical := true;
  * osmain: in Terminateapp set SystemCritical.IsCritical := false;
  * osmain: in different execept set SystemCritical.IsCritical := false;

-- Detlef Oertel <d.oertel@uib.de>  Wed,  09 Oct 2014 15:00:00 +0200

opsi-winst/opsi-script (4.11.4.10) stable; urgency=low

  * osparser: doAktionen: tsIncludeInsert: debug outputs for 'index out of range' bug
  * osparser: LoadValidLinesFromFile : fix add loaded sub lines to FLinesOriginList
      to fix 'index out of range' at tsIncludeInsert
  * osparser: new bool function: LineContaining_ExistsIn(<string>, <file name>)

-- Detlef Oertel <d.oertel@uib.de>  Wed,  01 Oct 2014 15:00:00 +0200

opsi-winst/opsi-script (4.11.4.9) stable; urgency=low

  *  osfunc: StartProcess_cp: remove wrong setProgress which may lead to division by zero
  * osbatchgui: new var SavedBatchWindowMode
  * osparser: on NormalizeWinst and IconizeWinst save BatchWindowMode to SavedBatchWindowMode
    and set BatchWindowMode to new value.
    on RestoreWinst set to BatchWindowMode and mode to SavedBatchWindowMode
    Fixes changing the window mode by every sub section call (do_actions)

-- Detlef Oertel <d.oertel@uib.de>  Wed,  20 Aug 2014 15:00:00 +0200

opsi-winst/opsi-script (4.11.4.8) stable; urgency=low

  * osparser: more loggin on LLDebug2 in fileActionsMain: used source and target
  * osparser: more loggin on LLDebug2 in fileActionsMain: additional trim() an target

-- Detlef Oertel <d.oertel@uib.de>  Thu,  07 Aug 2014 15:00:00 +0200

opsi-winst/opsi-script (4.11.4.7) stable; urgency=low

  * osfunc: StartProcess_cp: if timeout is given: use Progressbar to show time progess until Timeout
  * new unit cCPUusage
  * skin.ini; new section [Activitybar]
  * osparser : Line 'Looping through' append trailing '''' fixes # 1116
  * osparser: typo double instead of doubble  fixes #1117
  * new switch: AutoActivityDisplay = (true/false) default=false; if true shows marquee while winbatch/dosbatch
  * osfuncwin: RunCommandAndCaptureOut: non blocking readfile with PeekNamedPipe (so Activitybar may run in Background)
  * new manifest: with assemblyIdentity (needed for maquee style in Activitybar

-- Detlef Oertel <d.oertel@uib.de>  Wed,  23 Jul 2014 15:00:00 +0200

opsi-winst/opsi-script (4.11.4.6) stable; urgency=low

  * osmain: typo (dependenproducts) fixes   #1078
  * osparser: typo (Windowds) fixes   #1078
  * osconf: changed version to 4.11.4.6
  * osparser: fix: RegDeleteKey (https://forum.opsi.org/viewtopic.php?p=27061#p27061) #1086
  * osparser: set Fatal if shellbatch/execwith could not be executed. fixes #1074
  * osparser/oslog: new log file .history which always appends just the timestamp, name and version of the installed product.
  * osparser: PatchTextFile: new command: searchAndReplace <search str> <replace str> (works global and not case sensitive)
  * The temporary file names have now a random component in order to prevent conflicts between different instances of opsi-script. fixes #774
  * subsub bug fix: help to find sub sections in external sub section files (calling section as additional parameter in doAktionen)
  * osparser: getsublist: trim parameters before strtoint
  * osparser: getsublist: adjustBounds: fix for negative second parameter.

-- Detlef Oertel <d.oertel@uib.de>  Thu,  27 May 2014 15:00:00 +0200

opsi-winst/opsi-script (4.11.4.5) stable; urgency=low

  * unquote fix:
    * osparser: 'unquote' function details moved to osfunc: 'opsiunquotestr' function
      (because synautil.unquotestr is buggy: "tes't" gives "test"
    * osfunc: new function  opsiunquotestr
    * osfunc: use of opsiunquotestr in fileexists, chmod
    * osparser: use of opsiunquotestr in fileactionsmain
    * osmain: use of opsiunquotestr in getparameter
  * osparser: doRegistryAllNtUserDats: additional check if we can patch via HKU

-- Detlef Oertel <d.oertel@uib.de>  Thu,  19 May 2014 15:00:00 +0200

opsi-winst/opsi-script (4.11.4.4) stable; urgency=low

  * osfunclin: RunCommandAndCaptureOut: Log exitcode on Loglevel LLInfo
  * osparser: linkActionsMain: fix for index out of bound (while (i <= Sektion.count))  fixes: #958
  * osfunc: StartProcess_cp: log error if time out is reached (inc's error counter)  fixes #506
  * new commands in PatchTextFile (osparser:doTextpatchMain):
         'setKeyValueSeparator char' sets Separator for key value pairs (default is '=')
         'setValueByKey keystr valuestr' search exitsing key and sets the given value.
           If the key not exists, the key/value pair will be created below the line cursor.
  * osparser: scriptstopped := true on ExitWindows /ImmediateReboot and  /ImmediateLogout
  * new function: getValueFromFile (<key string>,<file name> ) : string
  * new function: getValueFromFileBySeparator (<key string>,<separator string>,<file name> ) : string
  * new function: saveTextFile(<list>, < filename>) : bool
  * osparser: TuibInstScript.doAktionen: output initalized (created) fixes #974
  * osfunc: enhanced: TXStringList.getStringValue
  * osparser: produceStringlist: fix in emptylist() function

-- Detlef Oertel <d.oertel@uib.de>  Thu,  20 Mar 2014 15:00:00 +0200

opsi-winst/opsi-script (4.11.4.3) stable; urgency=low

  * opsparser: doFileActions: fix for mixed File section modifiers
  * osfunc: TuibRegistry.WriteEntry: fix logging if regtype is changed: fixes #780
  * osfunc: wait for parent ending also if waitforprocessending is true
  * osfunc: FileCopyWin: use of windows.copyFile instead of fileutils.copyFile
  * osparser: Stingreplace with IgnoreCase for %userprofiledir%
  * osparser: new constant %opsiTmpDir% (c:\opsi.org\tmp ; /tmp )
  * osparser: new constant %opsiLogDir% (c:\opsi.org\log ; /var/log/opsi-client-agent/opsi-script )
  * osparser: new command: FatalOnRuntimeError (default = false)
  * osparser: takeString: LogError if index out of bounds; Fatal if FatalOnSyntaxError
  * oslog: escape control chars
  * osfunc: allcopy/execdelete: handle directories with additional attributes (e.g. hidden)
  * osparser: new function doRegistryNTUserDat
  * new Registry Parameter /NTuserDat: <path to ntuser.dat>
  * osmain: ProcessProduct: looks before processing a product if there is still a action request
  * osparser: for fileExists: replace GetFileInfo by  "FileExists() or DirectoryExists()"
  * fixes to really stop the script interpretation after isfatalerror, issuccess, issuspended
  * new unit opsihwbiosinfo based on tsmbios
  * new infomap getHWBiosInfoMap
  * new bool function runningOnUefi
  * doFileActions: disable windows critical Error Message boxes (SetErrorMode(SEM_FAILCRITICALERRORS))

-- Detlef Oertel <d.oertel@uib.de>  Mon,  9 Dec 2013 15:00:00 +0200

opsi-winst/opsi-script (4.11.4.2) stable; urgency=low

  * make 4.11.4 working under windows
  * osencoding: searchencoding: new methode to read encoding
  * osinteractivegui: opendialog knows now *.ins and *.opsiscript
  * new string function reencodestr(str, from, to)
  * new stringlist function reencodestrlist(strlist, from, to)
  * new stringlist function shellCall( cmd ) ; returns the output of (sysnative) shell with cmd
  * getipByName now uses resolveip at linux
  * manifest extended for win 8.1: <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>:
    http://msdn.microsoft.com/en-us/library/windows/desktop/dn302074%28v=vs.85%29.aspx
  * fix: use of sysnative with winbatch

-- Detlef Oertel <d.oertel@uib.de>  Mon,  23 Sep 2013 15:00:00 +0200

opsi-winst/opsi-script (4.11.4.1) stable; urgency=low

  * splitted project to opsi-script and opsi-script-nogui
  * splitted unit osmain to osmain and osinteractivegui
  * changed unit names:  * wi* -> os*
  * fixed: Feature  491 : real origin file and line number on syntax error (also on included parts)
  * new unit osencode which contain encoding functions
      known encodings are
        UTF-8      utf8
        UTF-8BOM   utf8bom
        Ansi       ansi
        CP1250     cp1250
        CP1251     cp1251
        CP1252     cp1252
        CP1253     cp1253
        CP1254     cp1254
        CP1255     cp1255
        CP1256     cp1256
        CP1257     cp1257
        CP1258     cp1258
        CP437      cp437
        CP850      cp850
        CP852      cp852
        CP866      cp866
        CP874      cp874
        CP932      cp932
        CP936      cp936
        CP949      cp949
        CP950      cp950
        ISO-8859-1 iso8859-1
        ISO-8859-2 iso8859-2
        KOI-8      koi8
        UCS-2LE    ucs2le
        UCS-2BE    ucs2be
  * fixed: Bug 554 : includelogtail calls reencode
  * command IncludeLog has now an optional 3rd parameter sourceEncoding which may be 'auto', 'system' or a valid encoding.
  * nearly all loadfromfile now with reencode
  * script encoding can now be given with for example
      encoding=utf8
  * loglevel of if/else/endif changed to LLinfo (6) fixes 539
  * loglevel of setLoglevel  changed to LLinfo (6) fixes 535
  * new command 'IsSuspended' interupts script execution and leave productOnClient unchanged
  * shellbatch output is now captured
  * fix in linux getprocesslist: output now: short binary name;pid;user;full command line


-- Detlef Oertel <d.oertel@uib.de>  Tue,  30 Jul 2013 15:00:00 +0200

opsi-winst/opsi-script (4.11.4) stable; urgency=low

  * port to Linux
  * removed logginig via syslog
  * %opsiDepotId%
  * changed unit names:
     * wisynth -> osparser
     * wibatch -> osbatchgui
     * wimain -> osmain
     * wifunc -> osfunc
     * wiwin32 -> osfuncwin2

-- Detlef Oertel <d.oertel@uib.de>  Tue,  30 Apr 2012 15:00:00 +0200