diff --git a/Download-MCRA/__pycache__/Mcra90ApiLib.cpython-37.pyc b/Download-MCRA/__pycache__/Mcra90ApiLib.cpython-37.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..51371ac16b12b9345a3ade0ad45eee7445a3a9a5
Binary files /dev/null and b/Download-MCRA/__pycache__/Mcra90ApiLib.cpython-37.pyc differ
diff --git a/Powershell/.gitkeep b/Powershell/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Powershell/MCRA.Tools/.gitkeep b/Powershell/MCRA.Tools/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Powershell/MCRA.Tools/Command-Credential.ps1 b/Powershell/MCRA.Tools/Command-Credential.ps1
new file mode 100644
index 0000000000000000000000000000000000000000..d495aa7e175c2225512873320b09f44e4957bc39
--- /dev/null
+++ b/Powershell/MCRA.Tools/Command-Credential.ps1
@@ -0,0 +1,1020 @@
+#
+#
+# Aangepast door HH, om meer in lijn met de standaard Piece naamgeving te komen.
+# dd 06-11-2016
+# Enum-Creds        -> Read-Credential (gecombineerd)
+# Read-Creds        -> Read-Credential
+# Del-Creds         -> Clear-Credential
+# Write-Creds       -> Write-Credential
+# Read-Creds        -> Get-Credential (geeft PSCredential object)
+# Write-Creds       -> Set-Credential (gebruikt PSCredential object)
+#
+
+# Author: Jim Harrison (jim@isatools.org)
+# Date  : 2012/05/20
+# Vers  : 1.5
+
+# * I STRONGLY recommend that you become familiar
+# * with http://msdn.microsoft.com/en-us/library/windows/desktop/aa374788(v=vs.85).aspx
+# * before you create new credentials with -CredType other than "GENERIC"
+
+# http://msdn.microsoft.com/en-us/library/windows/desktop/aa374788(v=vs.85).aspx
+# http://stackoverflow.com/questions/7162604/get-cached-credentials-in-powershell-from-windows-7-credential-manager
+# http://msdn.microsoft.com/en-us/library/windows/desktop/aa374788(v=vs.85).aspx
+# http://blogs.msdn.com/b/peerchan/archive/2005/11/01/487834.aspx
+
+
+# De C-code om toegang te krijgen.
+[String] $PsCredmanUtils = @"
+using System;
+using System.Runtime.InteropServices;
+
+namespace PsUtils
+{
+    public class CredMan
+    {
+        #region Imports
+        // DllImport derives from System.Runtime.InteropServices
+        [DllImport("Advapi32.dll", SetLastError = true, EntryPoint = "CredDeleteW", CharSet = CharSet.Unicode)]
+        private static extern bool CredDeleteW([In] string target, [In] CRED_TYPE type, [In] int reservedFlag);
+
+        [DllImport("Advapi32.dll", SetLastError = true, EntryPoint = "CredEnumerateW", CharSet = CharSet.Unicode)]
+        private static extern bool CredEnumerateW([In] string Filter, [In] int Flags, out int Count, out IntPtr CredentialPtr);
+
+        [DllImport("Advapi32.dll", SetLastError = true, EntryPoint = "CredFree")]
+        private static extern void CredFree([In] IntPtr cred);
+
+        [DllImport("Advapi32.dll", SetLastError = true, EntryPoint = "CredReadW", CharSet = CharSet.Unicode)]
+        private static extern bool CredReadW([In] string target, [In] CRED_TYPE type, [In] int reservedFlag, out IntPtr CredentialPtr);
+
+        [DllImport("Advapi32.dll", SetLastError = true, EntryPoint = "CredWriteW", CharSet = CharSet.Unicode)]
+        private static extern bool CredWriteW([In] ref Credential userCredential, [In] UInt32 flags);
+        #endregion
+
+        #region Fields
+        public enum CRED_FLAGS : uint
+        {
+            NONE = 0x0,
+            PROMPT_NOW = 0x2,
+            USERNAME_TARGET = 0x4
+        }
+
+        public enum CRED_ERRORS : uint
+        {
+            ERROR_SUCCESS = 0x0,
+            ERROR_INVALID_PARAMETER = 0x80070057,
+            ERROR_INVALID_FLAGS = 0x800703EC,
+            ERROR_NOT_FOUND = 0x80070490,
+            ERROR_NO_SUCH_LOGON_SESSION = 0x80070520,
+            ERROR_BAD_USERNAME = 0x8007089A
+        }
+
+        public enum CRED_PERSIST : uint
+        {
+            SESSION = 1,
+            LOCAL_MACHINE = 2,
+            ENTERPRISE = 3
+        }
+
+        public enum CRED_TYPE : uint
+        {
+            GENERIC = 1,
+            DOMAIN_PASSWORD = 2,
+            DOMAIN_CERTIFICATE = 3,
+            DOMAIN_VISIBLE_PASSWORD = 4,
+            GENERIC_CERTIFICATE = 5,
+            DOMAIN_EXTENDED = 6,
+            MAXIMUM = 7,      // Maximum supported cred type
+            MAXIMUM_EX = (MAXIMUM + 1000),  // Allow new applications to run on old OSes
+        }
+
+        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
+        public struct Credential
+        {
+            public CRED_FLAGS Flags;
+            public CRED_TYPE Type;
+            public string TargetName;
+            public string Comment;
+            public DateTime LastWritten;
+            public UInt32 CredentialBlobSize;
+            public string CredentialBlob;
+            public CRED_PERSIST Persist;
+            public UInt32 AttributeCount;
+            public IntPtr Attributes;
+            public string TargetAlias;
+            public string UserName;
+        }
+
+        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
+        private struct NativeCredential
+        {
+            public CRED_FLAGS Flags;
+            public CRED_TYPE Type;
+            public IntPtr TargetName;
+            public IntPtr Comment;
+            public System.Runtime.InteropServices.ComTypes.FILETIME LastWritten;
+            public UInt32 CredentialBlobSize;
+            public IntPtr CredentialBlob;
+            public UInt32 Persist;
+            public UInt32 AttributeCount;
+            public IntPtr Attributes;
+            public IntPtr TargetAlias;
+            public IntPtr UserName;
+        }
+        #endregion
+
+        #region Child Class
+        private class CriticalCredentialHandle : Microsoft.Win32.SafeHandles.CriticalHandleZeroOrMinusOneIsInvalid
+        {
+            public CriticalCredentialHandle(IntPtr preexistingHandle)
+            {
+                SetHandle(preexistingHandle);
+            }
+
+            private Credential XlateNativeCred(IntPtr pCred)
+            {
+                NativeCredential ncred = (NativeCredential)Marshal.PtrToStructure(pCred, typeof(NativeCredential));
+                Credential cred = new Credential();
+                cred.Type = ncred.Type;
+                cred.Flags = ncred.Flags;
+                cred.Persist = (CRED_PERSIST)ncred.Persist;
+
+                long LastWritten = ncred.LastWritten.dwHighDateTime;
+                LastWritten = (LastWritten << 32) + ncred.LastWritten.dwLowDateTime;
+                cred.LastWritten = DateTime.FromFileTime(LastWritten);
+
+                cred.UserName = Marshal.PtrToStringUni(ncred.UserName);
+                cred.TargetName = Marshal.PtrToStringUni(ncred.TargetName);
+                cred.TargetAlias = Marshal.PtrToStringUni(ncred.TargetAlias);
+                cred.Comment = Marshal.PtrToStringUni(ncred.Comment);
+                cred.CredentialBlobSize = ncred.CredentialBlobSize;
+                if (0 < ncred.CredentialBlobSize)
+                {
+                    cred.CredentialBlob = Marshal.PtrToStringUni(ncred.CredentialBlob, (int)ncred.CredentialBlobSize / 2);
+                }
+                return cred;
+            }
+
+            public Credential GetCredential()
+            {
+                if (IsInvalid)
+                {
+                    throw new InvalidOperationException("Invalid CriticalHandle!");
+                }
+                Credential cred = XlateNativeCred(handle);
+                return cred;
+            }
+
+            public Credential[] GetCredentials(int count)
+            {
+                if (IsInvalid)
+                {
+                    throw new InvalidOperationException("Invalid CriticalHandle!");
+                }
+                Credential[] Credentials = new Credential[count];
+                IntPtr pTemp = IntPtr.Zero;
+                for (int inx = 0; inx < count; inx++)
+                {
+                    pTemp = Marshal.ReadIntPtr(handle, inx * IntPtr.Size);
+                    Credential cred = XlateNativeCred(pTemp);
+                    Credentials[inx] = cred;
+                }
+                return Credentials;
+            }
+
+            override protected bool ReleaseHandle()
+            {
+                if (IsInvalid)
+                {
+                    return false;
+                }
+                CredFree(handle);
+                SetHandleAsInvalid();
+                return true;
+            }
+        }
+        #endregion
+
+        #region Custom API
+        public static int CredDelete(string target, CRED_TYPE type)
+        {
+            if (!CredDeleteW(target, type, 0))
+            {
+                return Marshal.GetHRForLastWin32Error();
+            }
+            return 0;
+        }
+
+        public static int CredEnum(string Filter, out Credential[] Credentials)
+        {
+            int count = 0;
+            int Flags = 0x0;
+            if (string.IsNullOrEmpty(Filter) ||
+                "*" == Filter)
+            {
+                Filter = null;
+                if (6 <= Environment.OSVersion.Version.Major)
+                {
+                    Flags = 0x1; //CRED_ENUMERATE_ALL_CREDENTIALS; only valid is OS >= Vista
+                }
+            }
+            IntPtr pCredentials = IntPtr.Zero;
+            if (!CredEnumerateW(Filter, Flags, out count, out pCredentials))
+            {
+                Credentials = null;
+                return Marshal.GetHRForLastWin32Error();
+            }
+            CriticalCredentialHandle CredHandle = new CriticalCredentialHandle(pCredentials);
+            Credentials = CredHandle.GetCredentials(count);
+            return 0;
+        }
+
+        public static int CredRead(string target, CRED_TYPE type, out Credential Credential)
+        {
+            IntPtr pCredential = IntPtr.Zero;
+            Credential = new Credential();
+            if (!CredReadW(target, type, 0, out pCredential))
+            {
+                return Marshal.GetHRForLastWin32Error();
+            }
+            CriticalCredentialHandle CredHandle = new CriticalCredentialHandle(pCredential);
+            Credential = CredHandle.GetCredential();
+            return 0;
+        }
+
+        public static int CredWrite(Credential userCredential)
+        {
+            if (!CredWriteW(ref userCredential, 0))
+            {
+                return Marshal.GetHRForLastWin32Error();
+            }
+            return 0;
+        }
+
+        #endregion
+
+        private static int AddCred()
+        {
+            Credential Cred = new Credential();
+            string Password = "Password";
+            Cred.Flags = 0;
+            Cred.Type = CRED_TYPE.GENERIC;
+            Cred.TargetName = "Target";
+            Cred.UserName = "UserName";
+            Cred.AttributeCount = 0;
+            Cred.Persist = CRED_PERSIST.ENTERPRISE;
+            Cred.CredentialBlobSize = (uint)Password.Length;
+            Cred.CredentialBlob = Password;
+            Cred.Comment = "Comment";
+            return CredWrite(Cred);
+        }
+
+        private static bool CheckError(string TestName, CRED_ERRORS Rtn)
+        {
+            switch(Rtn)
+            {
+                case CRED_ERRORS.ERROR_SUCCESS:
+                    Console.WriteLine(string.Format("'{0}' worked", TestName));
+                    return true;
+                case CRED_ERRORS.ERROR_INVALID_FLAGS:
+                case CRED_ERRORS.ERROR_INVALID_PARAMETER:
+                case CRED_ERRORS.ERROR_NO_SUCH_LOGON_SESSION:
+                case CRED_ERRORS.ERROR_NOT_FOUND:
+                case CRED_ERRORS.ERROR_BAD_USERNAME:
+                    Console.WriteLine(string.Format("'{0}' failed; {1}.", TestName, Rtn));
+                    break;
+                default:
+                    Console.WriteLine(string.Format("'{0}' failed; 0x{1}.", TestName, Rtn.ToString("X")));
+                    break;
+            }
+            return false;
+        }
+
+        /*
+         * Note: the Main() function is primarily for debugging and testing in a Visual
+         * Studio session.  Although it will work from PowerShell, it's not very useful.
+         */
+        public static void Main()
+        {
+            Credential[] Creds = null;
+            Credential Cred = new Credential();
+            int Rtn = 0;
+
+            Console.WriteLine("Testing CredWrite()");
+            Rtn = AddCred();
+            if (!CheckError("CredWrite", (CRED_ERRORS)Rtn))
+            {
+                return;
+            }
+            Console.WriteLine("Testing CredEnum()");
+            Rtn = CredEnum(null, out Creds);
+            if (!CheckError("CredEnum", (CRED_ERRORS)Rtn))
+            {
+                return;
+            }
+            Console.WriteLine("Testing CredRead()");
+            Rtn = CredRead("Target", CRED_TYPE.GENERIC, out Cred);
+            if (!CheckError("CredRead", (CRED_ERRORS)Rtn))
+            {
+                return;
+            }
+            Console.WriteLine("Testing CredDelete()");
+            Rtn = CredDelete("Target", CRED_TYPE.GENERIC);
+            if (!CheckError("CredDelete", (CRED_ERRORS)Rtn))
+            {
+                return;
+            }
+            Console.WriteLine("Testing CredRead() again");
+            Rtn = CredRead("Target", CRED_TYPE.GENERIC, out Cred);
+            if (!CheckError("CredRead", (CRED_ERRORS)Rtn))
+            {
+                Console.WriteLine("if the error is 'ERROR_NOT_FOUND', this result is OK.");
+            }
+        }
+    }
+}
+"@
+
+$PsCredMan = $null
+try
+{
+    $PsCredMan = [PsUtils.CredMan]
+}
+catch
+{
+    #only remove the error we generate
+    if ( $Error.Count -gt 1 ){
+        $Error.RemoveAt($Error.Count-1)
+    }
+}
+if($null -eq $PsCredMan)
+{
+    Add-Type $PsCredmanUtils
+}
+
+#region Internal Tools
+[HashTable] $ErrorCategory = @{0x80070057 = "InvalidArgument";
+                               0x800703EC = "InvalidData";
+                               0x80070490 = "ObjectNotFound";
+                               0x80070520 = "SecurityError";
+                               0x8007089A = "SecurityError"}
+
+# Interne functies:
+function Get-CredType
+{
+    Param
+    (
+        [Parameter(Mandatory=$true)][ValidateSet( "GENERIC",
+                                                  "DOMAIN_PASSWORD",
+                                                  "DOMAIN_CERTIFICATE",
+                                                  "DOMAIN_VISIBLE_PASSWORD",
+                                                  "GENERIC_CERTIFICATE",
+                                                  "DOMAIN_EXTENDED",
+                                                  "MAXIMUM",
+                                                  "MAXIMUM_EX")][String] $CredType
+    )
+
+    switch($CredType)
+    {
+        "GENERIC" {return [PsUtils.CredMan+CRED_TYPE]::GENERIC}
+        "DOMAIN_PASSWORD" {return [PsUtils.CredMan+CRED_TYPE]::DOMAIN_PASSWORD}
+        "DOMAIN_CERTIFICATE" {return [PsUtils.CredMan+CRED_TYPE]::DOMAIN_CERTIFICATE}
+        "DOMAIN_VISIBLE_PASSWORD" {return [PsUtils.CredMan+CRED_TYPE]::DOMAIN_VISIBLE_PASSWORD}
+        "GENERIC_CERTIFICATE" {return [PsUtils.CredMan+CRED_TYPE]::GENERIC_CERTIFICATE}
+        "DOMAIN_EXTENDED" {return [PsUtils.CredMan+CRED_TYPE]::DOMAIN_EXTENDED}
+        "MAXIMUM" {return [PsUtils.CredMan+CRED_TYPE]::MAXIMUM}
+        "MAXIMUM_EX" {return [PsUtils.CredMan+CRED_TYPE]::MAXIMUM_EX}
+    }
+}
+
+function Get-CredPersist
+{
+    Param
+    (
+        [Parameter(Mandatory=$true)][ValidateSet("SESSION",
+                                                  "LOCAL_MACHINE",
+                                                  "ENTERPRISE")][String] $CredPersist
+    )
+
+    switch($CredPersist)
+    {
+        "SESSION" {return [PsUtils.CredMan+CRED_PERSIST]::SESSION}
+        "LOCAL_MACHINE" {return [PsUtils.CredMan+CRED_PERSIST]::LOCAL_MACHINE}
+        "ENTERPRISE" {return [PsUtils.CredMan+CRED_PERSIST]::ENTERPRISE}
+    }
+}
+
+# Functies die geexporteerd worden:
+
+Function Clear-Credential {
+<#
+.SYNOPSIS
+Verwijdert credentials uit de Windows Credential store.
+
+.DESCRIPTION
+Verwijdert credentials uit de Windows Credential store, d.m.v. een calls
+naar Win32 CredDeleteW via [PsUtils.CredMan]::CredDelete.
+
+.PARAMETER Target
+Het doelnaam van de credential, in de credentialstore.
+
+.PARAMETER Type
+Het type credential; standaard "GENERIC". Mogelijke waarden zijn:
+GENERIC, DOMAIN_PASSWORD, DOMAIN_CERTIFICATE, DOMAIN_VISIBLE_PASSWORD,
+GENERIC_CERTIFICATE, DOMAIN_EXTENDED, MAXIMUM, MAXIMUM_EX.
+
+.PARAMETER Credential
+Via de pipeline kun je ook een CredMan+Credential object doorgeven,
+zodat je dit commando 'achter' bijvoorbeeld Read-Credential kunt zetten.
+
+.EXAMPLE
+Clear-Credential -Target 'iets'
+Verwijdert de credentials met targetname 'iets' en Type 'GENERIC'.
+
+.EXAMPLE
+Read-Credential | Clear-Credential
+Verwijdert alle Windows credentials.
+
+.INPUTS
+[PsUtils.CredMan+Credential]
+
+.OUTPUTS
+[Management.Automation.ErrorRecord] by een fout.
+
+.NOTES
+    Naam:           Clear-Credential
+    Auteur:         Jim Harrison (jim@isatools.org)
+    Bron:           https://gallery.technet.microsoft.com/scriptcenter/PowerShell-Credentials-d44c3cde
+    Wijzigingen:    20-05-2012  Jim Harrison    1.5     Van Internet
+                    14-09-2016  HH         1.6     Aanpassingen om er een module van te maken;
+                                                        Namen van de functies aangepast, meer in lijn
+                                                        met Powershell.
+                    10-11-2016  HH         1.7     Verdere aanpassingen aan naamgeving en output objecten
+                                                        Input via pipeline, teksten vertaald, twee parametersets
+                                                        gemaakt.
+                    24-08-2017  HH         1.8     TargetName als positionele parameter aangemaakt.
+                    24-08-2018  HH         1.9     Aangepast aan nieuwe scriptsjabloon
+
+#>
+
+    [CmdletBinding(
+        SupportsShouldProcess = $True,
+        DefaultParameterSetName='SeparateFields'
+    )]
+    Param(
+        [Parameter(Mandatory=$true,ParameterSetName='SeparateFields',Position=1)]
+        [ValidateLength(1,32767)]
+        [String] $TargetName,
+        [Parameter(Mandatory=$false,ParameterSetName='SeparateFields')]
+        [ValidateSet("GENERIC",
+                      "DOMAIN_PASSWORD",
+                      "DOMAIN_CERTIFICATE",
+                      "DOMAIN_VISIBLE_PASSWORD",
+                      "GENERIC_CERTIFICATE",
+                      "DOMAIN_EXTENDED",
+                      "MAXIMUM",
+                      "MAXIMUM_EX")]
+        [String] $Type = "GENERIC",
+        [Parameter(ValueFromPipeline=$True,ParameterSetName='FieldsInObject')]
+        [PsUtils.CredMan+Credential[]] $Credential
+    )
+    BEGIN   {
+        # Strict modus
+        Set-StrictMode -Version Latest
+        # Een versienummer van het script.
+        Set-Variable versie -option Constant -value "1.9" -WhatIf:$false
+        # Schrijf een melding op het scherm indien nodig (bij -Verbose)
+        $scriptproperty=Write-CmdLetStartMessage -Version $versie
+
+    } # Einde BEGIN
+    PROCESS {
+        if ( $PSCmdlet.ParameterSetName -eq 'SeparateFields' ) {
+            # Er worden losse parameters doorgegeven. Even een array-object van maken.
+            [PsUtils.CredMan+Credential] $Credential = New-Object PsUtils.CredMan+Credential
+            $Credential.TargetName=$TargetName
+            $Credential.Type=$Type
+        }
+        ForEach ( $cred in $Credential ) {
+            [Int] $Results = 0
+            if ($pscmdlet.ShouldProcess($cred.TargetName, "Credentials zouden worden verwijderd.")) {
+                try {
+                    $Results = [PsUtils.CredMan]::CredDelete($cred.TargetName, $(Get-CredType $cred.Type))
+                }
+                catch {
+                    Write-Warning "  [WARN ] $($MyInvocation.MyCommand) Fout bij het verwijderen van credentials $($cred.TargetName), namelijk $($_.Exception.Message)."
+                }
+            }
+        }
+    } # Einde PROCESS
+    END     {
+        # Schrijft een melding op het scherm indien nodig (bij -Verbose)
+        Write-CmdLetStopMessage -ScriptProperty $scriptproperty
+    } # Einde END
+}
+
+Function Read-Credential {
+<#
+.SYNOPSIS
+Haalt de credentials op uit de Windows Credential store.
+
+.DESCRIPTION
+Haalt de credentials op uit de Credential store, via een calls naar Win32
+CredEnumerateW via [PsUtils.CredMan]::CredEnum.
+
+.PARAMETER TargetName
+De naam van de credential.
+
+.EXAMPLE
+Read-Credential -TargetName 'EFSA'
+Haalt de credential gegevens op van 'EFSA'.
+
+.EXAMPLE
+Read-Credential | Clear-Credential
+Verwijdert alle Windows credentials.
+
+.EXAMPLE
+Read-Credential|Format-Table -View password
+Geeft de wachtwoorden in platte tekst weer, voor zover mogelijk.
+
+.EXAMPLE
+Read-Credential|Select *
+Geeft alle velden weer, dus ook de wachtwoorden.
+
+.EXAMPLE
+(Read-Credential).CredentialBlob
+Geeft alle wachtwoorden weer, zoals die zijn opgeslagen.
+
+.EXAMPLE
+[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR(((read-credential 'EFSA').CredentialBlob|ConvertTo-SecureString)))
+Als het wachtwoord als secure is opgeslagen, wordt het vertaald naar platte tekst.
+
+.INPUTS
+
+.OUTPUTS
+[PsUtils.CredMan+Credential[]] na succes.
+[Management.Automation.ErrorRecord] bij fout.
+
+.NOTES
+    Naam:           Read-Credential
+    Auteur:         Jim Harrison (jim@isatools.org)
+    Bron:           https://gallery.technet.microsoft.com/scriptcenter/PowerShell-Credentials-d44c3cde
+    Wijzigingen:    20-05-2012  Jim Harrison    1.5     Van Internet
+                    14-09-2016  HH                 Aanpassingen om er een module van te maken;
+                                                        Namen van de functies aangepast, meer in lijn
+                                                        met Powershell.
+                    10-11-2016  HH         1.7     Verdere aanpassingen zodat het script volledig in lijn
+                                                        is met scripts. Help in nederlands vertaald.
+                    24-08-2017  HH         1.8     Parameter positional gemaakt, zodat default de TargetName kan worden gebruikt.
+                    24-08-2018  HH         1.9     Aangepast aan nieuwe scriptsjabloon
+
+#>
+
+#
+# (c) WUR
+# Pas het versienummer hieronder en hierboven aan als je iets wijzigt.
+# Geef bij .NOTES hierboven aan wat je precies hebt gewijzigd.
+#
+    [OutputType('PsUtils.CredMan+Credential')]
+    [CmdletBinding(
+        SupportsShouldProcess = $True # Hiermee zorg je dat WhatIf en Confirm gebruikt kunnen worden :-)
+    )]
+    Param(
+        [Parameter(Mandatory=$false,Position=1)]
+        [AllowEmptyString()]
+        [String] $TargetName = [String]::Empty
+    )
+    BEGIN   {
+        # Strict modus
+        Set-StrictMode -Version Latest
+        # Een versienummer van het script.
+        Set-Variable versie -option Constant -value "1.9" -WhatIf:$false
+        # Schrijf een melding op het scherm indien nodig (bij -Verbose)
+        $scriptproperty=Write-CmdLetStartMessage -Version $versie
+
+    } # Einde BEGIN
+    PROCESS {
+        [PsUtils.CredMan+Credential[]] $Creds = [Array]::CreateInstance([PsUtils.CredMan+Credential], 0)
+        [Int] $Results = 0
+        try {
+            $Results = [PsUtils.CredMan]::CredEnum($TargetName, [Ref]$Creds)
+        }
+        catch {
+            return $_
+        }
+        switch($Results) {
+            0           { break }
+            0x80070490  { break } #ERROR_NOT_FOUND
+            default {
+                Write-Warning "  [WARN ] $($MyInvocation.MyCommand) Fout bij het lezen van credentials $($cred.TargetName), namelijk $($_.Exception.Message)."
+            }
+        }
+        $Creds
+    } # Einde PROCESS
+    END     {
+        # Schrijft een melding op het scherm indien nodig (bij -Verbose)
+        Write-CmdLetStopMessage -ScriptProperty $scriptproperty
+    } # Einde END
+} # Einde Function
+
+Function Write-Credential {
+<#
+.SYNOPSIS
+Schrijft gegevens in de Windows Credential store.
+
+.DESCRIPTION
+Schrijft gegevens weg in de Credential store. Met dit commando kun je nieuwe gegevens wegschrijven
+of bestaande gegevens bijwerken. Dit gebeurt d.m.v. een call naar Win32 CredWriteW via
+[PsUtils.CredMan]::CredWrite.
+
+.INPUTS
+
+.OUTPUTS
+
+.PARAMETER TargetName
+De naam waaronder de credential wordt weggeschreven in de store.
+
+.PARAMETER UserName
+De gebruikersnaam van het weg te schrijven credential.
+
+.PARAMETER Password
+Het wachtwoord van het weg te schrijven credential.
+
+.PARAMETER Secure
+Als je de parameters Username/Password gebruikt, wordt het wachtwoord standaard als platte tekst
+opgeslagen in de credential store, zoals met veel wachtwoorden gebeurt.
+Mocht je liever een Powershell securestring opslaan (=.Net SecureString Class) dan moet
+je deze parameter opgeven.
+
+.PARAMETER Credential
+De gebruikersnaam en het wachtwoord in een PSCredential object. Het wachtwoord wordt als Securestring
+opgeslagen. Je moet kiezen tussen het gebruik van de parameters UserName/Password/Secure enerzijds,
+of Credential anderzijds.
+
+.PARAMETER Comment
+Eventueel commentaar dat je bij de credential wilt noteren.
+
+.PARAMETER Type
+Het type credential; standaard "GENERIC". Mogelijke waarden zijn:
+GENERIC, DOMAIN_PASSWORD, DOMAIN_CERTIFICATE, DOMAIN_VISIBLE_PASSWORD,
+GENERIC_CERTIFICATE, DOMAIN_EXTENDED, MAXIMUM, MAXIMUM_EX. Er wordt sterk
+geadviseerd alleen GENERIC te gebruiken (de standaardwaarde)
+
+.PARAMETER Persist
+De persistance van de credential. Standaard is dit "ENTERPRISE". Mogelijke
+waardes: SESSION, LOCAL_MACHINE, ENTERPRISE.
+
+.EXAMPLE
+Write-Credential -Target 'Test' -Credential $creds
+Slaat de credentials uit het $creds object op in de credential store.
+
+.EXAMPLE
+Write-Credential -Target 'Testuser' -Credential (Get-Credential)
+Geeft een grafische dialoog, en slaat de username/password op onder 'Testuser' als SecureString.
+
+.EXAMPLE
+Write-Credential -Target 'Test' -UserName 'Joop' -Password 'WatEenSlechtWachtwoordIsDitToch'
+Slaat de credentials op met gebruikersnaam 'Joop' en wachtwoord 'WatEenSlechtWachtwoordIsDitToch',
+als leesbare tekst.
+
+.EXAMPLE
+Write-Credential
+Doorloopt een tekstdialoog waarin de naam van de credential, de username en password wordt gevraagd.
+
+.NOTES
+    Naam:           Write-Credential
+    Auteur:         Jim Harrison (jim@isatools.org)
+    Bron:           https://gallery.technet.microsoft.com/scriptcenter/PowerShell-Credentials-d44c3cde
+    Wijzigingen:    20-05-2012  Jim Harrison    1.5     Van Internet
+                    14-09-2016  HH                 Aanpassingen om er een module van te maken;
+                                                        Namen van de functies aangepast, meer in lijn
+                                                        met Powershell.
+                    10-11-2015  HH         1.7     Verdere aanpassingen om het volledig in lijn te
+                                                        brengen met de standaard. Helptekst
+                                                        aangepast. Teksten vertaald. Mogelijkheid tot direct
+                                                        opgeven van PSCredential object als input.
+                    24-08-2017  HH         1.8     Parameter TargetName positional gemaakt, zodat default
+                                                        de TargetName kan worden gebruikt. Parameter Password
+                                                        kan nu als gewone string worden opgegeven op de commandoregel,
+                                                        of wordt anders als securestring via een tekstdialoog gevraagd.
+                                                        Parameter Secure werkt nu ook!
+                    24-08-2018  HH         1.9     Aangepast aan nieuwe scriptsjabloon
+
+.LINK
+    Zie ook:
+        https://msdn.microsoft.com/en-us/library/system.security.securestring(v=vs.110).aspx)
+        http://msdn.microsoft.com/en-us/library/windows/desktop/aa374788(v=vs.85).aspx
+        https://gallery.technet.microsoft.com/scriptcenter/PowerShell-Credentials-d44c3cde
+
+#>
+
+
+#
+# (c) WUR
+# Pas het versienummer hieronder en hierboven aan als je iets wijzigt.
+# Geef bij .NOTES hierboven aan wat je precies hebt gewijzigd.
+#
+
+    [CmdletBinding(
+        SupportsShouldProcess = $True,
+        DefaultParameterSetName='UserNamePassword'
+    )]
+    Param(
+        [Parameter(Mandatory=$true,Position=1)]
+        [ValidateLength(0,32676)]
+        [String] $TargetName,
+        [Parameter(Mandatory=$true,ParameterSetName='Credential')]
+        [System.Management.Automation.PSCredential] $Credential,
+        [Parameter(Mandatory=$true,ParameterSetName='UserNamePassword')]
+        [ValidateLength(1,512)]
+        [String]$UserName,
+        [Parameter(ParameterSetName='UserNamePassword')]
+        [ValidateLength(0,32676)]
+        [string]$Password=$( if ( $PSCmdlet.ParameterSetName -eq 'UserNamePassword' ) { [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR((Read-Host "Password"  -AsSecureString))) } ),
+        [Parameter(Mandatory=$false,ParameterSetName='UserNamePassword')]
+        [Switch] $Secure = $false,
+        [Parameter(Mandatory=$false)]
+        [ValidateLength(0,256)]
+        [String] $Comment = [String]::Format("Last edited by {0}\{1} on {2}",$Env:UserDomain,$Env:UserName,$Env:ComputerName),
+        [Parameter(Mandatory=$false)]
+        [ValidateSet(   "GENERIC",
+                        "DOMAIN_PASSWORD",
+                        "DOMAIN_CERTIFICATE",
+                        "DOMAIN_VISIBLE_PASSWORD",
+                        "GENERIC_CERTIFICATE",
+                        "DOMAIN_EXTENDED",
+                        "MAXIMUM",
+                        "MAXIMUM_EX")]
+        [String] $Type = "GENERIC",
+        [Parameter(Mandatory=$false)]
+        [ValidateSet(   "SESSION",
+                        "LOCAL_MACHINE",
+                        "ENTERPRISE")]
+        [String] $Persist = "ENTERPRISE"
+    )
+
+    BEGIN   {
+        # Strict modus
+        Set-StrictMode -Version Latest
+        # Een versienummer van het script.
+        Set-Variable versie -option Constant -value "1.9" -WhatIf:$false
+        # Schrijf een melding op het scherm indien nodig (bij -Verbose)
+        $scriptproperty=Write-CmdLetStartMessage -Version $versie
+
+        if("GENERIC" -ne $Type -and 337 -lt $TargetName.Length) { #CRED_MAX_DOMAIN_TARGET_NAME_LENGTH
+            [String] $Msg = "Het Target veld is $($Target.Length) karakters lang, terwijl er maximaal 337 karakters zijn toegestaan."
+            [Management.ManagementException] $MgmtException = New-Object Management.ManagementException($Msg)
+            [Management.Automation.ErrorRecord] $ErrRcd = New-Object Management.Automation.ErrorRecord($MgmtException, 666, 'LimitsExceeded', $null)
+            return $ErrRcd
+        }
+
+        if ( $PSCmdlet.ParameterSetName -eq 'Credential' ) {
+            $UserName=$Credential.UserName
+            $Password=$Credential.GetNetworkCredential().Password
+        } else {
+            if ( $Secure ) {
+                $Password=ConvertFrom-SecureString -SecureString (ConvertTo-SecureString $Password -AsPlainText -Force)
+            }
+        }
+
+    } # Einde BEGIN
+    PROCESS {
+        [PsUtils.CredMan+Credential] $Cred = New-Object PsUtils.CredMan+Credential
+        switch($TargetName -eq $UserName -and
+               ("CRED_TYPE_DOMAIN_PASSWORD" -eq $Type -or
+                "CRED_TYPE_DOMAIN_CERTIFICATE" -eq $Type))
+        {
+            $true  {$Cred.Flags = [PsUtils.CredMan+CRED_FLAGS]::USERNAME_TARGET}
+            $false  {$Cred.Flags = [PsUtils.CredMan+CRED_FLAGS]::NONE}
+        }
+        $Cred.Type = Get-CredType $Type
+        $Cred.TargetName = $TargetName
+        $Cred.UserName = $UserName
+        $Cred.AttributeCount = 0
+        $Cred.Persist = Get-CredPersist $Persist
+        $Cred.CredentialBlobSize = [Text.Encoding]::Unicode.GetBytes($Password).Length
+        $Cred.CredentialBlob = $Password
+        $Cred.Comment = $Comment
+
+        [Int] $Results = 0
+        if ($pscmdlet.ShouldProcess($cred.TargetName, "Credentials worden bijgewerkt.")) {
+            try {
+                $Results = [PsUtils.CredMan]::CredWrite($Cred)
+            }
+            catch {
+                return $_
+            }
+        }
+
+        if(0 -ne $Results) {
+            [String] $Msg = "Fout bij het wegschrijven van de credentials naar de credential store voor '$Target' met gebruikersnaam '$UserName'"
+            [Management.ManagementException] $MgmtException = New-Object Management.ManagementException($Msg)
+            [Management.Automation.ErrorRecord] $ErrRcd = New-Object Management.Automation.ErrorRecord($MgmtException, $Results.ToString("X"), $ErrorCategory[$Results], $null)
+            return $ErrRcd
+        }
+        #return $Results
+    } # Einde PROCESS
+    END {
+        # Schrijft een melding op het scherm indien nodig (bij -Verbose)
+        Write-CmdLetStopMessage -ScriptProperty $scriptproperty
+    }
+} # Einde Function
+
+Function Get-Credential {
+<#
+.SYNOPSIS
+Haalt PSCredential object uit de Windows Credential store.
+
+.DESCRIPTION
+Haalt de credentials op uit de Credential store, via Read-Credential en geeft een
+PSCredential object terug.
+
+.PARAMETER TargetName
+De naam van de credential.
+
+.EXAMPLE
+Get-Credential -TargetName 'EFSA'
+Haalt de credential gegevens op van 'EFSA'.
+
+.EXAMPLE
+(Get-Credential 'EFSA').GetNetworkCredential().Password
+Haalt een PSCredential object op, en trekt het wachtwoord eruit in platte tekst.
+
+.EXAMPLE
+[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR((Get-Credential 'EFSA').Password))
+Haalt uit het PSCredential een SecureString, en trekt daar het wachtwoord uit in platte tekst.
+
+.INPUTS
+
+.OUTPUTS
+[System.Management.Automation.PSCredential]
+
+.NOTES
+    Naam:           Get-Credential
+    Auteur:         HH
+    Bron:
+    Wijzigingen:    10-11-2016  HH         1.0     Initiele versie.
+                    13-11-2016  HH         1.1     Waarschuwing ipv foutmelding bij opvragen
+                                                        van credential met leeg wachtwoord.
+                    24-08-2017  HH         1.2     Parameter positional gemaakt, zodat default de TargetName kan worden gebruikt.
+                    23-10-2017  HH         1.3     Bug eruit gehaald met de Try/Catch. Nu wordt beter gedetecteerd of de CredentialBlob
+                                                        wel of geen securestring is.
+                    24-08-2018  HH         1.4     Aangepast aan nieuwe scriptsjabloon
+                    14-12-2019  HH              1.5     Waarschuwing optioneel gemaakt
+
+#>
+
+#
+# (c) WUR
+# Pas het versienummer hieronder en hierboven aan als je iets wijzigt.
+# Geef bij .NOTES hierboven aan wat je precies hebt gewijzigd.
+#
+    [OutputType('PSCredential')]
+    [CmdletBinding(
+        SupportsShouldProcess = $True # Hiermee zorg je dat WhatIf en Confirm gebruikt kunnen worden :-)
+    )]
+    Param(
+        [Parameter(Mandatory=$false,Position=1)]
+        [String] $TargetName,
+        [Switch] $NoWarning
+    )
+    BEGIN   {
+        # Strict modus
+        Set-StrictMode -Version Latest
+        # Een versienummer van het script.
+        Set-Variable versie -option Constant -value '1.5' -WhatIf:$false
+        # Schrijf een melding op het scherm indien nodig (bij -Verbose)
+        $scriptproperty=Write-CmdLetStartMessage -Version $versie
+
+        $Warn=$true
+        if ( $NoWarning ) { $Warn = $false }
+
+    } # Einde BEGIN
+    PROCESS {
+        [PsUtils.CredMan+Credential[]] $Creds = [Array]::CreateInstance([PsUtils.CredMan+Credential], 0)
+        [Int] $Results = 0
+        try {
+            $Results = [PsUtils.CredMan]::CredEnum($TargetName, [Ref]$Creds)
+        }
+        catch {
+            return $_
+        }
+        switch($Results) {
+            0           {   ForEach ( $cred in $Creds) {
+                                if ( $cred.CredentialBlobSize -eq 0 ) {
+                                    if ( $Warn ) {
+                                        Write-Warning "Kan geen PSCredential maken, want $($cred.TargetName) heeft een leeg wachtwoord."
+                                    }
+                                } else {
+                                    if ( $cred.UserName -eq $null ) {
+                                        if ( $Warn ) {
+                                            Write-Warning "Kan geen PSCredential maken, want $($cred.TargetName) heeft een lege username."
+                                        }
+                                    } else {
+                                        # Als het al een securestring is, dan wordt deze gewoon erin gezet.
+                                        $is_securestring=$true
+                                        try {
+                                            ConvertTo-SecureString $cred.CredentialBlob -ErrorAction Stop|Out-Null
+                                        }
+                                        catch {
+                                            $is_securestring=$false
+                                        }
+                                        finally {
+                                            if ( $is_securestring ) {
+                                                $cred_secure=(ConvertTo-SecureString $cred.CredentialBlob)
+                                            } else {
+                                                $cred_secure=(ConvertTo-SecureString $cred.CredentialBlob -AsPlainText -Force)
+                                            }
+                                            New-Object System.Management.Automation.PSCredential ($cred.UserName, $cred_secure)
+                                        }
+                                    }
+                                }
+                            }
+                            break }
+            0x80070490  { break } #ERROR_NOT_FOUND
+            default {
+                [String] $Msg = "Kon geen credentials opvragen uit de credentialstore voor '$Env:UserName'"
+                [Management.ManagementException] $MgmtException = New-Object Management.ManagementException($Msg)
+                [Management.Automation.ErrorRecord] $ErrRcd = New-Object Management.Automation.ErrorRecord($MgmtException, $Results.ToString("X"), $ErrorCategory[$Results], $null)
+                #$ErrRcd
+            }
+        }
+
+    } # Einde PROCESS
+    END     {
+        # Schrijft een melding op het scherm indien nodig (bij -Verbose)
+        Write-CmdLetStopMessage -ScriptProperty $scriptproperty
+    } # Einde END
+} # Einde Function
+
+Function Update-Credential {
+<#
+.SYNOPSIS
+Geeft een lijst van Credentials die je kunt updaten (interactief).
+
+.DESCRIPTION
+Geeft een lijst van Credentials die je kunt updaten (interactief).
+
+.PARAMETER TargetName
+De naam van de credential.
+
+.EXAMPLE
+Update-Credential -TargetName 'EFSA' -Credential (Get-Credential)
+Haalt de credential gegevens op van 'EFSA', en werkt ze bij met de
+opgegeven credentials.
+
+.INPUTS
+
+.OUTPUTS
+[System.Management.Automation.PSCredential]
+
+.NOTES
+    Naam:           Update-Credential
+    Auteur:         HH
+    Bron:
+    Wijzigingen:    14-12-2019  HH              1.0     Script geboren.
+
+#>
+
+#
+# Pas het versienummer hieronder en hierboven aan als je iets wijzigt.
+# Geef bij .NOTES hierboven aan wat je precies hebt gewijzigd.
+#
+    [OutputType('PSCredential')]
+    [CmdletBinding(
+        SupportsShouldProcess = $True # Hiermee zorg je dat WhatIf en Confirm gebruikt kunnen worden :-)
+    )]
+    Param(
+        [Parameter(Mandatory=$false,Position=1)]
+        [String] $TargetName,
+        [System.Management.Automation.PSCredential] $Credential
+    )
+    BEGIN   {
+        # Strict modus
+        Set-StrictMode -Version Latest
+        # Een versienummer van het script.
+        Set-Variable versie -option Constant -value '1.0' -WhatIf:$false
+        # Schrijf een melding op het scherm indien nodig (bij -Verbose)
+        $scriptproperty=Write-CmdLetStartMessage -Version $versie
+
+    } # Einde BEGIN
+    PROCESS {
+        if ($TargetName -and $Credential) {
+            if ( Get-Credential -TargetName $TargetName -NoWarning ) {
+                Write-Credential -TargetName $TargetName -Credential $Credential
+            }
+        } else {
+            if ($TargetName) {
+                $Credential=Get-Credential -TargetName $TargetName
+                $Credential=Microsoft.PowerShell.Security\Get-credential -UserName $Credential.UserName
+                Write-Credential -TargetName $TargetName -Credential $Credential
+            } else {
+                Write-Verbose "Tsja"
+            }
+        }
+
+    } # Einde PROCESS
+    END     {
+        # Schrijft een melding op het scherm indien nodig (bij -Verbose)
+        Write-CmdLetStopMessage -ScriptProperty $scriptproperty
+    } # Einde END
+} # Einde Function
diff --git a/Powershell/MCRA.Tools/Credential.ps1xml b/Powershell/MCRA.Tools/Credential.ps1xml
new file mode 100644
index 0000000000000000000000000000000000000000..40d5f266c8422c4004fbcdd78cdc135b782306ae
--- /dev/null
+++ b/Powershell/MCRA.Tools/Credential.ps1xml
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<Configuration>
+    <ViewDefinitions>
+        <View>
+            <Name>Credential.Table</Name>
+            <ViewSelectedBy>
+                <TypeName>PSUtils.CredMan+Credential</TypeName>
+            </ViewSelectedBy>
+            <TableControl>
+                <TableHeaders>
+                    <TableColumnHeader>
+                        <Label>TargetName</Label>
+                        <Width>25</Width>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>UserName</Label>
+                        <Width>20</Width>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>CredentialBlobSize</Label>
+                        <Width>18</Width>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>Type</Label>
+                        <Width>16</Width>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>Persist</Label>
+                        <Width>16</Width>
+                    </TableColumnHeader>
+                </TableHeaders>
+                <TableRowEntries>
+                    <TableRowEntry>
+                        <TableColumnItems>
+                            <TableColumnItem>
+                                <ScriptBlock>
+                                        $_.TargetName -replace "(.*):target="
+                                </ScriptBlock>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>UserName</PropertyName>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>CredentialBlobSize</PropertyName>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>Type</PropertyName>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>Persist</PropertyName>
+                            </TableColumnItem>
+                        </TableColumnItems>
+                    </TableRowEntry>
+                </TableRowEntries>
+            </TableControl>
+        </View>
+        <View>
+            <Name>Password</Name>
+            <ViewSelectedBy>
+                <TypeName>PSUtils.CredMan+Credential</TypeName>
+            </ViewSelectedBy>
+            <TableControl>
+                <TableHeaders>
+                    <TableColumnHeader>
+                        <Label>TargetName</Label>
+                        <Width>25</Width>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>UserName</Label>
+                        <Width>20</Width>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>CredentialBlob</Label>
+                        <Width>30</Width>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>Type</Label>
+                        <Width>16</Width>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>Persist</Label>
+                        <Width>16</Width>
+                    </TableColumnHeader>
+                </TableHeaders>
+                <TableRowEntries>
+                    <TableRowEntry>
+                        <TableColumnItems>
+                            <TableColumnItem>
+                                <ScriptBlock>
+                                        $_.TargetName -replace "(.*):target="
+                                </ScriptBlock>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>UserName</PropertyName>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>CredentialBlob</PropertyName>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>Type</PropertyName>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>Persist</PropertyName>
+                            </TableColumnItem>
+                        </TableColumnItems>
+                    </TableRowEntry>
+                </TableRowEntries>
+            </TableControl>
+        </View>
+        <View>
+            <Name>Credential.List</Name>
+            <ViewSelectedBy>
+                <TypeName>PSUtils.CredMan+Credential</TypeName>
+            </ViewSelectedBy>
+            <ListControl>
+                <ListEntries>
+                    <ListEntry>
+                        <ListItems>
+                            <ListItem>
+                                <PropertyName>TargetName</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>TargetAlias</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>UserName</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>Comment</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>LastWritten</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>Type</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>Persist</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>Flags</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>CredentialBlob</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>AttributeCount</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>Attributes</PropertyName>
+                            </ListItem>
+                        </ListItems>
+                    </ListEntry>
+                </ListEntries>
+            </ListControl>
+        </View>
+        <View>
+            <Name>Credential.Wide</Name>
+            <ViewSelectedBy>
+                <TypeName>PSUtils.CredMan+Credential</TypeName>
+            </ViewSelectedBy>
+            <WideControl>
+                <WideEntries>
+                    <WideEntry>
+                        <WideItem>
+                            <PropertyName>TargetName</PropertyName>
+                        </WideItem>
+                    </WideEntry>
+                </WideEntries>
+            </WideControl>
+        </View>
+    </ViewDefinitions>
+</Configuration>
diff --git a/Powershell/MCRA.Tools/Get-DataSource.ps1 b/Powershell/MCRA.Tools/Get-DataSource.ps1
new file mode 100644
index 0000000000000000000000000000000000000000..aca25dbf1244b202b43f173626006571d8a7db88
--- /dev/null
+++ b/Powershell/MCRA.Tools/Get-DataSource.ps1
@@ -0,0 +1,109 @@
+Function Get-DataSource {
+<#
+.SYNOPSIS
+Retrieves an MCRA Datasource.
+
+.DESCRIPTION
+Retrieves an MCRA Datasource.
+
+.PARAMETER CREDENTIAL
+A Credential object.
+
+.PARAMETER Keyring
+The name from the entry in the Windows Credential Manager.
+
+.PARAMETER URL
+The URL to which the request is made.
+
+.PARAMETER ID
+The ID of the repository
+
+.EXAMPLE
+Get-DataSource -Url 'https://mcra.test.wur.nl/Mcra90' -TargetName MCRA
+
+
+.INPUTS
+System.String
+
+.NOTES
+    Naam:           Get-DataSource
+    Auteur:         Heuve081
+    Bron:
+    Wijzigingen:    11-03-2020  Heuve081     1.0     Script geboren.
+
+#>
+
+    #
+    # (c) Private use
+    # Pas het versienummer hieronder en hierboven aan als je iets wijzigt.
+    # Geef bij .NOTES hierboven aan wat je precies hebt gewijzigd.
+    #
+    # Pas het Outputtype aan als je een object teruggeeft.
+    [OutputType('MCRA.Datasource')]
+    [CmdletBinding(SupportsShouldProcess = $True)]
+    Param(
+        [Parameter(Mandatory=$true)]
+        [string]$Url,
+        [Parameter(Mandatory=$true,ParameterSetName='Credential')]
+        [System.Management.Automation.PSCredential]$Credential,
+        [Parameter(Mandatory=$true,ParameterSetName='TargetName')]
+        [Alias('Keyring')]
+        [string]$TargetName,
+        [int]$ID
+    )
+    BEGIN   {
+        # Strict modus
+        Set-StrictMode -Version Latest
+        # Een versienummer van het script.
+        Set-Variable versie -option Constant -value '1.0' -WhatIf:$false
+        # Schrijf een melding op het scherm indien nodig (bij -Verbose)
+        $scriptproperty=Write-CmdLetStartMessage -Invoke $MyInvocation -Version $versie
+
+        $tokenparams= $params = @{ 'Url' = $Url }
+        if ($PSCmdlet.ParameterSetName -eq 'TargetName') {
+            $tokenparams['Credential'] = Get-Credential -TargetName $TargetName
+        } else {
+            $tokenparams['Credential'] = $Credential
+        }
+
+        $token=Get-Token @tokenparams
+
+        if (-not [bool]$token ) {
+            Throw "  [ERROR] No token received. Mission abort."
+        }
+
+        $ApiUrl = $Url+'/Api/'
+    } # Einde BEGIN
+    PROCESS {
+        if ($ID) {
+            # This is a different API call; we expect the same objects.
+            $Api='DataSources/Get/'+$ID
+        } else {
+            # This is a different API call; we expect the same objects.
+            $Api='DataSources/GetAll'
+        }
+        $result=$null
+        $result=Invoke-Api -Url $Url -Api $Api -Token $token
+        if ( [bool]$result ) {
+            # We have a result
+            if ( $result -is [array] ) {
+                # There a more than one
+                Write-Verbose "  [MESG ] $($result.Count) results found"
+            } else {
+                # There can be only one
+                Write-Verbose "  [MESG ] One result found"
+            }
+            $result| ForEach {
+                Add-Member -InputObject $_ -NotePropertyMembers @{
+                    'SourceURL' = $url; 'created' =[datetime]$($_.createdTimeStamp);
+                    'uploaded'=[datetime]$($_.uploadedTimeStamp)
+                } -TypeName 'MCRA.Datasource' -PassThru }
+        } else {
+            Write-Verbose "  [MESG ] No result found"
+        }
+    } # Einde PROCESS
+    END {
+        # Schrijft een melding op het scherm indien nodig (bij -Verbose)
+        Write-CmdLetStopMessage -ScriptProperty $scriptproperty
+    } # Einde END
+} # Einde Function
diff --git a/Powershell/MCRA.Tools/Get-EfsaCatalogue.ps1 b/Powershell/MCRA.Tools/Get-EfsaCatalogue.ps1
new file mode 100644
index 0000000000000000000000000000000000000000..0f9a5454a1f8df578891f67d1ae9918c92a7fcdb
--- /dev/null
+++ b/Powershell/MCRA.Tools/Get-EfsaCatalogue.ps1
@@ -0,0 +1,121 @@
+Function Get-EfsaCatalogue {
+<#
+.SYNOPSIS
+Requests an EFSA catalogue file.
+
+.DESCRIPTION
+Requests an EFSA catalogue file.
+
+.PARAMETER JSON
+The JSON string to be used as a request.
+
+.PARAMETER CREDENTIAL
+A Credential object. Only the password will be used.
+
+.PARAMETER TargetName
+A TargetName from the Windows Credential Manager.
+
+.PARAMETER URL
+The URL to which the request is made.
+
+.EXAMPLE
+Get-EfsaCatalogue -JSON $json -Targetname EFSA
+Uses the string in $json to requests a catalogue; credentials from
+EFSA are used.
+
+
+.INPUTS
+System.String
+
+.NOTES
+    Naam:           Get-EfsaCatalogue
+    Auteur:         Hansvandenheuvel
+    Bron:
+    Wijzigingen:    10-03-2020  HH     1.0     Script geboren.
+
+    This is actually just the following command
+    Invoke-RestMethod -Uri 'https://openapi.efsa.europa.eu/api/catalogues/catalogue-file' -Headers @{ 'Ocp-Apim-Subscription-Key' = 'secret' } -Method POST -ContentType 'application/json' -body $JsonString
+
+#>
+
+    #
+    # (c) WUR
+    # Pas het versienummer hieronder en hierboven aan als je iets wijzigt.
+    # Geef bij .NOTES hierboven aan wat je precies hebt gewijzigd.
+    #
+    # Pas het Outputtype aan als je een object teruggeeft.
+    [OutputType('My.Object')]
+    [CmdletBinding(SupportsShouldProcess = $True)]
+    Param(
+        [Parameter(Mandatory=$True,ValueFromPipeline=$true,Position=1)]
+        [string]$JSON,
+        [Parameter(Mandatory=$true,ParameterSetName='Credential')]
+        [System.Management.Automation.PSCredential]$Credential,
+        [Parameter(Mandatory=$true,ParameterSetName='TargetName')]
+        [string]$TargetName,
+        [Parameter()]
+        [string]$url='https://openapi.efsa.europa.eu',
+        [Parameter()]
+        [string]$Path,
+        [Parameter()]
+        [switch]$PassThru
+
+    )
+    BEGIN   {
+        # Strict modus
+        Set-StrictMode -Version Latest
+        # Een versienummer van het script.
+        Set-Variable versie -option Constant -value '1.0' -WhatIf:$false
+        # Schrijf een melding op het scherm indien nodig (bij -Verbose)
+        $scriptproperty=Write-CmdLetStartMessage -Invoke $MyInvocation -Version $versie
+
+        if ($PSCmdlet.ParameterSetName -eq 'TargetName') {
+            $Cred=Get-Credential -TargetName $TargetName
+        } else {
+            $Cred=$Credential
+        }
+        $JsonString = ''
+
+    } # Einde BEGIN
+    PROCESS {
+        # Unfortunaly we have to swallow the entire JSON string, before processing.
+        # No problem, it's usually small.
+        $JsonString+=$JSON
+
+    } # Einde PROCESS
+    END {
+        $result=New-Object xml
+        $pUrl=$url+'/api/'+'catalogues/catalogue-file'
+        $headers = @{ 'Ocp-Apim-Subscription-Key' = $Cred.GetNetworkCredential().Password }
+        Write-Verbose "Invoking RestMethod to $pUrl"
+        $dump=(Invoke-RestMethod -Uri $pUrl -Headers $headers -Method POST -ContentType 'application/json' -body $JsonString) -Split [Environment]::NewLine|ForEach -Begin {
+            # Ugly hack, because no proper MIME handling is available in Powershell (that I am aware of)
+            $xml = $False } -Process { if ($xml) {
+                if ($_ -match '^\-\-uuid\:') {
+                    $xml=$False
+                } else {
+                    $_
+                }
+            } else {
+                if ($_ -match '^\<\?xml') {
+                    $xml = $True
+                    $_
+                }
+            }
+        }
+        $result=New-Object xml
+        Write-Verbose "Converting to XML"
+        $result.LoadXML($dump)
+        # Write to file if requested, else dump object
+        if ( $Path ) {
+            if ($PassThru ) { $result }
+            Write-Verbose "Saving to $Path"
+            $result.Save($Path)
+        } else {
+            $result
+        }
+        $result
+        # Schrijft een melding op het scherm indien nodig (bij -Verbose)
+        Write-CmdLetStopMessage -ScriptProperty $scriptproperty
+    } # Einde END
+} # Einde Function
diff --git a/Powershell/MCRA.Tools/Get-File.ps1 b/Powershell/MCRA.Tools/Get-File.ps1
new file mode 100644
index 0000000000000000000000000000000000000000..d18e849142d15ff08ba1ced1dd194d1885cb60d8
--- /dev/null
+++ b/Powershell/MCRA.Tools/Get-File.ps1
@@ -0,0 +1,111 @@
+Function Get-File {
+<#
+.SYNOPSIS
+Get a Datasource from the MCRA repository and save to file.
+
+.DESCRIPTION
+Get a Datasource from the MCRA repository and save to file.
+
+.PARAMETER CREDENTIAL
+A Credential object.
+
+.PARAMETER Keyring
+The name from the entry in the Windows Credential Manager.
+
+.PARAMETER URL
+The URL to which the request is made.
+
+.PARAMETER ID
+The ID of the repository.
+
+.PARAMETER Path
+The name to which to save the repository.
+
+.PARAMETER AsCSV
+Wil retrieve the data from the database as a ZIPPED CSV.
+
+.EXAMPLE
+Get-File
+
+
+.INPUTS
+System.String
+
+.NOTES
+    Naam:           Get-File
+    Auteur:         Hansvandenheuvel
+    Bron:
+    Wijzigingen:    12-03-2020  Hansvandenheuvel     1.0     Script geboren.
+
+#>
+
+    #
+    # (c) Private use
+    # Pas het versienummer hieronder en hierboven aan als je iets wijzigt.
+    # Geef bij .NOTES hierboven aan wat je precies hebt gewijzigd.
+    #
+    # Pas het Outputtype aan als je een object teruggeeft.
+    [OutputType('My.Object')]
+    [CmdletBinding(SupportsShouldProcess = $True)]
+    Param(
+        [Parameter(Mandatory=$true)]
+        [string]$Url,
+        [Parameter(Mandatory=$true,ParameterSetName='Credential')]
+        [System.Management.Automation.PSCredential]$Credential,
+        [Parameter(Mandatory=$true,ParameterSetName='TargetName')]
+        [Alias('Keyring')]
+        [string]$TargetName,
+        [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName)]
+        [Alias('ID')]
+        [int]$idCurrentVersion,
+        [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName)]
+        [Alias('Path')]
+        [string]$Name,
+        [Parameter()]
+        [switch]$AsCSV
+
+    )
+    BEGIN   {
+        # Strict modus
+        Set-StrictMode -Version Latest
+        # Een versienummer van het script.
+        Set-Variable versie -option Constant -value '1.0' -WhatIf:$false
+        # Schrijf een melding op het scherm indien nodig (bij -Verbose)
+        $scriptproperty=Write-CmdLetStartMessage -Invoke $MyInvocation -Version $versie
+
+        $tokenparams= @{ 'Url' = $Url }
+        if ($PSCmdlet.ParameterSetName -eq 'TargetName') {
+            $tokenparams['Credential'] = Get-Credential -TargetName $TargetName
+        } else {
+            $tokenparams['Credential'] = $Credential
+        }
+
+        $token=Get-Token @tokenparams
+
+        if (-not [bool]$token ) {
+            Throw "  [ERROR] No token received. Mission abort."
+        }
+
+    } # Einde BEGIN
+    PROCESS {
+        ForEach-Object {
+            if ($AsCSV) {
+                # Force .zip as extension
+                if ([System.IO.Path]::GetExtension($Name).ToLower() -ne '.zip') {
+                    $Name=$Name+'.zip'
+                }
+                $Api='DataSources/DownloadVersionCsv/'+$idCurrentVersion
+            } else {
+                $Api='DataSources/DownloadVersion/'+$idCurrentVersion
+            }
+            Write-Verbose "  [MESG ] Downloading datasource with ID $idCurrentVersion to $Name"
+
+            $RequestUrl=$Url+'/Api/'+$Api
+            Invoke-WebRequest -Uri $RequestUrl -Headers $token.header -OutFile $Name
+        }
+    } # Einde PROCESS
+    END {
+        # Schrijft een melding op het scherm indien nodig (bij -Verbose)
+        Write-CmdLetStopMessage -ScriptProperty $scriptproperty
+    } # Einde END
+} # Einde Function
diff --git a/Powershell/MCRA.Tools/Get-Repository.ps1 b/Powershell/MCRA.Tools/Get-Repository.ps1
new file mode 100644
index 0000000000000000000000000000000000000000..62170f896c33657f3b87b5caad6c61541d7b2c96
--- /dev/null
+++ b/Powershell/MCRA.Tools/Get-Repository.ps1
@@ -0,0 +1,106 @@
+Function Get-Repository {
+<#
+.SYNOPSIS
+Retrieves an MCRA Repository.
+
+.DESCRIPTION
+Retrieves an MCRA Repository.
+
+.PARAMETER CREDENTIAL
+A Credential object.
+
+.PARAMETER Keyring
+The name from the entry in the Windows Credential Manager.
+
+.PARAMETER URL
+The URL to which the request is made.
+
+.PARAMETER ID
+The ID of the repository
+
+.EXAMPLE
+Get-Repository -Url 'https://mcra.test.wur.nl/Mcra90' -TargetName MCRA
+
+
+.INPUTS
+System.String
+
+.NOTES
+    Naam:           Get-Repository
+    Auteur:         Heuve081
+    Bron:
+    Wijzigingen:    11-03-2020  Heuve081     1.0     Script geboren.
+
+#>
+
+    #
+    # (c) Private use
+    # Pas het versienummer hieronder en hierboven aan als je iets wijzigt.
+    # Geef bij .NOTES hierboven aan wat je precies hebt gewijzigd.
+    #
+    # Pas het Outputtype aan als je een object teruggeeft.
+    [OutputType('MCRA.Repository')]
+    [CmdletBinding(SupportsShouldProcess = $True)]
+    Param(
+        [Parameter(Mandatory=$true)]
+        [string]$Url,
+        [Parameter(Mandatory=$true,ParameterSetName='Credential')]
+        [System.Management.Automation.PSCredential]$Credential,
+        [Parameter(Mandatory=$true,ParameterSetName='TargetName')]
+        [Alias('Keyring')]
+        [string]$TargetName,
+        [int]$ID
+    )
+    BEGIN   {
+        # Strict modus
+        Set-StrictMode -Version Latest
+        # Een versienummer van het script.
+        Set-Variable versie -option Constant -value '1.0' -WhatIf:$false
+        # Schrijf een melding op het scherm indien nodig (bij -Verbose)
+        $scriptproperty=Write-CmdLetStartMessage -Invoke $MyInvocation -Version $versie
+
+        $tokenparams= @{ 'Url' = $Url }
+        if ($PSCmdlet.ParameterSetName -eq 'TargetName') {
+            $tokenparams['Credential'] = Get-Credential -TargetName $TargetName
+        } else {
+            $tokenparams['Credential'] = $Credential
+        }
+
+        $token=Get-Token @tokenparams
+
+        if (-not [bool]$token ) {
+            Throw "  [ERROR] No token received. Mission abort."
+        }
+
+    } # Einde BEGIN
+    PROCESS {
+        if ($ID) {
+            # This is a different API call; we expect the same objects.
+            $Api='Repositories/Get/'+$ID
+            $properties = @{ 'SourceURL' = $url }
+        } else {
+            # This is a different API call; we expect the same objects.
+            $Api='Repositories/GetAll'
+            $properties = @{ 'SourceURL' = $url; path = ''; userName = ''; apiKey = ''; userAccessRights = @([System.Object]); groupAccessRights = @([System.Object])  }
+        }
+        $result=$null
+        $result=Invoke-Api -Url $Url -Api $Api -Token $token
+        if ( [bool]$result ) {
+            # We have a result
+            if ( $result -is [array] ) {
+                # There a more than one
+                Write-Verbose "  [MESG ] $($result.Count) results found"
+            } else {
+                # There can be only one
+                Write-Verbose "  [MESG ] One result found"
+            }
+            $result| Add-Member -NotePropertyMembers $properties -TypeName 'MCRA.Repository' -PassThru
+        } else {
+            Write-Verbose "  [MESG ] No result found"
+        }
+    } # Einde PROCESS
+    END {
+        # Schrijft een melding op het scherm indien nodig (bij -Verbose)
+        Write-CmdLetStopMessage -ScriptProperty $scriptproperty
+    } # Einde END
+} # Einde Function
diff --git a/Powershell/MCRA.Tools/Get-Token.ps1 b/Powershell/MCRA.Tools/Get-Token.ps1
new file mode 100644
index 0000000000000000000000000000000000000000..5e5096ef7e8e1cb506b54028b008fc8b191461a6
--- /dev/null
+++ b/Powershell/MCRA.Tools/Get-Token.ps1
@@ -0,0 +1,93 @@
+Function Get-Token {
+<#
+.SYNOPSIS
+Retrieves an MCRA Token for access.
+
+.DESCRIPTION
+Retrieves an MCRA Token for access.
+
+.PARAMETER CREDENTIAL
+A Credential object.
+
+.PARAMETER URL
+The URL to which the request is made.
+
+.EXAMPLE
+Get-Token -Url 'https://mcra.test.wur.nl/Mcra90' -TargetName MCRA
+
+.INPUTS
+System.String
+
+.NOTES
+    Naam:           Get-Token
+    Auteur:         Heuve081
+    Bron:
+    Wijzigingen:    11-03-2020  Heuve081     1.0     Script geboren.
+
+#>
+
+    #
+    # (c) Private use
+    # Pas het versienummer hieronder en hierboven aan als je iets wijzigt.
+    # Geef bij .NOTES hierboven aan wat je precies hebt gewijzigd.
+    #
+    # Pas het Outputtype aan als je een object teruggeeft.
+    [OutputType('MCRA.Token')]
+    [CmdletBinding(SupportsShouldProcess = $True)]
+    Param(
+        [Parameter(Mandatory=$true)]
+        [string]$Url,
+        [Parameter(Mandatory=$true)]
+        [System.Management.Automation.PSCredential]$Credential,
+        [int]$ID
+    )
+    BEGIN   {
+        # Strict modus
+        Set-StrictMode -Version Latest
+        # Een versienummer van het script.
+        Set-Variable versie -option Constant -value '1.0' -WhatIf:$false
+        # Schrijf een melding op het scherm indien nodig (bij -Verbose)
+        $scriptproperty=Write-CmdLetStartMessage -Invoke $MyInvocation -Version $versie
+        $ClientId = 'cbd00dfbdd0a4501bf457b52a635353f'
+
+        $TokenUrl = $Url + '/jwtauth/token'
+
+        $Body = @{
+            'grant_type' = 'password';
+            'username' = $Credential.UserName;
+            'password' =  $Credential.GetNetworkCredential().Password;
+            'client_id' = $ClientId }
+
+    } # Einde BEGIN
+    PROCESS {
+        # Request token
+        $now = Get-Date
+        Write-Verbose "  [MESG ] Request token on $TokenUrl"
+        Try {
+            $token=Invoke-RestMethod -Uri $TokenUrl -ContentType 'application/json' -Body $body -Method POST
+        } Catch {
+            $token = $null
+        }
+        if ( [bool]$token ) {
+            # Now stored in $token.access_token
+            $headers = @{ 'authorization' = 'bearer '+$token.access_token }
+            # Output a custom object, in which we can easily navigate.
+            $secret = ConvertTo-SecureString $token.access_token -AsPlainText -Force
+            [pscustomobject]@{
+                'token' = $secret
+                'header' = $headers
+                # Expires 10 mins before actual expiration
+                'expires' = $now.AddSeconds($token.expires_in).AddMinutes(-10)
+                PSTypeName = 'MCRA.Token' }
+             Write-Verbose "  [MESG ] Token created"
+        } else {
+            # [pscustomobject]@{ 'token' = ''; 'header' = @{}; PSTypeName = 'MCRA.Token' }
+            Write-Warning "  [WARN ] Could not fetch a proper token"
+            $token
+        }
+    } # Einde PROCESS
+    END {
+        # Schrijft een melding op het scherm indien nodig (bij -Verbose)
+        Write-CmdLetStopMessage -ScriptProperty $scriptproperty
+    } # Einde END
+} # Einde Function
diff --git a/Powershell/MCRA.Tools/Get-Workspace.ps1 b/Powershell/MCRA.Tools/Get-Workspace.ps1
new file mode 100644
index 0000000000000000000000000000000000000000..bb8b959f1dc17a8e7174f29533ad490710ddd21b
--- /dev/null
+++ b/Powershell/MCRA.Tools/Get-Workspace.ps1
@@ -0,0 +1,109 @@
+Function Get-Workspace {
+<#
+.SYNOPSIS
+Retrieves an MCRA Workspace.
+
+.DESCRIPTION
+Retrieves an MCRA Workspace.
+
+.PARAMETER CREDENTIAL
+A Credential object.
+
+.PARAMETER Keyring
+The name from the entry in the Windows Credential Manager.
+
+.PARAMETER URL
+The URL to which the request is made.
+
+.PARAMETER ID
+The ID of the repository
+
+.EXAMPLE
+Get-Workspace -Url 'https://mcra.test.wur.nl/Mcra90' -TargetName MCRA
+
+
+.INPUTS
+System.String
+
+.NOTES
+    Naam:           Get-Workspace
+    Auteur:         Heuve081
+    Bron:
+    Wijzigingen:    11-03-2020  Heuve081     1.0     Script geboren.
+
+#>
+
+    #
+    # (c) Private use
+    # Pas het versienummer hieronder en hierboven aan als je iets wijzigt.
+    # Geef bij .NOTES hierboven aan wat je precies hebt gewijzigd.
+    #
+    # Pas het Outputtype aan als je een object teruggeeft.
+    [OutputType('MCRA.Workspace')]
+    [CmdletBinding(SupportsShouldProcess = $True)]
+    Param(
+        [Parameter(Mandatory=$true)]
+        [string]$Url,
+        [Parameter(Mandatory=$true,ParameterSetName='Credential')]
+        [System.Management.Automation.PSCredential]$Credential,
+        [Parameter(Mandatory=$true,ParameterSetName='TargetName')]
+        [Alias('Keyring')]
+        [string]$TargetName,
+        [int]$ID
+    )
+    BEGIN   {
+        # Strict modus
+        Set-StrictMode -Version Latest
+        # Een versienummer van het script.
+        Set-Variable versie -option Constant -value '1.0' -WhatIf:$false
+        # Schrijf een melding op het scherm indien nodig (bij -Verbose)
+        $scriptproperty=Write-CmdLetStartMessage -Invoke $MyInvocation -Version $versie
+
+        $tokenparams= $params = @{ 'Url' = $Url }
+        if ($PSCmdlet.ParameterSetName -eq 'TargetName') {
+            $tokenparams['Credential'] = Get-Credential -TargetName $TargetName
+        } else {
+            $tokenparams['Credential'] = $Credential
+        }
+
+        $token=Get-Token @tokenparams
+
+        if (-not [bool]$token ) {
+            Throw "  [ERROR] No token received. Mission abort."
+        }
+
+        $ApiUrl = $Url+'/Api/'
+    } # Einde BEGIN
+    PROCESS {
+        if ($ID) {
+            # This is a different API call; we expect the same objects.
+            $Api='Workspace/Get/'+$ID
+        } else {
+            # This is a different API call; we expect the same objects.
+            $Api='Workspace/GetAll'
+        }
+        $result=$null
+        $result=Invoke-Api -Url $Url -Api $Api -Token $token
+        if ( [bool]$result ) {
+            # We have a result
+            if ( $result -is [array] ) {
+                # There a more than one
+                Write-Verbose "  [MESG ] $($result.Count) results found"
+            } else {
+                # There can be only one
+                Write-Verbose "  [MESG ] One result found"
+            }
+            $result| ForEach {
+                Add-Member -InputObject $_ -NotePropertyMembers @{
+                    'SourceURL' = $url; 'created' =[datetime]$($_.dateCreated);
+                    'modified'=[datetime]$($_.dateModified)
+                } -TypeName 'MCRA.Workspace' -PassThru }
+        } else {
+            Write-Verbose "  [MESG ] No result found"
+        }
+    } # Einde PROCESS
+    END {
+        # Schrijft een melding op het scherm indien nodig (bij -Verbose)
+        Write-CmdLetStopMessage -ScriptProperty $scriptproperty
+    } # Einde END
+} # Einde Function
diff --git a/Powershell/MCRA.Tools/Invoke-Api.ps1 b/Powershell/MCRA.Tools/Invoke-Api.ps1
new file mode 100644
index 0000000000000000000000000000000000000000..5688515e64499225753f2220ce0f664e5ebeca4b
--- /dev/null
+++ b/Powershell/MCRA.Tools/Invoke-Api.ps1
@@ -0,0 +1,75 @@
+Function Invoke-Api {
+<#
+.SYNOPSIS
+Makes a call to the MCRA Api.
+
+.DESCRIPTION
+Makes a call to the MCRA Api.
+
+.PARAMETER Url
+The URL to which the request is made.
+
+.PARAMETER Api
+The Api call.
+
+.PARAMETER Token
+An object with a token
+
+.EXAMPLE
+Invoke-Api -Url 'https://mcra.test.wur.nl/Mcra90' -Api 'Repositories/GetAll' -token $token
+
+
+.INPUTS
+System.String
+
+.NOTES
+    Naam:           Invoke-Api
+    Auteur:         Heuve081
+    Bron:
+    Wijzigingen:    11-03-2020  Heuve081     1.0     Script geboren.
+
+#>
+
+    #
+    # (c) Private use
+    # Pas het versienummer hieronder en hierboven aan als je iets wijzigt.
+    # Geef bij .NOTES hierboven aan wat je precies hebt gewijzigd.
+    #
+    # Pas het Outputtype aan als je een object teruggeeft.
+    [CmdletBinding(SupportsShouldProcess = $True)]
+    Param(
+        [Parameter(Mandatory=$true)]
+        [string]$Url,
+        $Token,
+        [string]$Api
+    )
+    BEGIN   {
+        # Strict modus
+        Set-StrictMode -Version Latest
+        # Een versienummer van het script.
+        Set-Variable versie -option Constant -value '1.0' -WhatIf:$false
+        # Schrijf een melding op het scherm indien nodig (bij -Verbose)
+        $scriptproperty=Write-CmdLetStartMessage -Invoke $MyInvocation -Version $versie
+
+        $ApiUrl = $Url+'/Api/'
+    } # Einde BEGIN
+    PROCESS {
+        $RequestUrl=$ApiUrl+$Api
+        $result=$null
+        Write-Verbose "  [MESG ] Using request api URL $RequestUrl"
+        Try {
+            $result=Invoke-RestMethod -Uri $RequestUrl -Headers $token.header -ContentType 'application/json'
+        } Catch {
+            $result=$null
+        }
+        if ( -not [bool]$result ) {
+            # We have no result
+            Write-Verbose "  [MESG ] No result found"
+        }
+        $result
+    } # Einde PROCESS
+    END {
+        # Schrijft een melding op het scherm indien nodig (bij -Verbose)
+        Write-CmdLetStopMessage -ScriptProperty $scriptproperty
+    } # Einde END
+} # Einde Function
diff --git a/Powershell/MCRA.Tools/MCRA.DataSource.ps1xml b/Powershell/MCRA.Tools/MCRA.DataSource.ps1xml
new file mode 100644
index 0000000000000000000000000000000000000000..2c2470bb76a892d66f3b8496393ae524a341deab
--- /dev/null
+++ b/Powershell/MCRA.Tools/MCRA.DataSource.ps1xml
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<Configuration>
+    <ViewDefinitions>
+        <View>
+            <Name>MCRA.DataSource.Table</Name>
+            <ViewSelectedBy>
+                <TypeName>MCRA.DataSource</TypeName>
+            </ViewSelectedBy>
+            <TableControl>
+                <TableHeaders>
+                    <TableColumnHeader>
+                        <Label>Mode</Label>
+                        <Width>5</Width>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>Id</Label>
+                        <Width>6</Width>
+                        <Alignment>right</Alignment>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>Owner</Label>
+                        <Width>12</Width>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>Created</Label>
+                        <Width>20</Width>
+                        <Alignment>right</Alignment>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>DataSrc</Label>
+                        <Width>7</Width>
+                        <Alignment>right</Alignment>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>Id</Label>
+                        <Width>6</Width>
+                        <Alignment>right</Alignment>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>CurId</Label>
+                        <Width>6</Width>
+                        <Alignment>right</Alignment>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>Version</Label>
+                        <Width>7</Width>
+                        <Alignment>right</Alignment>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>Name</Label>
+                        <Width>50</Width>
+                    </TableColumnHeader>
+                </TableHeaders>
+                <TableRowEntries>
+                    <TableRowEntry>
+                        <TableColumnItems>
+                            <TableColumnItem>
+                                <ScriptBlock>
+                                        [string]$_.accessLevel+' '+[string][int]$_.isDeleted+' '+[string][int]$_.isLocalFile
+                                </ScriptBlock>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>idOwner</PropertyName>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>Owner</PropertyName>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <ScriptBlock>
+                                        $_.created.ToString('dd-MM-yyyy    HH:mm')
+                                </ScriptBlock>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>idDataSourceRepository</PropertyName>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>id</PropertyName>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>idCurrentVersion</PropertyName>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>Version</PropertyName>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>Name</PropertyName>
+                            </TableColumnItem>
+                        </TableColumnItems>
+                    </TableRowEntry>
+                </TableRowEntries>
+            </TableControl>
+        </View>
+        <View>
+            <Name>MCRA.DataSource.List</Name>
+            <ViewSelectedBy>
+                <TypeName>MCRA.DataSource</TypeName>
+            </ViewSelectedBy>
+            <ListControl>
+                <ListEntries>
+                    <ListEntry>
+                        <ListItems>
+                            <ListItem>
+                                <PropertyName>id</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>idDataSourceRepository</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>idCurrentVersion</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>version</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>versionIds</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>name</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>uploaded</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>created</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>idOwner</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>owner</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>uploadUserName</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>accesslevel</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>isDeleted</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>isLocalFile</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>tableGroups</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>SourceURL</PropertyName>
+                            </ListItem>
+                        </ListItems>
+                    </ListEntry>
+                </ListEntries>
+            </ListControl>
+        </View>
+        <View>
+            <Name>MCRA.DataSource.Wide</Name>
+            <ViewSelectedBy>
+                <TypeName>MCRA.DataSource</TypeName>
+            </ViewSelectedBy>
+            <WideControl>
+                <WideEntries>
+                    <WideEntry>
+                        <WideItem>
+                            <PropertyName>name</PropertyName>
+                        </WideItem>
+                    </WideEntry>
+                </WideEntries>
+            </WideControl>
+        </View>
+    </ViewDefinitions>
+</Configuration>
diff --git a/Powershell/MCRA.Tools/MCRA.Repository.ps1xml b/Powershell/MCRA.Tools/MCRA.Repository.ps1xml
new file mode 100644
index 0000000000000000000000000000000000000000..3f8f94c4711e23e1387f476bd7b73338c6569acb
--- /dev/null
+++ b/Powershell/MCRA.Tools/MCRA.Repository.ps1xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<Configuration>
+    <ViewDefinitions>
+        <View>
+            <Name>MCRA.Repository.Table</Name>
+            <ViewSelectedBy>
+                <TypeName>MCRA.Repository</TypeName>
+            </ViewSelectedBy>
+            <TableControl>
+                <TableHeaders>
+                    <TableColumnHeader>
+                        <Label>Mode</Label>
+                        <Width>5</Width>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>Id</Label>
+                        <Width>6</Width>
+                        <Alignment>right</Alignment>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>Owner</Label>
+                        <Width>12</Width>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>Parent</Label>
+                        <Width>6</Width>
+                        <Alignment>right</Alignment>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>Id</Label>
+                        <Width>6</Width>
+                        <Alignment>right</Alignment>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>Name</Label>
+                        <Width>50</Width>
+                    </TableColumnHeader>
+                </TableHeaders>
+                <TableRowEntries>
+                    <TableRowEntry>
+                        <TableColumnItems>
+                            <TableColumnItem>
+                                <ScriptBlock>
+                                        [string]$_.userAccessLevel+' '+[string][int]$_.isUserRootRepository+' '+[string]$_.repositoryType
+                                </ScriptBlock>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>idOwner</PropertyName>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>Owner</PropertyName>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>idParentRepository</PropertyName>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>id</PropertyName>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>Name</PropertyName>
+                            </TableColumnItem>
+                        </TableColumnItems>
+                    </TableRowEntry>
+                </TableRowEntries>
+            </TableControl>
+        </View>
+        <View>
+            <Name>MCRA.Repository.List</Name>
+            <ViewSelectedBy>
+                <TypeName>MCRA.Repository</TypeName>
+            </ViewSelectedBy>
+            <ListControl>
+                <ListEntries>
+                    <ListEntry>
+                        <ListItems>
+                            <ListItem>
+                                <PropertyName>id</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>name</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>idOwner</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>owner</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>userAccessLevel</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>idParentRepository</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>isUserRootRepository</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>repositoryType</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>SourceURL</PropertyName>
+                            </ListItem>
+                        </ListItems>
+                    </ListEntry>
+                </ListEntries>
+            </ListControl>
+        </View>
+        <View>
+            <Name>MCRA.Repository.Wide</Name>
+            <ViewSelectedBy>
+                <TypeName>MCRA.Repository</TypeName>
+            </ViewSelectedBy>
+            <WideControl>
+                <WideEntries>
+                    <WideEntry>
+                        <WideItem>
+                            <PropertyName>name</PropertyName>
+                        </WideItem>
+                    </WideEntry>
+                </WideEntries>
+            </WideControl>
+        </View>
+    </ViewDefinitions>
+</Configuration>
diff --git a/Powershell/MCRA.Tools/MCRA.Tools.psd1 b/Powershell/MCRA.Tools/MCRA.Tools.psd1
new file mode 100644
index 0000000000000000000000000000000000000000..a4f6cd2da3c6f6b65bf849567f3313fc40fc96c6
--- /dev/null
+++ b/Powershell/MCRA.Tools/MCRA.Tools.psd1
@@ -0,0 +1,111 @@
+#
+# Module manifest for module 'MCRA.Tools'
+#
+# Generated on: 10-03-2020
+#
+
+@{
+
+# Script module or binary module file associated with this manifest.
+RootModule = 'MCRA.Tools.psm1'
+
+# Version number of this module.
+ModuleVersion = '2.0.0.0'
+
+# ID used to uniquely identify this module
+GUID = '9af6f6e5-ef04-4322-b4ca-4fd59712f2dd'
+
+# Author of this module
+Author = 'Hans van den Heuvel'
+
+# Company or vendor of this module
+CompanyName = 'Wageningen University and Research, Biometris'
+
+# Copyright statement for this module
+Copyright = '(c) 2020. All rights reserved.'
+
+# Description of the functionality provided by this module
+# Description = 'Voorziet in standaardscripts voor de Missing Piece omgeving.'
+
+# Minimum version of the Windows PowerShell engine required by this module
+# PowerShellVersion = ''
+
+# Name of the Windows PowerShell host required by this module
+# PowerShellHostName = ''
+
+# Minimum version of the Windows PowerShell host required by this module
+# PowerShellHostVersion = ''
+
+# Minimum version of Microsoft .NET Framework required by this module
+# DotNetFrameworkVersion = ''
+
+# Minimum version of the common language runtime (CLR) required by this module
+# CLRVersion = ''
+
+# Processor architecture (None, X86, Amd64) required by this module
+# ProcessorArchitecture = ''
+
+# Modules that must be imported into the global environment prior to importing this module
+# RequiredModules = @()
+
+# Assemblies that must be loaded prior to importing this module
+# RequiredAssemblies = @()
+
+# Script files (.ps1) that are run in the caller's environment prior to importing this module.
+# ScriptsToProcess = @('Set-Variables.ps1')
+
+# Type files (.ps1xml) to be loaded when importing this module
+# TypesToProcess = @( )
+
+# Format files (.ps1xml) to be loaded when importing this module
+FormatsToProcess = @(   'Credential.ps1xml',
+                        'MCRA.Repository.ps1xml',
+                        'MCRA.DataSource.ps1xml',
+                        'MCRA.Workspace.ps1xml')
+
+# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
+NestedModules = @(  'Command-Credential.ps1',
+                    'Get-EfsaCatalogue.ps1',
+                    'Get-Repository.ps1',
+                    'Get-DataSource.ps1',
+                    'Get-File.ps1',
+                    'Get-Workspace.ps1',
+                    'Get-Token.ps1',
+                    'Invoke-Api.ps1'
+                    )
+
+# Functions to export from this module
+FunctionsToExport = @(  'Clear-Credential','Get-Credential','Read-Credential','Write-Credential',
+                        'Get-EfsaCatalogue',
+                        'Get-Repository',
+                        'Get-DataSource',
+                        'Get-File',
+                        'Get-Workspace'
+                        )
+
+# Cmdlets to export from this module
+CmdletsToExport = '*'
+
+# Variables to export from this module
+# VariablesToExport = @()
+
+# Aliases to export from this module
+AliasesToExport = '*'
+
+# List of all modules packaged with this module
+# ModuleList = @()
+
+# List of all files packaged with this module
+# FileList = @()
+
+# Private data to pass to the module specified in RootModule/ModuleToProcess
+# PrivateData = ''
+# PrivateData = @{ Token2 = 'global'}
+
+# HelpInfo URI of this module
+# HelpInfoURI = ''
+
+# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
+DefaultCommandPrefix = 'MCRA'
+
+}
diff --git a/Powershell/MCRA.Tools/MCRA.Tools.psm1 b/Powershell/MCRA.Tools/MCRA.Tools.psm1
new file mode 100644
index 0000000000000000000000000000000000000000..b3df4fdcb21183c6a1c3e85f8f793dcb0d78b69f
--- /dev/null
+++ b/Powershell/MCRA.Tools/MCRA.Tools.psm1
@@ -0,0 +1,122 @@
+#
+# Deze Module is in principe leeg, want alle geexporteerde functies staan in aparte bestanden.
+#
+# Enkele functies die in alle functies worden gebruikt.
+Function Write-CmdLetStartMessage {
+<#
+.SYNOPSIS
+Schrijft een melding op het scherm in standaardformaat bij de aanroep van een cmdlet.
+
+.PARAMETER Version
+Het versienummer dat wordt meegegeven.
+
+.PARAMETER Invoke
+Een InvocationInfo object waarvan de gegevens worden geprint.
+
+.NOTES
+    Naam:           Write-CmdLetStartMessage
+    Auteur:         HH
+    Bron:
+    Wijzigingen:    24-08-2018  HH     1.0     Script geboren
+                    26-09-2018  HH     1.1     Automatisch parent invokation uitzoeken toegevoegd.
+#>
+    [OutputType('MCRA.InvokeProperties')]
+    [CmdletBinding()]
+    param(
+        [Parameter( Mandatory=$False,Position=1)]
+        [string]$version,
+        [Parameter(Mandatory=$False,Position=2)]
+        [System.Management.Automation.InvocationInfo]$invoke
+    )
+    $callStack = Get-PSCallStack
+    if ( -not $invoke ) {
+        if ($callStack.Count -gt 1) {
+            $invoke=$callStack[1].InvocationInfo
+        } else {
+            $invoke=[pscustomobject]@{ MyCommand =''; Pipelineposition=''; Line='' }
+        }
+    }
+    # Hack to fix prefix stuff. Must be improved.
+    $thiscommand=$invoke.MyCommand -replace '-MCRA','-'
+    if ( $versie ) {
+        Write-Verbose "[BEGIN] $thiscommand versie $versie (c) $((Get-Date).year) $ThisCompanyName uitgevoerd door $env:USERNAME"
+    } else {
+        Write-Verbose "[BEGIN] $thiscommand (c) $((Get-Date).year) $ThisCompanyName uitgevoerd door $env:USERNAME"
+    }
+    # We gaan eerst de parameters evalueren die niet in de pipeline gaan.
+    ForEach ($key in $invoke.BoundParameters.keys) {
+        $value=Get-Variable $Key -ErrorAction SilentlyContinue
+        if ( $value ) {
+            Write-Verbose "  [PARAM] $thiscommand $key : $($value.value)"
+        }
+    }
+    # Tenslotte geven we als return waarde een object met gegevens die we later kunnen hergebruiken.
+    [pscustomobject][ordered]@{
+        Invoke = $invoke
+        Timer = [Diagnostics.Stopwatch]::StartNew()
+        Version = $version
+        Name = $thiscommand
+        PSTypeName = 'MCRA.InvokeProperties'
+    }
+}
+
+Function Write-CmdLetStopMessage {
+<#
+.SYNOPSIS
+Schrijft een melding op het scherm in standaardformaat bij het stoppen van een cmdlet.
+
+.PARAMETER ScriptProperty
+Een ScriptProperty object, dat uit het Write-CmdLetStartMessage commando komt.
+
+.NOTES
+    Naam:           Write-CmdLetStartMessage
+    Auteur:         HH
+    Bron:
+    Wijzigingen:    24-08-2018  HH     1.0     Script geboren
+#>
+    [CmdletBinding()]
+    param(
+        [Parameter( Mandatory=$False,Position=1)]
+        [object]$scriptproperty
+    )
+
+    if ( $scriptproperty ) {
+        $scriptproperty.timer.Stop()
+        Write-Verbose "[ END ] $($scriptproperty.invoke.MyCommand) ($($scriptproperty.timer.Elapsed.ToString('hh\:mm\:ss\.fff')))."
+    } else {
+        Write-Verbose "[ END ] Einde script."
+    }
+}
+
+Function Get-LocalOSVersion {
+<#
+.SYNOPSIS
+Vraagt lokale OS versie op.
+
+.NOTES
+    Naam:           Get-LocalOSVersion
+    Auteur:         HH
+    Bron:           HH
+    Wijzigingen:    24-08-2018  HH     1.0     Script geboren
+#>
+    [OutputType('System.Version')]
+    [CmdletBinding()]
+    param()
+    # Strict modus
+    Set-StrictMode -Version Latest
+    # Een versienummer van het script.
+    Set-Variable versie -option Constant -value "1.0" -WhatIf:$false
+    # Schrijf een melding op het scherm indien nodig (bij -Verbose)
+    $scriptproperty=Write-CmdLetStartMessage -Invoke $MyInvocation -Version $versie
+
+    [System.Version](Get-CimInstance Win32_OperatingSystem).version
+
+    # Schrijft een melding op het scherm indien nodig (bij -Verbose)
+    Write-CmdLetStopMessage -ScriptProperty $scriptproperty
+}
+
+Set-Variable ThisCompanyName -option Constant -value 'WUR'
+# We exporteren hier alles expliciet, maar in de Manifest (psd bestand) filteren we alles er weer uit.
+Export-ModuleMember -Variable *
+Export-ModuleMember -Function *
+
diff --git a/Powershell/MCRA.Tools/MCRA.Workspace.ps1xml b/Powershell/MCRA.Tools/MCRA.Workspace.ps1xml
new file mode 100644
index 0000000000000000000000000000000000000000..e4c7fafa9d35cb58eee0b52c09a12f927d109a77
--- /dev/null
+++ b/Powershell/MCRA.Tools/MCRA.Workspace.ps1xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<Configuration>
+    <ViewDefinitions>
+        <View>
+            <Name>MCRA.Workspace.Table</Name>
+            <ViewSelectedBy>
+                <TypeName>MCRA.Workspace</TypeName>
+            </ViewSelectedBy>
+            <TableControl>
+                <TableHeaders>
+                    <TableColumnHeader>
+                        <Label>Modified</Label>
+                        <Width>20</Width>
+                        <Alignment>right</Alignment>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>Id</Label>
+                        <Width>6</Width>
+                        <Alignment>right</Alignment>
+                    </TableColumnHeader>
+                    <TableColumnHeader>
+                        <Label>Name</Label>
+                        <Width>50</Width>
+                    </TableColumnHeader>
+                </TableHeaders>
+                <TableRowEntries>
+                    <TableRowEntry>
+                        <TableColumnItems>
+                            <TableColumnItem>
+                                <ScriptBlock>
+                                        $_.modified.ToString('dd-MM-yyyy    HH:mm')
+                                </ScriptBlock>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>id</PropertyName>
+                            </TableColumnItem>
+                            <TableColumnItem>
+                                <PropertyName>Name</PropertyName>
+                            </TableColumnItem>
+                        </TableColumnItems>
+                    </TableRowEntry>
+                </TableRowEntries>
+            </TableControl>
+        </View>
+        <View>
+            <Name>MCRA.Workspace.List</Name>
+            <ViewSelectedBy>
+                <TypeName>MCRA.Workspace</TypeName>
+            </ViewSelectedBy>
+            <ListControl>
+                <ListEntries>
+                    <ListEntry>
+                        <ListItems>
+                            <ListItem>
+                                <PropertyName>id</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>name</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>description</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>tags</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>created</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>modified</PropertyName>
+                            </ListItem>
+                            <ListItem>
+                                <PropertyName>SourceURL</PropertyName>
+                            </ListItem>
+                        </ListItems>
+                    </ListEntry>
+                </ListEntries>
+            </ListControl>
+        </View>
+        <View>
+            <Name>MCRA.Workspace.Wide</Name>
+            <ViewSelectedBy>
+                <TypeName>MCRA.Workspace</TypeName>
+            </ViewSelectedBy>
+            <WideControl>
+                <WideEntries>
+                    <WideEntry>
+                        <WideItem>
+                            <PropertyName>name</PropertyName>
+                        </WideItem>
+                    </WideEntry>
+                </WideEntries>
+            </WideControl>
+        </View>
+    </ViewDefinitions>
+</Configuration>
diff --git a/Powershell/README.md b/Powershell/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..96d336bcabb910150e7990d61beeffcd358e39e8
--- /dev/null
+++ b/Powershell/README.md
@@ -0,0 +1,49 @@
+# How to use the MCRA scripts
+
+## Quick start
+
+### Load Module
+Open a **powershell** and load the directory with the module. No backslash at the end!
+```
+Import-Module -Path .\MCRA.Tools
+```
+Perhaps put this in your profile? Do ``notepad $profile``.
+
+### Store credential
+You have to supply your username and password for the MCRA site.
+Choose a TargetName to your liking. This is a name to which this credential is referred.
+```
+Write-MCRACredential -TargetName MCRA9 -Credential (Get-Credential)
+```
+
+### Browse your repositories
+```
+Get-MCRARepository -Url 'https://mcra.test.wur.nl/Mcra90' -Keyring MCRA9
+```
+For more convenience, store the defaults (perhaps in your profile; do ``notepad $profile``)
+```
+$PSDefaultParameterValues = @{
+    'Get-MCRARepository:Url' = 'https://mcra.test.wur.nl/Mcra90'
+    'Get-MCRARepository:Keyring' = 'MCRA9'
+    'Get-MCRADataSource:Url' = 'https://mcra.test.wur.nl/Mcra90'
+    'Get-MCRADataSource:Keyring' = 'MCRA9'
+    'Get-MCRAWorkspace:Url' = 'https://mcra.test.wur.nl/Mcra90'
+    'Get-MCRAWorkspace:Keyring' = 'MCRA9'
+    'Get-MCRAFile:Url' = 'https://mcra.test.wur.nl/Mcra90'
+    'Get-MCRAFile:Keyring' = 'MCRA9'}
+```
+Happy Powershelling:
+```
+Get-MCRARepository
+Get-MCRARepository|Where Name -match 'agg'
+Get-MCRARepository|Where Id -eq 87
+```
+### Questions?
+```
+Get-Help Get-MCRARepository -Full
+```
+### Examples?
+```
+Get-Help Get-MCRARepository -Example
+```
+