istike2
Goto Top

Admin HilfsTool umsetzen mit Python oder Powershell Core

Hallo,

als Aufgabe für meine Ausbildung müsste ich bis Ende des Jahres folgende Admin-Hilfstool entwickeln:

Das Tool soll von den neuen Azubis (ab 2022) für die manuelle Anpassung der neuen Rechner verwendet werden.
(also alles was nach dem Einspielen des aktuellen Windows 10 Images noch manuell angepasst werden muss)

Die Beispiel-Aufgaben sind:

-- Macrium Reflect deinstallieren (es ist zwangläufig im Image)
-- Seriennummer auslesen --> wird am Ende der Ausführung per Mail versendet
-- Bitlocker aktivieren
-- Bitlocker Recovery Key auslesen --> wird am Ende der Ausführung per Mail versendet
-- AnyDesk Printer, Fax, Microsoft PDF Drucker entfernen
-- Outlook 2019 ausführen und das Exchange-Einrichtungs-Dialog "durchklicken"
-- Zwei Netzwerkdrucker installieren
usw.

Das Tool soll also ein "Rahmen" sein, wo ähnliche Aufgaben schnell hinzugefügt und angepasst werden können.
Der Code soll in einem Bitbucket-Repository sein und allen Azubis zur Verfügung stehen.

Wenn das Programm die Aufgaben abgearbeitet hat, soll auf dem Bildschirm eine visuelle Rückmeldung kommen bzw. eine Mail mit den Ergebnissen versendet werden.

(es ist mir natürlich auch bewusst, dass man normalerweise anderes Tools für so etwas verwendet, hier gibt es aber nicht die Möglichkeit UNI-übergreifend solche Tools auszurollen. Unsere Abteilung bekommt dafür kein Erlaubnis), daher die Idee mit einem eigenen Hilfstool.

Meine Frage ist folgendes:

Würdet ihr für so etwas eher Powershell Core oder Python with PyCharm empfehlen?

#1 Python würde mir die Möglichkeit geben mit PyQT eine halbwegs ansprechende GUI zu entwickeln.
#2 PS Core hätte aber beim "Ausrollen" Vorteile, weil Python nicht immer installiert werden müsste.

Vielen Dank für eure Meinungen und (Gegenvorschläge)

LG

I.

Content-Key: 1389329069

Url: https://administrator.de/contentid/1389329069

Printed on: April 19, 2024 at 05:04 o'clock

Member: erikro
erikro Oct 14, 2021 at 17:01:55 (UTC)
Goto Top
Moin,

Zitat von @istike2:
als Aufgabe für meine Ausbildung müsste ich bis Ende des Jahres folgende Admin-Hilfstool entwickeln:

Das Tool soll von den neuen Azubis (ab 2022) für die manuelle Anpassung der neuen Rechner verwendet werden.
(also alles was nach dem Einspielen des aktuellen Windows 10 Images noch manuell angepasst werden muss)

Wie? Eine Hausaufgabe mit praktischem Bezug? Das ist gegen die Regeln! face-wink

-- Macrium Reflect deinstallieren (es ist zwangläufig im Image)

Mit der PS vorher aus dem Image entfernen. face-wink Oder eben hinter deinstallieren.

-- Seriennummer auslesen --> wird am Ende der Ausführung per Mail versendet

Welche Seriennummer? Die des Smartphones des Users? face-wink

-- Bitlocker aktivieren
-- Bitlocker Recovery Key auslesen --> wird am Ende der Ausführung per Mail versendet

Powershell. Guckst Du hier:
https://blog.andreas-schreiner.de/2017/10/10/bitlocker-systemlaufwerksve ...

-- AnyDesk Printer, Fax, Microsoft PDF Drucker entfernen

Powershell

-- Outlook 2019 ausführen und das Exchange-Einrichtungs-Dialog "durchklicken"

Wird mit der PS auch gehen, wenn auch nicht so einfach. Viel Spaß.

-- Zwei Netzwerkdrucker installieren

Powershell

Das Tool soll also ein "Rahmen" sein, wo ähnliche Aufgaben schnell hinzugefügt und angepasst werden können.

Powershell

Der Code soll in einem Bitbucket-Repository sein und allen Azubis zur Verfügung stehen.

Dem Repo ist es bestimmt egal, in was da gecoded wird.

Wenn das Programm die Aufgaben abgearbeitet hat, soll auf dem Bildschirm eine visuelle Rückmeldung kommen bzw. eine Mail mit den Ergebnissen versendet werden.

Kann die PS auch.

(es ist mir natürlich auch bewusst, dass man normalerweise anderes Tools für so etwas verwendet, hier gibt es aber nicht die Möglichkeit UNI-übergreifend solche Tools auszurollen. Unsere Abteilung bekommt dafür kein Erlaubnis), daher die Idee mit einem eigenen Hilfstool.

So unüblich ist das gar nicht, sowas zu scripten.

Würdet ihr für so etwas eher Powershell Core oder Python with PyCharm empfehlen?

Ich glaube, die habe ich hinreichend beantwortet. face-wink

#1 Python würde mir die Möglichkeit geben mit PyQT eine halbwegs ansprechende GUI zu entwickeln.

Die Lernkurve, wie man das mit PS macht, ist gar nicht so steil, vor allem, wenn Du das unter Python schon kannst. Die PS bietet alles, was Du brauchst für eine GUI. Ist doch Windows. face-wink

#2 PS Core hätte aber beim "Ausrollen" Vorteile, weil Python nicht immer installiert werden müsste.

So ist es. Allerdings fürchte ich, dass bei dem Projekt noch Module nachgeladen werden müssen. Du solltest dann klären, ob die Azubis das dürfen, wenn sie nicht installiert sind. Mittlerweile kann man das ja so konfigurieren, dass sich die PS automatisch aus den Repos bedient, die vertrauenswürdig sind. Die Frage ist nur, ob das bei den Usern so ist. Dann musst Du doch wieder dafür sorgen, dass die Module vorhanden sind.

Vielen Dank für eure Meinungen und (Gegenvorschläge)

Mein Gegenvorschlag wäre, das, was alle Rechner betrifft, schon im Image gemacht wird. Also einmal einen Master aufsetzen, dort alles so einrichten, wie es bei allen sein soll, das dann sysprepen und klonen. Den Clone dann auf alle verteilen und das Skript laufen lassen. Das erspart 'ne Menge Arbeit. Dann noch die Kisten über PXE booten und das Image kommt vom Server und alles passiert von selbst. face-wink

Viel Spaß beim coden.

Liebe Grüße

Erik
Member: Th0mKa
Th0mKa Oct 14, 2021 at 18:47:39 (UTC)
Goto Top
Zitat von @istike2:
Meine Frage ist folgendes:
Moin,

meine Frage ist da eher warum man bei einem festen Set von Aufgaben eine GUI benötigt? Das ist dsoch eher etwas für ein Skript direkt beim Deployment.

/Thomas
Member: erikro
erikro Oct 14, 2021 at 19:18:16 (UTC)
Goto Top
Zitat von @Th0mKa:
meine Frage ist da eher warum man bei einem festen Set von Aufgaben eine GUI benötigt?

Na erstens weil er ein junger Mann ist. Die kennen nichts anderes als Klicki-Bunti. Und zweitens, weil er in der Ausbildung ist und bei Klicki-Bunti ne Menge über objektorientierte Programmierung lernt. Und wenn man dann noch für User Skripte schreibt, braucht man das dann auch mal. face-wink Rede ihm jetzt bloß nicht die GUI aus. face-wink
Member: miniversum
Solution miniversum Oct 15, 2021 at 07:06:48 (UTC)
Goto Top
Hallo,

#1 Python würde mir die Möglichkeit geben mit PyQT eine halbwegs ansprechende GUI zu entwickeln.
#2 PS Core hätte aber beim "Ausrollen" Vorteile, weil Python nicht immer installiert werden müsste.
Wenn du die Python Skripte mit Py2exe konvertierst und die Einstellungen entsprechend machst Funktioniert das Ganze auch portabel. Da muss nichts installiert werden.
Wobei ich mich bei sowas frage ob da nicht auch ein "einfaches" textbasiertes Menü mit Auswahl reichen würde? Du weißt ja.. "richtige" Admins arbeiten nur mit Text,grüne Schrift auf schwarzem Grund. face-wink

Gruß
...
Mitglied: 148656
148656 Oct 15, 2021 at 07:59:29 (UTC)
Goto Top
Das ist ein klassischer Fall von "Kannste so machen…"
Ihr betreibt doch eine Windows-Domain? Und habt zentrale Verwaltungsserver? Weshalb nutzt ihr die nicht?

Generell ist es nicht verkehrt den Admin-Azubis, Grundlagen der Programmierung beizubringen. Damit sie Quellcode zumindest lesen und verstehen können.
Member: istike2
istike2 Oct 16, 2021 at 12:46:17 (UTC)
Goto Top
Vielen Dank für Eure Rückmeldungen und Ideen face-smile

LG

I.
Member: istike2
istike2 Oct 18, 2021 updated at 21:55:09 (UTC)
Goto Top
Hallo,

hier ist meine erste Powershell-Version, die - testweise Seriennummer + Bitlocker-Key ausliest und per Mail versendet. Es funktioniert soweit ganz gut, die Mail kommt mit den beiden Ergebnissen ans.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

##ich lese hier die Seriennummer aus##

$sn = (gwmi win32_bios).SerialNumber

##ich lese hier den Bitlocker Recovery-Key aus##

$BitlockerVolumers = Get-BitLockerVolume
$BitlockerVolumers |
ForEach-Object {
$MountPoint = $_.MountPoint
$RecoveryKey = [string]($_.KeyProtector).RecoveryPassword
if ($RecoveryKey.Length -gt 5) 
{

Write-Output ("Seriennummer: $sn") | Out-File C:\Users\XXXXXX\Desktop\sn.txt  
Add-Content C:\Users\XXXXXXX\Desktop\sn.txt "Recovery-Key:$recoverykey"  

## ich möchte hier die TXT per Mail versenden ##
Function sendmail($FROM,$TO,$SUBJECT,$BODY,[System.IO.FileInfo[]]$ATTACHMENTS = $null){
  $SMTPHOST = "XXXXXX.kasserver.com"  
  $SMTPPORT = 587
  $SMTPUSER = "report@XXXXXXX.de"  
  $SMTPPass = "XXXXXXX"  
  $SMTPClient = New-object System.Net.Mail.SmtpClient($SMTPHOST,$SMTPPORT)
  $SMTPClient.EnableSsl = $true
  $Mail = new-object System.Net.Mail.MailMessage
  $Mail.from = $FROM 
  $Mail.to.add($TO)
  $SMTPClient.Credentials = new-object System.Net.NetworkCredential($SMTPUSER,$SMTPPass)
  $Mail.Subject = $SUBJECT
  $Mail.Body = $BODY
  # Add Attachments
  if ($ATTACHMENTS){
      foreach ($att in $ATTACHMENTS){
        $Mail.Attachments.Add($att.FullName)
      }
  }
  $SMTPClient.Send($Mail)
  $smtpclient.Dispose()
  $mail.Dispose()
}

sendmail "report@XXXXXXX.de" "Zieladresse" "DEIN BETREFF" "REPORT" (gci 'C:\Users\XXXXXXX\Desktop\sn.txt')}  
}

Ich würde jetzt gerne diesen Powershell-Code in Python einbauen und am Ende alles mit PyInstaller in EXE umwandeln.

Meine Frage ist, wie ich diesen PS-Code aus dem Python-Code "aufrufe".
Meine erste Idee wäre es als Subprozess zu behandeln:

import subprocess

def run(self, cmd):
    completed = subprocess.run(["powershell", "-Command", cmd], capture_output=True)  
    return completed


Ich bräuchte jetzt eine Idee, wie ich diesen PS-Code als einer Subprozess aufrufe und mir "run" ausführe ... Der Code ist ja lang und hat mehrere Teilbereiche ...

Vielen Dank für eure Ideen.

LG

I.
Mitglied: 148656
148656 Oct 19, 2021 at 06:44:57 (UTC)
Goto Top
Muss man den Bitlocker-Recovery-Key, wirklich erst du unzählige Hände reichen?
Das Active Directory ist schon eine tolle Erfindung.
https://www.windowspro.de/roland-eich/bitlocker-recovery-keys-active-dir ...
Member: istike2
istike2 Oct 19, 2021 at 08:51:28 (UTC)
Goto Top
Hallo, ja, der Vorschlag ist gut.

Das Problem ist nur, dass ich keinen Zugriff auf das AD habe ...
Es war allerdings meine Aufgabe Bitlocker zu aktivieren bzw. die Keys zu verwalten.
Ich könnte den Zugriff beantragen, es ergibt aber kaum Sinn, weil ich nur bis Dezember hier im Betrieb bin.

Diesen Code zu entwickeln ist für mich eher Teil des Lernprozesses ...
Das Ziel ist es ja, dass ich mich in PS etwas einarbeite. Ich versuche beide Ziele miteinander zu verknüpfen.

LG

I.