parent
b341ae404d
commit
2500cf9999
|
|
@ -0,0 +1,96 @@
|
|||
# Funktion zum Konvertieren des LastLogonTimestamp in Datum
|
||||
function Convert-LastLogonTimestamp {
|
||||
param (
|
||||
[Parameter(Mandatory = $true)]
|
||||
[long]$Timestamp
|
||||
)
|
||||
|
||||
$DateTime = [DateTime]::FromFileTime($Timestamp)
|
||||
return $DateTime
|
||||
}
|
||||
|
||||
# Funktion zum Abrufen der lokalen IP-Adresse
|
||||
function Get-LocalIPAddress {
|
||||
$ipAddress = [System.Net.Dns]::GetHostAddresses([System.Net.Dns]::GetHostName()) |
|
||||
Where-Object { $_.AddressFamily -eq 'InterNetwork' } |
|
||||
Select-Object -First 1
|
||||
return $ipAddress.IPAddressToString
|
||||
}
|
||||
|
||||
# Gruppe "Users" abrufen
|
||||
$groupName = "Reporting"
|
||||
$group = Get-ADGroup -Filter { Name -eq $groupName }
|
||||
|
||||
if ($group -eq $null) {
|
||||
Write-Error "Gruppe '$groupName' wurde nicht gefunden."
|
||||
exit
|
||||
}
|
||||
|
||||
# Mitglieder der Gruppe abrufen
|
||||
$groupMembers = Get-ADGroupMember -Identity $group -Recursive | Where-Object { $_.objectClass -eq 'user' }
|
||||
|
||||
# Abrufen der lokalen IP-Adresse
|
||||
$localIPAddress = Get-LocalIPAddress
|
||||
|
||||
# Erstellen einer Hash-Tabelle zum Speichern der letzten Anmeldeinformationen für jeden Benutzer
|
||||
$userLogins = @{}
|
||||
|
||||
# Umwandeln der Benutzerinformationen und Ausgabe zur Konsole
|
||||
foreach ($member in $groupMembers) {
|
||||
$user = Get-ADUser -Identity $member.SamAccountName -Properties LastLogonTimestamp,createTimeStamp
|
||||
$lastLogonDateTime = if ($user.LastLogonTimestamp) { (Convert-LastLogonTimestamp -Timestamp $user.LastLogonTimestamp).ToString("yyyy-MM-dd HH:mm:ss") } else { ($user.createTimeStamp).ToString("yyyy-MM-dd HH:mm:ss") }
|
||||
|
||||
$convertedUser = [PSCustomObject]@{
|
||||
username = $user.SamAccountName
|
||||
lastaccess = $lastLogonDateTime
|
||||
ipaddress = $localIPAddress
|
||||
}
|
||||
|
||||
# Ausgabe des konvertierten Benutzers zur Konsole
|
||||
Write-Output $convertedUser
|
||||
|
||||
# Rückgabe des konvertierten Benutzers für JSON-Umwandlung
|
||||
$userLogins[$user.SamAccountName] = $convertedUser
|
||||
}
|
||||
|
||||
# Define the JSON file path with current date and hour
|
||||
$dateString = (Get-Date).ToString("yyyyMMdd_HH-mm")
|
||||
$jsonPath = "C:\Scripte\LastLogins_$dateString.json"
|
||||
|
||||
# Output the last login event for each user to the JSON file
|
||||
$userLoginsArray = $userLogins.GetEnumerator() | ForEach-Object {
|
||||
$_.Value
|
||||
}
|
||||
|
||||
$userLoginsArray | ConvertTo-Json | Set-Content -Path $jsonPath -Encoding UTF8
|
||||
|
||||
Write-Output "JSON file created at $jsonPath"
|
||||
|
||||
# API endpoint URL
|
||||
$apiUrl = "http://api.stines.de:8001/report"
|
||||
|
||||
# Your API key
|
||||
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
|
||||
$headers.Add("Content-Type", "application/json")
|
||||
$headers.Add("access_token", "^YWUbG7yX*V!tV^KBSd*2c&vdN3wV9a2i7f3hfGFMBYFxi6#mMiJGiaA5KEHE%B*miK%qb7rQ67gmcYP@gqmux8")
|
||||
|
||||
# Loop through the collected user logins and send each as a JSON payload to the API
|
||||
foreach ($userLogin in $userLoginsArray) {
|
||||
$userLoginObject = $userLogin | Select-Object username, lastaccess, ipaddress
|
||||
|
||||
# Convert the user login object to JSON
|
||||
$jsonPayload = $userLoginObject | ConvertTo-Json -Depth 3
|
||||
|
||||
# Encode JSON payload in UTF-8
|
||||
$utf8JsonPayload = [System.Text.Encoding]::UTF8.GetBytes($jsonPayload)
|
||||
|
||||
# Send the JSON payload to the API
|
||||
try {
|
||||
$response = Invoke-RestMethod -Uri $apiUrl -Method Post -Body $utf8JsonPayload -ContentType 'application/json' -Headers $headers
|
||||
Write-Output "Sent login data for user $($userLoginObject.username) to the API. Response: $response"
|
||||
} catch {
|
||||
Write-Error "Failed to send login data for user $($userLoginObject.username). Error: $_"
|
||||
}
|
||||
}
|
||||
|
||||
Write-Output "Finished sending login data to the API"
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
## Abfrage des Eregniss für Userlogin (lastacces)
|
||||
|
||||
## Abfrage Gruppen (groups)
|
||||
|
||||
## Abfrage Festplatten Belegung (space_used)
|
||||
|
||||
## Abfrage Profile Ordner Belegung (services_space_used) -> übergabe item & spaceused
|
||||
|
||||
## Abfrage Updates (updates = yes/no)
|
||||
|
|
@ -1,117 +0,0 @@
|
|||
import msal
|
||||
import requests
|
||||
import pandas as pd
|
||||
from datetime import datetime
|
||||
|
||||
# Konfigurationsvariablen
|
||||
client_id = '90571c9b-d407-4d2a-aadd-4a523ff85296'
|
||||
client_secret = 'ryp8Q~qr6LBOUL2G333a.mf-vg5V..ONl7qJTdza'
|
||||
tenant_id = '9e449aaa-285c-4572-a132-58db027026d0'
|
||||
api_server_endpoint = "http://api.stines.de:8001/office/post"
|
||||
# headers = 'access_token':'^YWUbG7yX*V!tV^KBSd*2c&vdN3wV9a2i7f3hfGFMBYFxi6#mMiJGiaA5KEHE%B*miK%qb7rQ67gmcYP@gqmux8'
|
||||
|
||||
# Die URL für das Token
|
||||
authority = f'https://login.microsoftonline.com/{tenant_id}'
|
||||
|
||||
# Der Scope für die Microsoft Graph API
|
||||
scope = ['https://graph.microsoft.com/.default']
|
||||
|
||||
# MSAL-Instanz erstellen
|
||||
app = msal.ConfidentialClientApplication(
|
||||
client_id,
|
||||
authority=authority,
|
||||
client_credential=client_secret,
|
||||
)
|
||||
|
||||
# Token erhalten
|
||||
result = None
|
||||
result = app.acquire_token_silent(scope, account=None)
|
||||
|
||||
if not result:
|
||||
print("Kein Caching vorhanden, holen Sie ein neues Token.")
|
||||
result = app.acquire_token_for_client(scopes=scope)
|
||||
print(result)
|
||||
|
||||
if "access_token" in result:
|
||||
# Token erfolgreich erhalten
|
||||
access_token = result['access_token']
|
||||
|
||||
print(access_token)
|
||||
|
||||
# API-Endpunkt für aktive Office-Pakete
|
||||
endpoint = "https://graph.microsoft.com/v1.0/users?$select=userPrincipalName,assignedLicenses,signInActivity"
|
||||
|
||||
|
||||
headers = {
|
||||
'Authorization': f'Bearer {access_token}',
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
|
||||
response = requests.get(endpoint, headers=headers)
|
||||
|
||||
if response.status_code == 200:
|
||||
# Die Antwort als JSON behandeln
|
||||
data = response.json()
|
||||
|
||||
# Extrahieren der Benutzerdaten aus dem JSON
|
||||
users = data.get('value', [])
|
||||
|
||||
# Die `skuId` und `lastNonInteractiveSignInDateTime` extrahieren und hinzufügen
|
||||
user_list = []
|
||||
for user in users:
|
||||
if 'assignedLicenses' in user:
|
||||
for license in user['assignedLicenses']:
|
||||
if 'skuId' in license:
|
||||
user_copy = user.copy()
|
||||
user_copy['skuId'] = license['skuId']
|
||||
if user_copy.get('signInActivity'):
|
||||
sign_in_time = user_copy['signInActivity'].get('lastNonInteractiveSignInDateTime')
|
||||
if sign_in_time:
|
||||
user_copy['lastNonInteractiveSignInDateTime'] = datetime.strptime(sign_in_time,'%Y-%m-%dT%H:%M:%SZ').strftime('%Y-%m-%d %H:%M:%S')
|
||||
else:
|
||||
user_copy['lastNonInteractiveSignInDateTime'] = None
|
||||
else:
|
||||
user_copy['lastNonInteractiveSignInDateTime'] = None
|
||||
user_list.append(user_copy)
|
||||
|
||||
# Filtern der Benutzer, die eine `skuId` haben
|
||||
users_with_skuId = [user for user in user_list if user['skuId']]
|
||||
|
||||
# Konvertieren der Benutzerdaten in ein DataFrame
|
||||
df = pd.DataFrame(users_with_skuId)
|
||||
|
||||
# Pandas Anzeigeoptionen anpassen
|
||||
pd.set_option('display.max_columns', None)
|
||||
pd.set_option('display.max_rows', None)
|
||||
pd.set_option('display.max_colwidth', None)
|
||||
pd.set_option('display.width', 1000)
|
||||
|
||||
# Alles nach dem @ im "User Principal Name" entfernen
|
||||
if 'userPrincipalName' in df.columns:
|
||||
df['userPrincipalName'] = df['userPrincipalName'].str.split('@').str[0]
|
||||
|
||||
# Nur die gewünschten Spalten auswählen und an die API-Server übergeben
|
||||
selected_columns = df[["userPrincipalName", "skuId", "lastNonInteractiveSignInDateTime"]]
|
||||
reporting_date = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||
|
||||
for index, row in selected_columns.iterrows():
|
||||
payload = {
|
||||
"itemkey": row["skuId"],
|
||||
"username": row["userPrincipalName"],
|
||||
"reportingdate": reporting_date,
|
||||
"lastaccess": row["lastNonInteractiveSignInDateTime"]
|
||||
}
|
||||
api_response = requests.post(api_server_endpoint, json=payload, headers= {'access_token':'^YWUbG7yX*V!tV^KBSd*2c&vdN3wV9a2i7f3hfGFMBYFxi6#mMiJGiaA5KEHE%B*miK%qb7rQ67gmcYP@gqmux8'})
|
||||
if api_response.status_code == 200:
|
||||
print(f"Erfolgreich gesendet: {payload}")
|
||||
else:
|
||||
print(f"Fehler beim Senden von {payload}: {api_response.status_code} - {api_response.text}")
|
||||
|
||||
else:
|
||||
print(f"Fehler beim Abrufen der Daten: {response.status_code}")
|
||||
print(f"Antwort: {response.text}")
|
||||
else:
|
||||
print("Fehler beim Abrufen des Tokens")
|
||||
print(result.get("error"))
|
||||
print(result.get("error_description"))
|
||||
print(result.get("correlation_id"))
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
import os
|
||||
import sys
|
||||
import requests
|
||||
|
||||
current_version = []
|
||||
new_version = []
|
||||
|
||||
# Get Current Version of Files -> Verionfile txt on /opt/agents/version.txt
|
||||
|
||||
# Check Verison on Github by Curl https://gitlab.stines.de
|
||||
Loading…
Reference in New Issue