The Copyright of this manual holds the uib gmbh in Mainz, Germany.
This manual is published under the creative commons license
Attribution - ShareAlike (by-sa).

A German description you will find here:
http://creativecommons.org/licenses/by-sa/3.0/de/
The German legally binding license:
http://creativecommons.org/licenses/by-sa/3.0/de/legalcode
The English description:
http://creativecommons.org/licenses/by-sa/3.0/
The English license: http://creativecommons.org/licenses/by-sa/3.0/legalcode
The opsi software is in most parts open source.
Not open source are only this new parts which are still under cofunding.
see:
http://uib.de/en/opsi_cofunding/index.html
All the rest of the source code is published under the GPLv3:

The legally binding GPLv3 license:
http://www.gnu.org/licenses/gpl.html
The name opsi is a registered trade mark of the uib gmbh.
The opsi-logo is owned by the uib gmbh and may be used only with explicit permission.
%ProgramFilesDir%: c:\program files
%ProgramFiles32Dir%: c:\Program Files (x86) //since 4.10.8
%ProgramFiles64Dir%: c:\program files //since 4.10.8
%ProgramFilesSysnativeDir% : c:\program files //since 4.10.8
%Systemroot% : c:\windows
%System% : c:\windows\system32
%Systemdrive% : c:
%ProfileDir% : c:\Documents and Settings
%AllUsersProfileDir% or %CommonProfileDir% : c:\Documents and Settings\All Users
%CommonStartMenuPath% or %CommonStartmenuDir% : c:\Documents and Settings\All Users\Startmenu
%CommonAppdataDir% : c:\Documents and Settings\All Users\Application Data
%CommonDesktopDir%
%CommonStartupDir%
%CommonProgramsDir%
User is the logged in user or given by /usercontext.
%AppdataDir% or %CurrentAppdataDir% : c:\Documents and Settings\%USERNAME%\Application Data //since 4.10.8.13
%CurrentStartmenuDir% //since 4.10.8.13
%CurrentDesktopDir% //since 4.10.8.13
%CurrentStartupDir% //since 4.10.8.13
%CurrentProgramsDir% //since 4.10.8.13
%CurrentSendToDir% //since 4.10.8.13
%CurrentProfileDir% //since 4.11.2.1
%UserProfileDir% : c:\Documents and Settings\%USERNAME%
or
%CurrentProfileDir% // since 4.11.2.1
%ScriptPath% or %ScriptDir%
%ScriptDrive%
%WinstDir%
%WinstVersion% //4.10.8.3
%Logfile%
%Host% : value of environment variable HOST.
%PCName%: value of environment variable PCNAME, or if absent of COMPUTERNAME.
%Username% : Name of actual user.
LogLevel (deprecated)
SetLogLevel = <number> or SetLogLevel = <string>
SetLogLevel = 7 SetLogLevel = "7"
ExitOnError = <boolean value>
Message <string> or Message = <const string>
ShowMessageFile <string>
ShowBitMap [<file name>] [<sub titel>]
comment <string> or comment = <const string>
LogError <string> or LogError = <const string>
LogWarning <string> or LogWarning = <const string>
Pause <string> or Pause = <const string>
Stop <string> or stop = <const string>
GetMsVersionInfo //Windows Version Information
GetSystemType //OS Architecture (32/64)
GetRegistrystringvalue ("[key] var")
GetRegistryStringValue32 ("[key] var") //since 4.10.8
GetRegistryStringValue64 ("[key] var") //since 4.10.8
GetRegistryStringValueSysNative ("[key] var") //since 4.10.8
GetvalueFromInifile ( file, section, key, default value )
GetValueFromInifile("myfile","mysec","mykey","")GetProductProperty (<PropertyName>, <DefaultValue> )
trim(<string>)
lower(<string>)
unquote(<string>,<quote-string>) //since 4.11.2.1
getValue(<key string>, <hash string list> )
getValueBySeparator(<key string>,<separator string>,<hash string list> ) //since 4.11.2.1
getLastExitCode
DemandLicenseKey( poolId [, productId [,windowsSoftwareId]] )
set $mykey$ = DemandLicenseKey ("", "office2007")FreeLicense (`poolId [, productId [,windowsSoftwareId]])`
set $result$ = FreeLicense("", "office2007")GetUserSID(<Windows Username>)
GetLoggedInUser //since 4.11.1.2
GetUsercontext //since 4.11.1.2
GetScriptMode possible values Machine,Login //since 4.11.2.1
saveVersionToProfile - save productversion-packageversion to local profile //since 4.11.2.1
readVersionFromProfile : string - read productversion-packageversion from local profile //since 4.11.2.1
scriptWasExecutedBefore : boolean - is true if saved and running productversion-packageversion are identical //since 4.11.2.1
GetHostsName (<hostaddress> )
GetHostsAddr (<hostname> )
ExtractFilePath (<path>)
DecStrToHexStr ( <decstring>, <hexlength>)
HexStrToDecStr (<hexstring>)
base64EncodeStr(<string>)
base64DecodeStr(<string>)
convert2Jsonstr(<string>) //since 4.10.8.3
RandomStr
CompareDotSeparatedStrings(<string1>, <string2>)
CompareDotSeparatedNumbers(<string1>, <string2>)
EnvVar (<environment variable>)
ParamStr
splitString (<string1>, <string2>)
set $list1$ = splitString ("\\server\share\dir","\")splitStringOnWhiteSpace (<string>)
loadTextFile (<file name>)
loadUnicodeTextFile (<file name>)
composeString (<string list>, <Link>)
takeString (<index>, <list>)
takeFirstStringContaining(<list>,<search string>)
getOutStreamFromSection (<dos section name>)
getOutStreamFromSection ('DosBatch_try')getReturnListFromSection (<xml section name>)
getListContaining(<list>,<search string>)
count (<list>)
for %<identifier>% in <list> do <one statement | sub section>
for %s% in $list1$ do sub_test_string
GetProcessList //since 4.11.1.2; gives list of exename;pid;dom/user
GetLocaleInfoMap
GetMSVersionMap
getFileInfoMap( <file name> )
getProductMap // since 4.11.2.1
keys are: id, name, description, advice, productversion, packageversion, priority, installationstate, lastactionrequest, lastactionresult, installedversion, installedpackage, installedmodificationtime
createStringList (<string0>, <string1> ,… )
set $list1$ = createStringList ('a','b')reverse (<list>)
getSectionNames(<ini-file>)
retrieveSection (<section name>)
getSubList (<start index>, <end index>, <list>)
addtolist(<list>,<string>) //since 4.10.8
addListToList(<dest list>,<src list>) //since 4.10.8
<string1> = <string2>
<bool1> AND <bool2>
<bool1> OR <bool2>
NOT(<bool3>)
FileExists (<file name>)
FileExists32 (<file name>)
FileExists64 (<file name>)
FileExistsSysNative (<file name>)
LineExistsIn (<string>, <file name>)
LineBeginning_ExistsIn (<string>, <file name>)
XMLAddNamespace(<XMLfilename>, <XMLelementname>, <XMLnamespace>)
XMLRemoveNamespace(<XMLfilename>, <XMLelementname>, <XMLnamespace>)
HasMinimumSpace (<drive letter>, <capacity>)
Example:
if not (HasMinimumSpace ("%SYSTEMDRIVE%", "500 MB"))
LogError "Neede Space of 500 MB not available on %SYSTEMDRIVE%"
isFatalError
endifopsiLicenseManagementEnabled
runningAsAdmin //since 4.11.1.1
isLoginScript //since 4.11.2.1
Killtask <process name>
requiredWinstVersion <relation operator> <version>
requiredWinstVersion >= "4.10"
includelog <file name> <tail size> //since 4.11.2.1
includelog "%Scriptpath%\test-files\10lines.txt" "5"
if - else - endif
Syntax:
if <condition>
;statement(s)
[else
;statement(s)]
endif
Example:
Set $NTVer$ = GetMsVersionInfo
if ( $NTVer$ >= "6" )
sub_install_win7
else
if ( $NTVer$ = "5.1" )
sub_install_winXP
else
stop "not a supported OS-Version"
endif
endifisFatalError
ExitWindows /Reboot
ExitWindows /ImmediateReboot
ExitWindows /ImmediateLogout
ExitWindows /ShutdownWanted
ExitWindows /RebootWanted (deprecated, acts like /Reboot)
sleepSeconds <Integer>
Function: execute programs via Windows API
[WinBatch<identifier>]
Modifier:
/LetThemGo
/WaitForProcessEnding "<program.exe>"
/TimeOutSeconds <seconds>
/WaitForWindowAppearing <window title> (does not work with 64 Bit programs)
/WaitForWindowVanish <window title> (does not work with 64 Bit programs)
Function: Execute section via cmd.exe
[DosBatch<identifier>] <optional parameters> <winst <modifier>>
[DosInAnIcon<identifier>] <optional parameters> <winst <modifier>>
Modifier: //since 4.11.1.1
/32Bit
/64Bit
/SysNative
The modifiers has to be seperated by winst from the parameters.
DosInAnIcon_do_64bit_stuff winst /64Bit
Commands: see manual
Function: Execute section via any interpreter
[ExecWith<identifier>] <path to interpreter>
Commands: see manual
Function: File Operations
[Files<identifier>]
Modifier:
/AllNTUserProfiles
/AllNTUserSendTo
/32Bit //since 4.10.8
/64Bit //since 4.10.8
/SysNative //since 4.10.8
Commands:
checkTargetPath = <destination directory>
copy [Options] <source file(s)> <destination directory>
some options:
-s rekursiv
-V version control against targetdir
-v version control against targetdir, %systemroot% and %system% (do not use it)
-c continue without reboot even if it is needed
-d date check
-u update
-x extract
-w weak (do not overwrite protected files)
-n no overwrite
-r copy read only attribute
delete [Options] <path[/mask]]
some options: -s rekursiv -f force
Example (do not forget the trailing Backslash):
delete -sf c:\delete_this_dir\
del [Options] <path[/mask]] //since 4.11.2.1
Works like delete but on
del -s -f c:\not-exists
if c:\not-exists not exists it do not search complete c:\ for not-exits
Example (you may forget the trailing Backslash):
del -sf c:\delete_this_dir
Function: edit Registry
Standard method call:
[Registry<identifier>]
works with the specified section.
Alternative method call:
Registry loadUnicodeTextFile(<.reg file>) /regedit
import the specified <.reg file>.
Alternative method call (deprecated):
Registry loadUnicodeTextFile(<.addreg file>) /addreg
import the specified <.addreg file>.
Modifier:
/AllNTUserDats
/32Bit //since 4.10.8
/64Bit //since 4.10.8
/SysNative //since 4.10.8
Commands:
OpenKey <Key>
openkey [HKLM\Software\opsi.org]
Set <varname> = <registry type>:<value>
Add <varname> = <registry type>:<value>
Examples for registry types:
set "var1" = "my string" set "var2" = REG_SZ:"my string" set "var3" = REG_EXPAND_SZ:"%ProgramFiles%" set "var4" = REG_DWORD:123 (Decimal) set "var5" = REG_BINARY:00 01 02 0F 10 set "var6" = REG_MULTI_SZ:"A|BC|de"
Supp <varname> <list char> <supplement>
supp "Path" ; "C:\utils; %JAVABIN%"
GetMultiSZFromFile <varname> <file name>
SaveValueToFile <varname> <file name>
DeleteVar <varname>
DeleteKey <registry key> (does since 4.11.2.1 also work with /AllNTUserDats)
Function: edit Ini-files
[Patches<identifier>] <file name>
Commands:
add [<section name>] <variable1> = <value1>
set [<section name>]<variable1> = <value1>
addnew [<section name>]<variable1> = <value1>
change [<section name>]<variable1> = <value1>
del [<section name>] <variable1> = <value1>
del [<section name>] <variable1>
delsec [<section name>]
replace <variable1>=<value1> <variable2>=<value2>
Function: edit text files
[PatchTextFile<identifier>] <file name>
Commands:
Set_Mozilla_Pref ("<preference type>", "<preference key>", "<preference value>")
preference types are usally:
pref, user_pref, lock_pref
AddStringListElement_To_Mozilla_Pref ("<preference type>", "<preference key>", "<add value>")
Set_Netscape_User_Pref ("<key>", "<value>") (deprecated)
AddstringListElement_To_Netscape_User_Pref (deprecated)
FindLine <search string>
FindLine_StartingWith <search string>
FindLine_Containing <search string>
GoToTop
AdvanceLine [<number of lines>]
GoToBottom
DeleteTheLine
AddLine_ <line> or Add_Line_ <line>
InsertLine <line> or Insert_Line_ <line>
AppendLine <line> or Append_Line <line>
Append_File <file name>
Subtract_File <file name>
SaveToFile <file name>
Sorted
Function: Startmenue + Desktop Icons
[LinkFolder<identifier>]
Commands:
set_basefolder <system folder>
set_subfolder <folder path>
set_link name: <link name> target: <path and name of the program> parameters: [command line arguments] working_dir: [working directory] icon_file: [path and name of icon file, default=target] icon_index: [number of icon in icon file, default=0] end_link
delete_element <link name>
delete_subfolder <folder path>
The predefined virtual system folders which can be used are:
desktop, sendto, startmenu, startup, programs, desktopdirectory,
common_startmenu, common_programs, common_startup, common_desktopdirectory
Example
set_basefolder common_desktopdirectory set_subfolder "" set_link name: opsi-winst target: "%ProgramFiles32Dir%\opsi.org\opsi-client-agent\opsi-winst\winst32.exe" end_link
Function: hosts-files bearbeiten
[PatchHosts<identifier>]
Commands:
setaddr <hostname> <IPaddress>
setname <IPaddress> <hostname>
setalias <hostname> <alias>
setalias <IPadresse> <alias>
delalias <hostname> <alias>
delalias <IPaddress> <alias>
delhost <hostname>
delhost <ipadresse>
setComment <ident> <comment>
Function: Execute section via python interpreter
[ExecPython<identifier>]
Commands: see manual