Für tägliche Supportarbeiten werden meisten dieselben banalen Informationen vom Benutzer benötigt, wie Username, Gerätename, Netzwerkinformationen und Gruppenmitgliedschaften. Diese Infos können dem User beispielsweise mit einem Tool angezeigt werden. Geräte bei längeren Informationen wie IP-Adressen oder Seriennummern kann es da aber zu Fehlern kommen. Darum habe ich ein Script geschrieben, dass diese Support Informationen mit einem Klick an einen definierten Teams Kanal sendet.
Table of Contents
Funktion / Demo
Hier eine simple Veranschaulichung, was das Script macht und die dazugehörige Ausgabe in Teams:
Team Kanal vorbereiten
Um die Informationen in einem Teams Kanal empfangen zu können, musst du auf diesem zuerst einen eingehenden Webhook aktivieren.
Den Webhook richtest du über die drei Punkte im Kanal unter "Connectors" ein. In diesem Menü wählst du dann beim Punkt "Incoming Webhook" zweimal "Add" aus.
Ist der "Incoming Webhook" als Connector hinzugefügt, können wir ihn konfigurieren. Dazu gehen wir im Kanal erneut in die "Connectors". Dieses Mal sehen wir nicht mehr "Add", sondern "Configure" und können dem "Incoming Webhook" einen Namen und wenn gewünscht auch ein Anzeigebild verpassen. Das Anzeigebild wird später beim Erstellen von Unterhaltungen wie das eines Benutzers angezeigt.
Nach dem Klick auf "Create" erscheint die URL, welche wir später in unserem Skript benötigen.
Kopiere dir diese heraus.
Skript anpassen
Im Script musst du nur die URL des Webhooks ergänzen, dann ist schon alles bereit.
Skript / Funktion verteilen
Theoretisch könntest du das Skript nun einfach auf einem Share Ablegen und der User kann diese dann mit einem Rechtsklick und der Option "mit PowerShell ausführen" ausführen. Das ist aber natürlich alles andere als benutzerfreundlich.
Simples Taskbar Tool
Um es ganz simpel zu verteilen, habe ich dir ein minimales "Tasktray" Tool erstellt, über welches der Benutzer die Support Informationen an den entsprechenden Teams Kanal senden kann.
Das Tool zeigt zudem auch noch den PC-Namen und die genutzte IP-Adresse an:
Das Tool habe ich bereits als Intunewin erstellt (Du must also nur dieses herunterladen).
Die Installation Dateien findest du aber ebenfalls auf GitHub:
Das Intunewin kannst du anschliessend als Win32 App in deiner Intune Umgebung erfassen.
Dies unter: Apps > Windows apps
Hier lädst du die Intunewin-Datei hoch:
Anschliessend vergibst du der App einen Namen und eine aussagekräftige Beschreibung. Zudem musst du einen Herausgeber angeben.
Das Logo ist optional und wird angezeigt, wenn du die App im Unternehmensportal publizierst.
Name | Support Info |
Beschreibung | Ermöglich es dem User Informationen über sein Gerät an den definierten Support-Teams-Kanal zu senden. |
Hier musst du das Instalaltions- und Deinstallations-Kommando angeben. Dieses ist:
install command | %SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden -executionpolicy bypass -command .\install.ps1 |
uninstall command | %SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden -executionpolicy bypass -command .\uninstall.ps1 |
Install behavior | System |
Voraussetzungen gibt es für die App keine Speziellen, du musst sie aber abfüllen.
Für die Erkennungsregel habe ich dir die Datei "check.ps1" vorbereitet.
Abhängigkeiten beziehungsweise Supersedence gibt es hier nicht.
Du musst die App nur noch einer Gruppe zuweisen und das wars dann schon.
Falls bei dir das PowerShell fenster bei Benutzer offenbleiben sollte, liegt das am Startverhalten von PowerShell, dass in den neusten Windows Versionen auf "Windows Terminal" eingestellt ist. Das müsstest du dann einfach auf "Windows Console Host" umstellen.
Hier ist beschrieben, wie: Command Prompt and Windows Powershell for Windows 11 - Microsoft Support
Einbindung SelfX
Damien Van Robaeys hat mit dem Tool SelfX ein sehr cooles Programm auf die Beine gestellt, in dem einfach eigene Script und Fehlerbehebungen für Endbenutzer bereitgestellt werden können.
Möchtest du dieses Skript einbinden, kannst du es in den Programmordner kopieren und das XML (Issues_List.xml) mit folgenden Zeilen ergänzen:
<Action>
<Name>Send Device Information to Support</Name>
<Explanation>Send Device Information like Device name, Username, Network and Group memberships to Support</Explanation>
<script>SendToHelpdesk_Teams.ps1</script>
<Category>Device</Category>
<Alerte_MSG>Do you want to send your Device Information's for support purposes?
</Alerte_MSG>
</Action>
Code language: HTML, XML (xml)
Einbindung System Information and Self Service Tool
Jannik Reinhard stellt einem mit dem Tool System Information and Self Service Tool primär Informationen des Gerätes dar, bietet aber ähnlich wie SelfX auch die Möglichkeit, eigene Skripts einzubinden.
Auch hier kannst du das Skript einfach hinzufügen, indem du eine Datei (_actions.json, Zeile 11-14) ergänzt:
{
"actions": [
{
"actionName": "Clear recycle bin",
"script": "Invoke-ClearRecycleBin.ps1"
},
{
"actionName": "Change Password",
"script": "Invoke-ChangePassword.ps1"
},
{
"actionName": "Send Device Information to Support",
"script": "SendToHelpdesk_Teams.ps1"
}
]
}
Code language: JSON / JSON with Comments (json)
Hi Florian,
Great stuff, thank you 😀.
Is it possible to include when was the last time device was in Sync with Intune, Bitlocker encryption status and space left on C disk?
Thanks!
Yes, you can add additional queries.
The disk space would be simple with:
Get-PSDrive C
For the last sync i'd rather triger a new sync with:
$syncIme = New-Object -ComObject Shell.Application
$syncIme.open("intunemanagementextension://syncapp")
$syncIme.open("intunemanagementextension://synccompliance")
The BitLocker part is a bit mor difficult, cause you can't get the status easily without admin rights, bit this should do the trick:
$BLStatus = (New-Object -ComObject Shell.Application).NameSpace('C:').Self.ExtendedProperty('System.Volume.BitLockerProtection')
if($BLStatus -eq 0){$BLStatus = "Bitlocker status: Unencryptable"}
elseif($BLStatus -eq 1){$BLStatus = "Bitlocker status: Encrypted"}
elseif($BLStatus -eq 2){$BLStatus = "Bitlocker status: Not Encrypted"}
else{$BLStatus = "Bitlocker status: Unknown"}
$BLStatus
Hope this helps you 🙂