Weedu.psm1
Add-Type -AssemblyName System.Web $script:hostUrl= $null $script:sessionVar = $null $script:loginMsg = "Weedu Anmeldung ist erforderlich: Connect-Weedu" function Connect-Weedu { param( [Parameter(Mandatory=$true)] [string]$Benutzername, [Parameter(Mandatory=$true)] [Security.SecureString]$Kennwort, [Parameter(Mandatory = $true, HelpMessage = "Url zu welcher die Verbindung hergestellt werden soll. Bsp.: https://akad-de.test-weedu.ch")] [string]$HostUrl ) process{ try{ $password = ConvertTo-PlainText $Kennwort $pair = "$($Benutzername):$($password)" $encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair)) $basicAuthValue = "Basic $encodedCreds" $Headers = @{ Accept = "application/json, text/javascript, */*" Authorization = $basicAuthValue } $result = Invoke-WebRequest -Uri "$($HostUrl)/sts/authentication" -Method Post -Headers $Headers -SessionVariable session if($result.StatusCode -eq 200) { $script:sessionVar = $session $script:hostUrl = $HostUrl } else { Write-Error "Login Fehlgeschlagen. Erneut versuchen" } } catch [System.Net.WebException]{ [System.Net.HttpWebResponse]$result = [System.Net.HttpWebResponse] $_.Exception.Response $httperrorcode = $result.StatusCode.Value__ $error.clear() Write-Error "Login Fehlgeschlagen. Erneut versuchen" } } } function Invoke-WqlQuery{ param( [Parameter(Mandatory=$true, HelpMessage = "WQL Abfrage. Bsp: Personen [ohne Aktionen]")] [string]$WQLAbfrage, [Parameter(Mandatory=$false, HelpMessage = "Default 1")] [int]$Page = 1, [Parameter(Mandatory=$false, HelpMessage = "Default 100")] [int]$PageSize = 100 ) process{ if($Page -le 0) { Write-Error "$($Page) ist kein gueltiger Wert fuer Page! Bitte ein Wert groesser 0 eingeben" break } if($PageSize -le 0) { Write-Error "$($PageSize) ist kein gueltiger Wert fuer PageSize! Bitte ein Wert groesser 0 eingeben" break } try{ if(!$script:sessionVar) { Write-Error $script:loginMsg break } $Headers = @{ Accept = "application/json, text/javascript, */*" "Content-Type" = "application/json; charset=UTF-8" } $Body = [PSCustomObject]@{ page=$Page; pageSize=$PageSize; } | ConvertTo-Json $query = "{0}/{1}?auswahlSpalte={2}&wql={3}" -f "$($script:hostUrl)", "index/Abfragen/IndexData", "false", [uri]::EscapeDataString("$($WQLAbfrage)"); $result = Invoke-WebRequest -Uri "$($query)" -Method Post -Headers $Headers -WebSession $script:sessionVar -Body $Body $httperrorcode = $result.Statuscode if($result.StatusCode -eq 200) { $resultConverted = $result | ConvertFrom-Json if($resultConverted.total -eq 0 -or $resultConverted.result.data.count -eq 0) { Write-Warning "Die Abfrage lieferte keine Ergebnisse" } else { $elementVon = 1; $elementBis = $Page * $PageSize if($Page -gt 1) { $elementvon = ($Page -1)* $PageSize + 1 } Write-Host "$($elementvon) - $($elementBis) von $($resultConverted.result.Total) Elementen " -foregroundcolor "green" $resultConvertedData = $resultConverted.result.data Return $resultConvertedData } } else { Write-Error "Bei der Abfrage ist was schief gelaufen. Bitte WQL-Abfrage ueberpruefen oder erneut anmelden" } } catch [System.Net.WebException]{ [System.Net.HttpWebResponse]$result = [System.Net.HttpWebResponse] $_.Exception.Response $httperrorcode = $result.StatusCode.Value__ $error.clear() Write-Error "Bei der Abfrage ist was schief gelaufen. Bitte WQL-Abfrage ueberpruefen oder erneut anmelden" } } } Function ConvertTo-PlainText( [security.securestring]$secure ) { $marshal = [Runtime.InteropServices.Marshal] $marshal::PtrToStringAuto( $marshal::SecureStringToBSTR($secure) ) } Function Set-PersonenMapping { param( [Parameter(Mandatory=$true, HelpMessage = "WeeduUid der Person")] [Guid]$PersonUid, [Parameter(Mandatory=$true, HelpMessage = "Nummer des AbacusMandanten")] [int]$MandantenNummer, [Parameter(Mandatory=$false)] [string]$KundenNummer, [Parameter(Mandatory=$false)] [string]$AdressNummer, [Parameter(Mandatory=$false)] [string]$ADLoginName ) process{ try{ if(!$script:sessionVar) { Write-Error $script:loginMsg break } if([string]::IsnullOrEmpty($KundenNummer) -And [string]::IsnullOrEmpty($AdressNummer) -And [string]::IsnullOrEmpty($ADLoginName)) { Write-Error "KundenNummer/AdressNummer/AdLoginName, mindestens ein Parameter ist erforderlich." break } $Headers = @{ Accept = "application/json, text/javascript, */*" "Content-Type" = "application/json; charset=UTF-8" } $Body = New-Object PSObject if(-Not [string]::IsnullOrEmpty($ADLoginName)) { ($Body | Add-Member NoteProperty ADUserLogonName $($ADLoginName)) } if(-Not [string]::IsnullOrEmpty($AdressNummer)) { ($Body | Add-Member NoteProperty AbacusAdressnummer $($AdressNummer)) } if(-Not [string]::IsnullOrEmpty($KundenNummer)) { ($Body | Add-Member NoteProperty AbacusKundennummer $($KundenNummer)) } $Body = $Body | ConvertTo-JSON $query = "{0}/rest/Personen/{1}/AbacusMandanten/{2}" -f "$($script:hostUrl)", [uri]::EscapeDataString($PersonUid), [uri]::EscapeDataString($MandantenNummer) $result = Invoke-WebRequest -Uri "$($query)" -Method Put -Headers $Headers -WebSession $script:sessionVar -Body $Body if($result.StatusCode -eq 200) { Write-Host "ok" } else { Write-Error "Fehler beim Update des PersonenMapping {0}.", $result.Statuscode } } catch [System.Net.WebException]{ Write-Error "$($script:hostUrl): $($_.Exception.Message)" [System.Net.HttpWebResponse]$result = [System.Net.HttpWebResponse] $_.Exception.Response $httperrorcode = $result.StatusCode.Value__ $error.clear() } } } Export-ModuleMember -function Connect-Weedu Export-ModuleMember -function Invoke-WqlQuery Export-ModuleMember -function Set-PersonenMapping |