Categories
IIS Scripts Server Windows

IIS SMTP – Zustellung von “Badmails” erneut versuchen (Script)

Bekommt der IIS SMTP-Dienst seine Mails nicht los, verschiebt er sie in den sogenannten “Badmail”-Ordner und unternimmt keine Zustellversuche mehr.

Damit eine erneute Zustellung versucht wird, müssen folgende Schritte erledigt werden:

  1. Stoppen des SMTP-Dienstes
  2. Aufrufen des “Badmail”-Ordners
  3. Löschen der *.bdr- und *.bdp-Dateien
  4. Entfernen der .BAD-Dateiendung von den übrigen Dateien
  5. Verschieben der Dateien in den “Pickup”-Ordner
  6. Starten des SMTP-Dienstes

Man kann es allerdings auch mit einem PowerShell-Script erledigen. Möglicherweise muss man den Pfad von $mailRootFolder noch anpassen:

$mailRootFolder = "C:\inetpub\mailroot"

Stop-Service "SMTPSVC"

$badMails = Get-ChildItem -Path "$($mailRootFolder)/Badmail"

foreach ($badMail in $badMails) {
	if ($badMail.Name.ToLower().EndsWith(".bdr") -or $badMail.Name.ToLower().EndsWith(".bdp")){
		Remove-Item -Path $badMail.FullName -Confirm:$false
	}
	else {
		Move-Item -Path $badMail.FullName -Destination "$($mailRootFolder)/Pickup"
		Rename-Item -Path "$($mailRootFolder)/Pickup/$($badMail.Name)" -NewName $badMail.Name.Split('.')[0]
	}
}

Start-Service "SMTPSVC"
Categories
General DNS Server Tipps & Tricks Windows

Block .zip and .mov TLDs on Windows DNS

(Works obviously for every other TLD as well)

As the new TLDs from Google already intend to be misused for shady phishing attacks and on the other side we can’t imagine any non-shady usage for those domains, we’ve decided to block those entirely.

We show you, how we’ve done that:

On the Windows DNS-Server (mostly the Domain Controller) we create a new Forward Lookup Zone:

We select “Primary zone”:

As “Zone name” we set the TLD to block, for example “zip” – Make sure to not add any points:

Next settings are fine already:

And this setting is fine by default, too:

By clicking on “Finish”, we create the zone:

Now, it should look somehow like this in Forward Lookup Zones:

In each zone we now create an A- and an AAAA-Record with * as host und localhost as target:

… so it should look like this:

As soon as we created the records, every machine using this server as DNS-source should resolve names with those TLDs locally, so it’s only connecting to itself.

You could even go further to create a landing page on a webserver for those Domains – but this requires more configuration as you’d get a certificate warning when accessing with https://. So you would have to create a Wildcard-Cert on an internal CA as well.

Categories
Hyper-V Server Windows

Formatieren eines mittels SAN präsentierten Flash-Laufwerks in Windows dauert ewig

Vorfall

Es wurde versucht, ein Laufwerk, welches per FC von einem All Flash-System präsentiert wurde, innerhalb von Windows zu formatieren. Dieser Vorgang dauerte horrend lange, wir stießen die Formatierung nachmittags an und konnten das Laufwerk erst am nächsten Vormittag weiterverwenden und in unseren Cluster importieren.

Eigentlich ein sehr unerwartetes Verhalten, erwartet man doch durch die Implementierung solcher Systeme vor allem einen Geschwindigkeitszuwachs.

Erklärung

Seit Windows Server 2012 ist die TRIM-Funktion in Windows standardmäßig aktiviert. Diese Funktion markiert gelöschte Sektoren auf einem Flashspeicher. Bei einer Formatierung eines logischen Volumes sorgt dies wohl für eine regelrechte Flutung des Mediums durch diese Unmap- und Trim-Kommandos.

Diese Funktion sollte also in dem Moment, wo Volumes von All Flash-Systemen dem Windows Server präsentiert werden, abgeschaltet werden.

Behebung

Man schaltet die Funktion ab, in dem über das Konsolenfenster (Win + R -> cmd) folgenden Befehl absetzt:

fsutil behaviour set DisableDeleteNotify 1
Categories
Exchange Office Tipps & Tricks

Outlook-Suche im Exchange-Postfach für ältere Elemente schlägt fehl

Hat man den Cache-Modus in Outlook für ein Exchange-Postfach auf einen bestimmten Zeitraum begrenzt, muss die Suche für frühere Ergebnisse auf dem Server fortgesetzt werden. Dazu wird man meist in der untersten Zeile der Suchergebnisse dann aufgefordert. Fälschlicherweise kann es dann hier zu der Meldung kommen, dass der Server offline oder nicht erreichbar ist.

Server unavailable. 12 months of results shown.

Fehlermeldung auf Englisch

Ob der Server tatsächlich ein Problem hat, können Sie bei Exchange-Postfächern sehr einfach über die “Outlook Web App” prüfen. Wenn hier die Suche erfolgt, hat der Server normalerweise keine Probleme. Kommt es auch hier zu Fehlern, genügt es in den meisten Fällen, den Datenbank-Index neu aufzubauen. Das wollen wir aber in dem Fall nicht behandeln, wir gehen also davon aus, dass die Suche in OWA funktioniert.

Die Lösung, um die augenscheinliche Falschmeldung in Outlook zu beheben, ist mehr als seltsam. Bitte befolgen Sie folgende Schritte:

  • Klicken Sie per Rechtsklick links in der Ordnerübersicht auf Ihre Email-Adresse (also in der obersten Ebene)
  • Klicken Sie auf “Datendateieigenschaften….”
  • Klicken Sie auf “Ordnergröße…”
  • Wechseln Sie auf den Reiter “Serverdaten”. Hier müsste der Aufbau ein paar Sekunden benötigen.
  • Das war’s, sie können die Fenster wieder in umgekehrter Reihenfolge schließen.

Versuchen Sie im Anschluss die Suche erneut. Nun sollte die Schaltfläche wieder verfügbar sein, die es Ihnen ermöglicht, ältere Ergebnisse auf dem Server zu suchen.

Hat es Ihnen geholfen? Wir freuen uns auf Ihr Feedback!

Exchange-Postfächer in jeder Edition und Größe können Sie übrigens bei uns ganz unkompliziert buchen, schauen Sie mal vorbei unter: https://cloud4you.biz/cloud/kommunikation/hosted-exchange

Categories
CRM Office Windows

Diese Website funktioniert in Microsoft Edge besser – Dynamics 365 for Outlook

Problembeschreibung

Unter bestimmten Umständen ist möglich, dass das Outlook-Addin “Dynamics 365 for Outlook” nach Installation und Einrichtung immer wieder einmal (oder spätestens bei Dynamics-Aktionen, wie dem Nachverfolgen von Mails) zunächst einen Internet Explorer-Tab mit dem Titel “Diese Website funktioniert in Microsoft Edge besser” öffnet und anschließend den eigentlich innerhalb des Addins sichtbaren Inhalt in einem Edge-Browser öffnet.

Lösung

Vorausgesetzt, dass der Internet Explorer eh nicht mehr benötigt wird, können wir diesen einfach deinstallieren und das Problem somit umgehen. Wechseln Sie hierzu mit einem Administratorkonto in der Einstellungs-App zum Punkt “Apps & Features” (einfach in der Suche eingeben) und klicken dann auf “Optionale Features”. Hier sollte der Internet Explorer 11 gelistet sein, den Sie markieren und dann mit Klick auf “Deinstallieren” vom PC verbannen. Ein anschließender Neustart ist notwendig.

Categories
Clients Tipps & Tricks Windows

Klang verändert sich am Computer beim Öffnen von Windows 10 Apps

Wenn sich beim Öffnen mancher Windows 10-Apps und Anwendungen der Klang Ihres Systems verändert (in meinem Fall die Musik aus Spotify, die über ein Jabra-Headset abgespielt wird), so habe ich hier evtl. eine Lösung:

Das Jabra-Headset verändert die Soundqualität massiv beim Aufbau von Telefongesprächen. Während selbigen wirkt der Sound eher blechern und ohne große Höhen und Tiefen. Dieser Effekt trat bei mir auch beim Öffnen mancher Apps auf und ein kleines Mikrofon-Symbol in der Tray-Leiste führte mich zur Ursache des Problems: Auf dem Computer läuft unter anderem auch das Programm “Nvidia Geforce Experience”. Dieses interpretiert wiederum so manches Programm als “streambares Spiel”, vermutlich durch die GPU-Hardwarebeschleunigung – in meinem Fall u.a. PowerShell ISE, Windows 10 Kalenderapp, Kontakteapp uvm. Dadurch aktivierte die Geforce Experience das Mikrofon, um dem Streamenden die Aufnahme des selbst gesprochenen zu ermöglichen – Auch ohne Stream, was ich davon halte, gehört nicht hier her. Jabra erkennt das wiederum als Telefongespräch und schaltet in den Blechmodus…

Um dem entgegenzuwirken, können Sie die Einstellungen innerhalb der GeForce Experience aufrufen und unter “Allgemein” den Schieberegler für “Spielinternes Overlay” deaktivieren.

Ich habe leider keine Ahnung über die Tragweite des Problems, sprich ob andere Hersteller nebst Jabra so verfahren und ob andere – das Mikro verwendende Programme – ebenfalls diese Reaktion auslösen.

Categories
Exchange

Migration der X500- / Legacy-Adressen

Viele Personen kennen diese Adressen gar nicht mehr, dabei basieren Termine und auch die gute alte Autovervollständigen-Funktion bei Eingabe einer Adresse in An:/Cc:/Bcc: noch immer auf diesen Adressen. In Folge dessen kommt es nach einer Migration oft zu Problemen bspw. beim reorganisieren von Terminen, so dass Teilnehmer nicht mehr benachrichtigt werden. Um dem entgegenzuwirken, kann man diese Adressen migrieren. Wie das geht, zeigen wir hier.

Export vom alten Domain Controller

Zunächst erstellen wir in der alten Umgebung mit Hilfe von PowerShell einen CSV-Export, der die Legacy-Adressen enthält.

Get-ADUser -SearchBase "OU=MyOffice,DC=domain,DC=int" -Filter * -Properties legacyExchangeDN  | Export-CSV C:\x500adresses.csv -NoTypeInformation

Import auf dem Ziel-Exchangeserver

Die CSV-Datei muss nun möglicherweise zu einem Server/PC kopiert werden, der auf die Exchange-Shell Zugriff hat. Dort angekommen importieren wir die Datei wieder und führen dann folgendes aus:

$Asdf = Import-CSV "C:\x500adresses.csv"
foreach ($User in $Asdf){ if ($User.legacyExchangeDN){ Get-Mailbox -Identity $User.UserPrincipalName | Set-Mailbox -EmailAddresses @{add="X500:$($User.legacyExchangeDN)"} } }

Ob die Migration erfolgreich war, kann über folgenden Befehl geprüft werden:

Get-Mailbox -ResultSize Unlimited |Select-Object DisplayName,ServerName,PrimarySmtpAddress, @{Name="EmailAddresses";Expression={$_.EmailAddresses | ForEach-Object {$_}}}
Categories
Scripts Windows Zabbix

Zabbix Template mit Userparameter (PS-Script) bauen

Generelle Ansprüche an das Template

  • PowerShell-Script erfasst auf Host-Seite die nötigen Daten
  • Ansteuerung über Zabbix-Server mit Parametern (also kein Zabbix Trapper)
  • Verwendung aktueller Best-Practices – sprich am Besten ein “Raw Item” aus dessen Inhalt die anderen Items berechnet werden, um den Datentransfer und die Kommunikation zw. Host und Zabbix-Server so klein wie nur irgendwie möglich zu halten.

Unser Szenario

Im konkreten Beispiel wird ein Script den Inhalt eines Ordners überwachen und uns alarmieren, wenn Inhalte im Ordner älter sind, als eine definierte Zeitspanne. Zusätzlich sollen gewisse Dateien innerhalb des Ordners ignoriert werden.

Schlussfolgerungen

Pfad, Zeitspanne und zu ignorierende Dateien werden als Macros ins Template übernommen und können somit auf Hostebene angepasst werden. Diese Macros werden dann in einem einzigen Item an den Host übergeben, der auf seiner Seite ein Script ausführt und die ganzen benötigten Informationen “raw” zurückgibt. Wir erstellen dann weitere “berechnete Items”, die den Inhalt des “Raw Items” auswerten und damit arbeiten.

Schritt 1: Das Script

Im Installationsverzeichnis von Zabbix (bei uns C:\ZABBIX) legen wir einen Ordner “userparameter” an. Hier wird das Script “Get-OldFilesInFolder.ps1” angelegt:

param(
[string]$sPath = "",
[string]$sFoldersToIgnore = "")

[bool]$bIgnoreSth = $false;

if ($sFoldersToIgnore.Length -gt 0){
    [String[]]$saFoldersToIgnore = $sFoldersToIgnore.Split(",");

    foreach ($sFolder in $saFoldersToIgnore){
        $sFolder = $sFolder.Trim();
    }
    $bIgnoreSth = $true;
}

[int]$iMaxAge = 0
[string]$sOldestFileName = "n/a";

$oaSubFiles = Get-ChildItem -Path $sPath

foreach ($oFile in $oaSubFiles){

    if ($saFoldersToIgnore -match $oFile.Name){
        # Do nothing
    } else {
        
        [TimeSpan]$tsAge = New-TimeSpan -Start $oFile.CreationTime -End (Get-Date)

        if ($tsAge.TotalMinutes -gt $iMaxAge){

            $iMaxAge = $tsAge.TotalMinutes;
            $sOldestFileName = $oFile.FullName.Replace("\", "\\");
        }
    }
}

Write-Host "{""MaxAge"":""$($iMaxAge)"",""FileName"":""$($sOldestFileName)""}";

Entscheidend ist hier unsere letzte Zeile. Wir geben ein (zugegebenermaßen recht einfaches) Json-Objekt zurück. Unser “Raw Item” wird somit nachher mit Json befüllt sein – der wohl sinnvollsten Möglichkeit in Zabbix mit multiplen Daten zu arbeiten.

Der zweite wichtige Punkt ist ganz oben im Script. Im “param()”-Block geben wir die Argumente an, die wir auf dem Zabbix-Host später übergeben müssen.

Schritt 2: Anpassung der zabbix_agentd.conf

Die wichtigste Zeile, die wir hinzufügen müssen, ist folgende:

UserParameter=foldermonitoring.getstatus[*],powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\ZABBIX\userparameter\Get-OldFilesInFolder.ps1" "$1" "$2"
  • Mit [*] geben wir an, dass das Item Parameter unterstützt.
  • Mit dem grün geschriebenen geben wir den Pfad zum Script an
  • Und die gelben Elemente sind die übergebenen Parameter, die auf keinen Fall weniger sein sollten, wie wir beim Item nachher übergeben.

Die zweite Zeile die angepasst werden muss, ist leider folgende:

UnsafeUserParameters=1

Da wir hier später einen Ordnerpfad übergeben, muss diese Option angepasst werden, da sonst die “Backslashes” nicht akzeptiert werden.

Schritt 3: Erstellung des Templates

Um mit der etwas eigenwilligen Benennung von Templates seitens Zabbix compliant zu sein, habe ich das Template “Template Module Windows folder content by Zabbix agent” genannt und in die Gruppe “Templates/Modules” abgelegt. Mehr gehe ich auf das Design des Templates aber gar nicht ein – viel wichtiger sind andere Dinge:

Macros:

Hier erstellen wir nun die drei besagten Macros:

MacroInhaltBeschreibung
{$FOLDERMONITORING.IGNORE}Example,TemplateComma-separated list of ignored Files/Folders
{$FOLDERMONITORING.PATH}C:\TEMPPath to folder getting monitored
{$FOLDERMONITORING.THRESHOLD}30Threshold in seconds

Ist denke ich recht verständlich. Durch die einheitliche Benennung werden Sie später beim Host leichter zu finden sein.

Das Zabbix Raw Item

Nun kommen wir zur Erstellung des “Raw Items” und somit zum Script-Trigger:

  • Name: Whatever floats your Boat
  • Type: Zabbix agent
  • Key: foldermonitoring.getstatus[“{$FOLDERMONITORING.PATH}”,”{$FOLDERMONITORING.IGNORE}”]
    Hier referenzieren wir die Macros. Auch andere Parameter können aber selbstverständlich angegeben werden.
  • Type of information: Text
  • Update interval: 1m (Zabbix Template Guideline)
  • History: 7d (Zabbix Template Guideline)
  • Applications: Zabbix raw items (Zabbix Template Guideline)
  • Description: Hier kann man beschreiben, was Hostseitig in der Config angepasst werden muss, damit das Item funktioniert
  • Enabled: klar.

Damit ist das “Raw Item” schon fertig. Sollten Sie das Template nun an einen Host anbinden, auf dem das Script liegt und die Config entsprechend angepasst wurde, sollten Sie unter “Latest Data” bereits Ihr Json-Objekt sehen.

Die berechneten Items (Dependent item)

Hier werden nun zwei Items erstellt – Bietet sich bei diesem Json-Objekt an:

Dependent Item #1 (Numeric)
  • Name: Whatever floats your boat
  • Type: Dependent item
  • Key: foldermonitoring.age
  • Master item: Auswahl des Raw-Items
  • Type of information: Numeric (unsigned)
  • Units: s (spezielle Unit für Zeitspannen)
  • History: 7d (Zabbix Template Guideline)
  • Trends: Do not keep trends
  • Show value: As is
  • Applications: File monitoring
  • Description: ¯\_(ツ)_/¯
  • Enabled: ja.

Das war jedoch noch nicht alles, wir wechseln stattdessen auf den “Preprocessing”-Reiter, um dem Raw-Item auch den richtigen Wert zu entziehen:

  1. Add -> JSONPath -> $[“MaxAge”]
    Das ist die Json-Property, wie wir Sie im Script erstellten.
  2. Add -> Custom multiplier -> 60
    Hierdurch machen wir aus den Minuten Sekunden.
Dependent ITEM #2 (Text only)
  • Name: Whatever floats your boat
  • Type: Dependent item
  • Key: foldermonitoring.name
  • Master item: Auswahl des Raw-Items
  • Type of information: Text
  • History: 7d (Zabbix Template Guideline)
  • Applications: File monitoring
  • Description: ¯\_(ツ)_/¯
  • Enabled: ja.

Auch hier dann wieder auf den “Preprocessing”-Reiter wechseln und folgendes konfigurieren:

  1. Add -> JSONPath -> $[“FileName”]
    Das ist die Json-Property, wie wir Sie im Script erstellten.

Schritt 4: Funktion prüfen

Falls nicht schon nach Erstellung des “Raw Items” passiert, können Sie nun das Script auf einem Host ablegen, die Config des Agents entsprechend anpassen und in Zabbix dem Host das Template zuordnen. Wenig später (falls die Default-Werte eingehalten wurden, eine Minute später) sollten dann die Werte abgerufen werden und unter “Latest Data” einsehbar sein. Die Macros müssen natürlich angepasst werden.

Schritt 5: Trigger erstellen

Nun können wir wieder auf das Template wechseln, um noch einen Trigger zu erstellen. Schließlich wollen wir ja melden, falls eine Datei tatsächlich älter ist als der im Macro hinterlegte Wert.

Auch hier werden wir wieder Best Practices anwenden – Somit kommen keine {ITEM.LASTVALUEX}-Attribute mehr in den Triggernamen, da diese seit Zabbix 4 (nicht komplett sicher) nicht mehr aktualisiert werden. Stattdessen kommen solche Infos in das Feld “Operational Data”. Gesagt, getan:

  • Name: File in ‘{$FOLDERMONITORING.PATH}’ older than threshold ({$FOLDERMONITORING.THRESHOLD}m)
  • Operational Data: Age: {ITEM.LASTVALUE1}
    Immer klein halten, da es in Dashboards zusätzlich zum Triggernamen in der Zeile angezeigt wird
  • Serverity: Frei wählbar
  • Expression:
    {Template Module Windows folder content by Zabbix agent:foldermonitoring.age.last()}>{$FOLDERMONITORING.THRESHOLD} and {Template Module Windows folder content by Zabbix agent:foldermonitoring.name.strlen()}>0
    Wir prüfen den Namen hier nur, um darauf zugreifen zu können
  • OK event generation: Expression
  • PROBLEM event generation mode: Single
  • OK event closes: All problems
  • Allow manual close: Nein.
  • URL: –
  • Description: Path of File: {ITEM.LASTVALUE2}
    Hier greifen wir nun den Namen ab um ihn anzuzeigen.
  • Enabled: Ja.

Abschluss

Das war es nun – wir haben unser Template erstellt. Was die Komplexität betrifft, war das natürlich gar nichts. Jedoch haben wir hierdurch einen guten Einblick in alle nennenswerten Mechaniken bekommen. Funktionstechnisch kratzen wir hier sicher nur an der Oberfläche.

Categories
Zabbix

Zabbix Agent-Kommunikation verschlüsseln

PSK-Key generieren

Auf einem beliebigen Unix-OS folgenden Befehl ausführen:

openssl rand -hex 48

… um einen hexadezimalen PSK-Schlüssel mit einer Länge von 48 Zeichen zu erstellen. Hexadezimal muss er sein, das setzt ZABBIX voraus. Ob es bei der Zeichenlänge Limitierungen gibt, ist mir aktuell nicht bekannt. Diesen Key nun in die Zwischenablage kopieren.

Einspielen im ZABBIX-Server

In der Hostkonfiguration kann nun unter dem Reiter “Encryption” folgende Einstellung gesetzt werden:

Connections to host:PSK
Connections from host:PSK
PSK-Identity[z.B. der Hostname des Hosts]
PSK[Key aus Zwischenablage]

Mit dem Speichern der Einstellungen wird die Verbindung zum Host unterbrochen, da der ZABBIX-Server nun eine verschlüsselte Verbindung voraussetzt.

Einspielen im Host

Auf dem jeweiligen Host muss nun die Config-Datei angepasst werden. Zuvor legen wir (am besten im Agent-Verzeichnis) ein Textfile ab, das den PSK-Key enthält. Diese nennen wir beispielsweise “psk.key”. Anschließend bearbeiten wir in der Agentconfig folgende Parameter:

# Pfad zur Key-Datei
TLSPSKFile=[Pfad zur Key-Datei]
# Wert für PSK-Identity
TLSPSKIdentity=[z. B. der Hostname]
# Akzeptierte Arten von eingehenden Verbindungen
TLSAccept=psk
# Art der ausgehenden Verbindung
TLSConnect=psk

Nachdem die Parameter entsprechend angepasst wurden, kann der Agent neugestartet werden. Sofern PSK-Identity und PSK-Key auf Server und Host übereinstimmen, sollte nun die Verbindung wieder erfolgen – verschlüsselt.

Categories
Tipps & Tricks

Chrome Omnibox mit eigenen Suchen ausreizen

Vielleicht haben Sie schon festgestellt, dass bei der Eingabe von einer Adresse in die Adressleiste (=Omnibox) von Chrome – gefolgt von einem Leerzeichen – sich die Leiste wandelt.

Aus:

amazon.de|

… wird so beispielsweise:

amazon.de durchsuchen | 

… und Sie können direkt Ihren Suchbegriff eingeben, den Sie sonst erst auf der Zielseite in eine Maske eingeben müssten. Das geht aber nicht nur mit ein paar vordefinierten Seiten, sondern wir können auch unsere eigenen Seiten konfigurieren. Einzige Voraussetzung ist hierbei, dass der Suchbegriff aus der URL auszulesen ist.

Gehen wir in unserem Beispiel mal von FontAwesome aus. Suche ich hier nach einem Icon, sieht die URL nach ausgeführter Suche folgendermaßen aus:

https://fontawesome.com/icons?d=gallery&q=pizza-slice

Ich habe nach “pizza-slice” gesucht, also ist das blau eingefärbte mein Suchbegriff.

Nun gehen wir in die Chrome-Einstellungen und klicken dort auf den Menüpunkt “Suchmaschinen verwalten”. Um die Einstellung schneller zu finden, können Sie die Tastenkombination Strg+F verwenden.

Neben der Überschrift “Andere Suchmaschinen” können Sie auf den Knopf “Hinzufügen” drücken. Füllen Sie dann die Felder folgendermaßen aus:

  • Suchmaschine:
    Hier tragen Sie schlicht den Namen ein, in unserem Beispiel also “FontAwesome”.
  • Suchkürzel:
    Hier tragen Sie die Zeichenfolge ein, auf die die Omnibox reagieren soll. Ich trage hier “fa” ein, muss also in die Adressleiste “fa” gefolgt von einem Leerzeichen nachher eingeben, um die Suche verwenden zu können.
  • URL mit %s statt der Suchanfrage:
    Hier tragen wir nun die vorher festgestellte URL ein und ersetzen die gesuchte Zeichenfolge wie angefordert. Im Beispiel lautet also der einzugebende Text
    https://fontawesome.com/icons?d=gallery&q=%s

Drücken Sie abschließend auf “Hinzufügen” um die Erstellung abzuschließen. Gewöhnt man sich erstmal daran, ist es eine wahnsinnige Zeitersparnis. Ich wünsche viel Spaß beim Testen!

Hier noch ein paar Praxis-Beispiele:

SuchmaschineSuchkürzelURL
FontAwesomefahttps://fontawesome.com/icons?d=gallery&q=%s
MX Toolbox: A-Recordahttps://mxtoolbox.com/SuperTool.aspx?action=a%3a%s&run=toolpage
MX Toolbox: MX-Recordmxhttps://mxtoolbox.com/SuperTool.aspx?action=mx%3a%s&run=toolpage
Beispiele für nützliche Suchen im IT-Alltag