> For the complete documentation index, see [llms.txt](https://docs.videc.de/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.videc.de/june5-3.6/web-api/web-api-client-code-beispiele/powershell-code-beispiele.md).

# PowerShell Code-Beispiele

Die folgenden Code-Beispiele sind mit *Powershell* gescriptet.

### Powershell Kurz Einführung

1. Um Powershell anzuwenden ist die IDE zu starten. (Ausführen als Administrator)

C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell\_ISE.exe

{% hint style="info" %}
Es gibt die 32Bit und 64 Bit Variante!
{% endhint %}

2. Folgender Befehl muss ausgeführt werden damit die Ausführung von PS (Powerskript) erlaubt ist:

Set-ExecutionPolicy Unrestricted

Die Meldung mit "Ja" bestätigen. Windows erlaubt jetzt die Ausführung von Powerskripten.

Um die u.A. Skripte zu testen kopieren Sie den Code in eine Datei mit der Endung .ps1

Diese Datei kann dann in der Powershell Anwendung (ISE) ausgeführt werden.

<details>

<summary>01 Authentifizierung</summary>

{% code overflow="wrap" lineNumbers="true" %}

```powershell
# Einstieg in die Powershell / WebAPI Welt von JUNE5
# Zum Testen kann der Portserver unter https://portal.videc.info verwendet werden
# Dieses Skript authentifiziert sich gegen die JUNE5 API und ruft lediglich ein paar Informationen ab
$MyUser = 'admin'
$MyPassword = 'admin'
$J5Base = "https://portal.videc.info/api/v3.6/"

$MyVersion = Invoke-RestMethod -Uri "$J5Base/System/GetVersion"
"Folgende JUNE5 Version wird verwendet: " + $MyVersion
" "

$Body = @{
    Logon = "admin"
    Password = "admin"
    LoginType = 0
}
$MyJUNE5 = Invoke-RestMethod -Uri "$J5Base/auth/authenticate" -Method Post -Body $Body -SessionVariable sess
" "
"001 - Token String    = " + $MyJUNE5.Token
" "
" "
"002 - Token Identity  = " + $MyJUNE5.IdentityToken
" "
"003 - Client Uid               = " + $MyJUNE5.IdentityToken.ClientUid
"004 - DataSource Read          = " + $MyJUNE5.IdentityToken.DataSourceRead
"005 - DataSource Read / Hidden = " + $MyJUNE5.IdentityToken.DataSourceRead.Hidden
```

{% endcode %}

</details>

<details>

<summary>02 Authentifizierung und Abrufen der Objektliste</summary>

{% code overflow="wrap" lineNumbers="true" %}

```powershell
# Dieses Skript authentifiziert sich gegen die JUNE5 API und ruft die Objektliste ab (Alle Objekte, oder je nach Anforderungen nur bestimmte Objekttypen)
# SV = Standard View
# Zu jedem Objekt können weitere Informationen abgefragt werden.

# Basisdaten definieren
$MyUser = 'admin'
$MyPassword = 'admin'
$Base = "https://portal.videc.info/api/v3.6/"

# Login und Token holen
$MyJUNE5 = Invoke-RestMethod -Uri "$Base/auth/authenticate" -Method Post -Body @{"Logon" = $MyUser; "Password" = $MyPassword}

# Daten aus GetList holen
$MyData = Invoke-RestMethod -Uri "$Base/ViewModel/GetList?viewModelStrongName=SV" -Headers @{"June5-Token" = $MyJUNE5.Token}

# Daten als Tabelle ausgeben
    # $MyData | ft                          # Alle Daten
    # $MyData | ft DataSourceKey, Name      # Nur zwei Spalten
    # $MyData | Out-GridView                # Wenn ein paar Filter gewünscht sind

    # Alle Objekte, sortiert nach Typ, formatiert in einer Tabelle
    # $MyData | Sort-Object ObjectModelType | ft -Property DataSourceKey, Name, ObjectModelType -GroupBy ObjectModelType

# Wenn man einzelne Items durchsuchen möchte:
foreach($Item in $MyData){
    <#
        z.B: nur Objekte vom Typ "Dashboard"
        - .Created = Zeitpunkt an dem Das Objekt erstellt wurde
        - .DataSourceKey = Der eindeutige DataSourceKey
        - .Uid = Die eindeutige Objekt ID
        - .UidCreated = Derjenige der das Objekt (Dashboad) erstellt hat.
        nun sind Rückschlüsse auf den Benutzer möglich, oder das Objekt kann gelöscht werden
    #>
    if ($Item.ObjectModelType -eq 16){
        $Item.ObjectPermission.Created + "   " + ($Item.DataSourceKey).PadRight(40, ' ')  + "   " + $Item.Uid + "   " + $Item.Object.UidCreated
    }
}
<#
Verfügbare Spalten
ShortAndLongName           // Kurz und Langname
LongAndShortName           // Lang und Kurzname
ClientUid                  // Mandanten ID
Uid
Name
DataSourceKey              // Eindeutiger "harter" Schlüssel
ParentUid                  // Bei Hierarchien das obere Element (Elternteil)
Object
ObjectModelType            // Siehe unten
ObjectModelItemUid
Items
ItemCount
HierarchyLevel
RootViewUid
DataSourceType             // Siehe unten
SortIndex
ObjectPermission           // Zugriffsrechte
#>
```

{% endcode %}

</details>

<details>

<summary>03 Authentifizierung und Abrufen von Messwerten für eine Messgröße</summary>

{% code overflow="wrap" lineNumbers="true" %}

```powershell
# Dieses Skript authentifiziert sich gegen die JUNE5 API und ruft die Messdaten einer Messgröße über einen definierten Zeitraum ab

# Basisdaten definieren
$MyUser = 'admin'
$MyPassword = 'admin'
$Base = "https://portal.videc.info/api/v3.6/"

# Login und Token holen
Write-Host -ForegroundColor Yellow "Login"
$MyJUNE5 = Invoke-RestMethod -Uri "$Base/auth/authenticate" -Method Post -Body @{"Logon" = $MyUser; "Password" = $MyPassword}
$MyJUNE5.Token
" "

Write-Host -ForegroundColor Yellow "Warte 4 Sekunden"
Start-Sleep -Seconds 4
" "

# Request Payload definieren
# Minimalangabe ist der DataSourceKey
$ReqPay = @{
Parameters = @(
    @{
      DataSourceKey = 'J5001DE.TA'
      From = '2023-01-01T00:00:00.000'
      To = '2024-06-01T00:00:00.000'
      DataKind = '0'    # 0=Pro, 1=Int1, 2=Int2, ...,20=Day, 50=Week, 51=Month, 52=Year, 300=Manual
      ValueKind = '0'   # 0=VAL, 5=PMIN, 6=PMAX...
      Resolution = '0'  # -1, 2000

      # Optionale Parameter:
      # ObjectModelStrongName = 'string'
      # ObjectModelItemUid =  "00000000-0000-0000-0000-000000000000"
      # Handle = "00000000-0000-0000-0000-000000000000"
      # OrderBy = "true"
      # IgnoreNullValues = 'true'
    }
)}

$JSON = $ReqPay | ConvertTo-Json

Write-Host -ForegroundColor Yellow "So sieht das JSON Objekt aus"
$JSON
" "

#"Abfrage einer Variablen"
$MyData = Invoke-RestMethod -Uri "$Base/ViewModel/GetProcessVariableListValuesByDataSourceKey" -Method Post -Headers @{"June5-Token" = $MyJUNE5.Token} -Body $JSON -ContentType 'application/json'

Write-Host -ForegroundColor Yellow "Anzahl der Werte"
$MyData.ObjectList.Values.Count

Write-Host -ForegroundColor Yellow "Ausgabe der Rohdaten einer Variablen"
$MyData.ObjectList.Values | ft
" "
```

{% endcode %}

</details>

<details>

<summary>04 Authentifizierung und Abrufen von Messwerten für mehrere Messgrößen</summary>

{% code overflow="wrap" lineNumbers="true" %}

```powershell
# Dieses Skript authentifiziert sich gegen die JUNE5 API und ruft die Messdaten mehrerer Messgrößen ab

# Basisdaten definieren
$MyUser = 'admin'
$MyPassword = 'admin'
$Base = "https://portal.videc.info/api/v3.6/"

# Login und Token holen
Write-Host -ForegroundColor Yellow "Login"
$MyJUNE5 = Invoke-RestMethod -Uri "$Base/auth/authenticate" -Method Post -Body @{"Logon" = $MyUser; "Password" = $MyPassword}
$MyJUNE5.Token
" "

Write-Host -ForegroundColor Yellow "Warte 2 Sekunden"
Start-Sleep -Seconds 2
" "

# Request Payload definieren
$ReqPay = @{
Parameters = @(
    @{
      DataSourceKey = 'J5001DE.TA'
      From = '2025-01-01T00:00:00.000'
      To = '2025-01-04T00:00:00.000'
      DataKind = '0'  # 0=Pro, 1=Int1, 2=Int2, ...,20=Day, 50=Week, 51=Month, 52=Year, 300=Manual
      ValueKind = '0' # 0=VAL, 5=PMIN, 6=PMAX...
      Resolution = '2000'
      IgnoreNullValues = 'true'}
    @{
      DataSourceKey = 'J5001DE.LD'
      From = '2025-02-01T00:00:00.000'
      To = '2025-02-04T00:00:00.000'
      DataKind = '0'  # 0=Pro, 1=Int1, 2=Int2, ...,20=Day, 50=Week, 51=Month, 52=Year, 300=Manual
      ValueKind = '0' # 0=VAL, 5=PMIN, 6=PMAX...
      Resolution = '2000'}
)}

$JSON = $ReqPay | ConvertTo-Json

Write-Host -ForegroundColor Yellow "So sieht das JSON Objekt der Anfrage aus"
$JSON
" "

#"Abfrage ausführen"
$MyData = Invoke-RestMethod -Uri "$Base/ViewModel/GetProcessVariableListValuesByDataSourceKey" -Method Post -Headers @{"June5-Token" = $MyJUNE5.Token} -Body $JSON -ContentType 'application/json'

Write-Host -ForegroundColor Yellow "Ausgabe aller Variablen und den Daten TimeStamp, Value"

# Äussere Schleife für die Varialen
foreach($Var in $MyData.ObjectList){
  $Var.DataSourceKey + " (" + $Var.Name + ") [" + $Var.ProcessUnit + "]"

  # Innere Schleife für die Werte
  foreach($Item in $Var.Values){
      $Item.TimeStamp + ";" + $Item.Value
  }
  " "
}

Write-Host -ForegroundColor Yellow "Anzahl der Werte aller Variablen"
$MyData.ObjectList.Values.Count
```

{% endcode %}

</details>

<details>

<summary>05 Authentifizierung und Abrufen der Informationen der registrierten Benutzer</summary>

{% code overflow="wrap" lineNumbers="true" %}

```powershell
# Dieses Skript authentifiziert sich gegen die JUNE5 API und ruft die Benutzerliste ab

# Basisdaten definieren
$MyUser = 'admin'
$MyPassword = 'admin'
$Base = "https://portal.videc.info/api/v3.6/"

# Login und Token holen
$MyJUNE5 = Invoke-RestMethod -Uri "$Base/auth/authenticate" -Method Post -Body @{"Logon" = $MyUser; "Password" = $MyPassword}
# Daten aus GetList holen
$MyData = Invoke-RestMethod -Uri "$Base/UserAdministration/GetUsers?userType=0" -Headers @{"June5-Token" = $MyJUNE5.Token}

# Daten als Tabelle ausgeben
     $MyData | ft Logon, LastName, Firstname, Uid, IsEnabled, UidCreated      # Nur die wichtigsten Spalten
    # $MyData | Out-GridView                                      # Wenn ein paar Filter gewünscht sind

# Wenn man einzelne Items durchsuchen möchte:

foreach($Item in $MyData){
    $Item.Logon
    $Item.UidCreated
}
```

{% endcode %}

</details>

<details>

<summary>06 Authentifizierung und Abrufen eines PDF acron Reports</summary>

{% code overflow="wrap" lineNumbers="true" %}

```powershell
# Dieses Skript authentifiziert sich gegen die JUNE5 API und ruft ein PDF Bericht ab und speichert diesen als lokale PDF Datei.
# Die Abfrage erfolgt über folgende Schritte:
# Step 1: Einloggen und Token geben lassen
# Step 2: Messgrößenliste ermitteln, allerdings nur die Berichtsobjekte
# Step 3: Mit einer Uid eine Berichtsobjektes den PDF Stream holen und ggf. als Datei schreiben
# Hintergrundinformationen

# Url encoded character for
# $ = %24
# ! = %25
# & = %26
# ? = %3F

# Basisdaten definieren
$MyUser = 'admin'
$MyPassword = 'admin'
$Base = "https://portal.videc.info/api/v3.6/"

# Step 1: Login und Token holen
Write-Host -ForegroundColor Yellow "Step 1: Login mit Token"
$MyJUNE5 = Invoke-RestMethod -Uri "$Base/auth/authenticate" -Method Post -Body @{"Logon" = $MyUser; "Password" = $MyPassword}
$MyJUNE5.Token
" "
# Step 2: Messgrößenliste ermitteln, allerdings nur die Berichtsobjekte
# Alle Parameter für GetListPaged erstellen
# ObjectModelType 128 ist für Berichte
# Weitere ObjectModelTypes:
# 4 = Gruppe
# 16 = ProcessVariable (Auto)
# 32 = ProcessVariable (Rechen)
# 64 = ProcessVariable (Hand)
# 128 = Berichte
# 256 = Diagramm

$Filter = "`$filter=ObjectModelType eq Videc.June5.Entities.ObjectModelType'128'"
$Top = "&`$top=500"  #Top und Skip sind OData!
$Skip = "&`$skip=0"
$Order = "&`$orderby = DataSourceKey asc, Name asc"

# Gesamt URI erstellen und ausgeben
Write-Host -ForegroundColor Yellow "Step 2: Messgrößenliste ermitteln, allerdings nur die Berichtsobjekte vom Typ 128:"
$Uri = $Base + "ViewModel/GetListPaged?" + $Filter + $Top + $Skip + $Order
$Uri
" "
$MyData = Invoke-RestMethod -Uri $Uri -Method Get -Headers @{"June5-Token" = $MyJUNE5.Token}
#$MyData.Items | Out-GridView

# Step 3: Mit einer Berichtsobjekt Uid den PDF Stream holen

# Uid des ersten Berichts, Typ ist hier unbekannt, kann also Monat oder Jahr usw. sein
# Nun ist die UID eines Berichtes bekannt. Mit der Uid des Berichtes kann man den PDF Stream holen
$MyPDFReportUID = $MyData.Items[0].ObjectModelItemUid

# Der Token wird nochmal mitübergeben, da die Webanwendung den Bericht aus in einem extr Frame ausgeben kann.
# Bei PrintReportExt müssen alle Parameter angegeben werden.
$Token = "june5Token=" + [System.Web.HttpUtility]::UrlEncode($MyJUNE5.Token)
$Uid = "&uid=" + $MyPDFReportUid
$From = "&from=2022-05-01T00:00:00.000"
$To = "&to=2022-06-01T00:00:00.000"
$widthIntervall = "&widthIntervall=60"
$filterName = "&filterName="
$isPlantFilter = "&isPlantFilter=true"

$Uri = $Base + "ViewModel/PrintReportExt?" + $Token + $Uid + $From + $To + $widthIntervall + $filterName + $isPlantFilter

Write-Host -ForegroundColor Yellow "Step 3: PDF Stream holen und ggf. als Datei schreiben"

# Schreibt direkt als Datei
$MyStream = Invoke-RestMethod -Uri $Uri -Method Get -Headers @{"June5-Token" = $MyJUNE5.Token} -OutFile ".\MyReport2.pdf"
```

{% endcode %}

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.videc.de/june5-3.6/web-api/web-api-client-code-beispiele/powershell-code-beispiele.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
