Zum Hauptinhalt springen

Programme auf einem Proxmox-Gast vom Host aus starten

Der QEMU-Gast-Agent Installer

Mit #Proxmox gibt es, ähnlich wie bei Hyper-V mit WinRm die Möglichkeit, vom Host aus direkt Befehle in virtuellen Maschinen auszuführen. Voraussetzung sind die VirtIO-Erweiterungen, die unter Windows erst installiert werden müssen, sowie der QEMU-Guest-Agent. Die VirtIO-Erweiterungen werden von RedHat gepflegt und können hier heruntergeladen ...

Continue reading
  20 Hits

Der „Key-Trick“: Hardware-KVM-Switches per Tastatur steuern

Das Ende der Schreibtisch-Gymnastik Jeder, der zwei PCs an einem Arbeitsplatz nutzt, kennt das Gerät: Der KVM-Switch (Keyboard, Video, Mouse). Meistens klebt er unter dem Schreibtisch oder versteckt sich hinter dem Monitor. Das Problem? Das manuelle Drücken der physischen Taste stört den Workflow. Was viele nicht wissen: Fast jeder moderne KVM-Swit...

Continue reading
  28 Hits

Entra-ID/Azure AD Benutzer in NTFS berechtigen

a transient cloud with a head in front of it, emanating from a folder-icon

Berechtigungen im lokalen Dateisystem setzen ist mit dem Windows-Explorer normalerweise kein Problem und relativ überschaubar, wenn man von der Komplexität des Windows Berechtigungs-Systems einmal absieht. Wenn man allerdings über ein Entra-ID gejointes Gerät verfügt, und man möchte ein Entra ID Konto berechtigen, funktioniert das - Stand Deze...

Continue reading
  221 Hits

Tastaturlayout in Windows Server Core umstellen

Im letzten Artikel Default Shell in Server Core ändern habe ich beschrieben, wie Sie Powershell zur Default-Shell in Servercore machen können. Sie können aber auch das Tastaturlayout anpassen, wenn Sie bei der Installation die falsche Sprachversion ausgewählt haben. Hierzu passen Sie den Schlüssel HKEY_CURRENT_USER\Keyboard Layout\Preload an. Unter dem Schlüssel Preload sind die konfigurierten Tastaturlayouts gespeichert, die Servercore unterstützt, und zwar in numerischer Reihenfolge, wobei das Layout mit der Nummer 1 Priorität hat uns als erstes geladen wird.

Um das Tastaturlayout für den angmeldeten Benutzer anzupassen, setzen Sie einfach den Sprachcode Ihrer Tastatur für den Wert mit dem Namen 1. Für deutsche Tastaturen ist das 00000407. Das können Sie einfach im Regedit machen, oder mit folgender Codezeile:

Set-ItemProperty -Path HKCU:\Keyboard Layout\Preload -Name 1 -Value 00000407

Die vollständige Auflistung aller Codes finden Sie unter Default Input Profiles in Windows auf der Microsoft Website.

 

  6221 Hits

Als Benutzer das Active Directory nach Druckern und Objekten durchsuchen

Wussten Sie, dass die Standardberechtigungen des AD jedem Benutzer den Zugriff auf alle Benutzer-, Gruppen- und Computerobjekte erlauben? Natürlich ist dieser Zugriff eingeschränkt - sensible Informationen sind weder einseh- noch änderbar. Nichtsdestotrotz kann diese Funktion sehr hilfreich sein, da es einem Benutzer so z.B. ermöglicht wird, nach e...

Continue reading
  5875 Hits

Geplante Tasks in Powershell mit lokaler Zeit anlegen

Wenn man in Powershell einen zeitgesteuerten geplanten Task anlegen will, erzeugt das Cmdlet New-ScheduledTaskTrigger standardmäßig einen Trigger, dessen Zeit in UTC (Universal Naming Convention oder Greenich Mean Time) angegeben ist. In der grafischen Oberfläche des Taskplaners wird das durch einen Haken "Zeitzonenübergreifende Synchronisation" an...

Continue reading
  333 Hits

Mit Powershell schneller Hashen

 Powershell unterstützt mit dem Cmdlet Get-Filehash von Haus aus die Möglichkeit, Hashes über Dateien zu erzeugen. Ein Hash ist dabei eine komplexe Prüfsumme, die die Eindeutigkeit einer Datei garantiert - die Prüfsumme kann die Datei also identifizieren. Ein kryptographischer Hash-Algorithmus wie SHA-1 oder SHA-2 (gesprochen Schah oder mit de...

Continue reading
  572 Hits

Mit Powershells Group-Object doppelte Dateien löschen

Zum Finden und Löschen von doppelten Dateien gibt es jede Menge Tools, aber es geht auch von der Kommandozeile mit einem Powershell-Einzeiler. Dafür ist ein Cmdlet nützlich, dass ich normalerweise nur selten einsetze, dass hier aber seine Mächtigkeit ausspielt: Group-Object. Mit Group-Object kann man Objekte in ein Array zusammenfassen (also gruppi...

Continue reading
  677 Hits

Mit Powershell Alternative NTFS-Datenströme lesen (und schreiben)

Alternative Datenströme sind eine erweiterte Funktion des NTFS-Dateisystems, die es erlaubt, beliebige Meta-Informationen über Dateien zusammen mit der Datei abzulegen. Windows verwendet z.B. einen Alternativen Datenstrom, um das MotW (Mark of the Web) zu speichern. Das MofW wird beim Download einer Datei automatisch gesetzt, damit Windows Sicherhe...

Continue reading
  1379 Hits

Geteilte und freigegebene Postfächer zum EMClient hinzufügen

EMClient ist ein Email-Client, der alle wesentlichen Funktionen von MS Outlook abdeckt, dabei aber deutlich flexibler konfigurierbar ist und ein zu MS Outlook sehr ähnliches Design hat, was die Migration von MS Outlook einfach macht. Im Gegensatz zu Outlook fügt EMClient geteilte Mailboxen allerdings nicht automatisch der Postfachansicht hinzu. Sta...

Continue reading
  2245 Hits

Aus einer Liste von Datumswerten jeweils x Sekunden überspringen

Zeitpfeil

Um aus einer Liste von Datumswerten (z.B. aus einer Logdatei) nur einen Wert pro  Zeiteinheit (also z.B. pro Sekunde) auszugeben, erstellt man sich zuerst einen Wert, der die Sprungweite speichert. Da Powershell Zeitwerte in 10.000.000stel Sekunden - den sogenannten Ticks - speichert, muss die Sprungweite mit den Ticks pro Zeiteinheit multipli...

Continue reading
  1106 Hits

Text für reguläre Ausdrücke vorbereiten - Spezialzeichen ersetzen

Regular Expressions

Reguläre Ausdrücke sind in allen Programmier-Sprachen ein mächtiges Werkzeug, um Texte zu analysieren und aufzubrechen. In Powershell steht einem hierfür unter anderem der Vergleichsoperator -match zur Verfügung. Reguläre Ausdrücke reichen dabei von sehr einfach bis sehr kompliziert. Das folgende Beispiel fällt z.B. in die erste Kategorie: 'C:...

Continue reading
  1266 Hits

Windows Freigaben auf einen neuen Pfad migrieren mit Powershell

Wenn Sie auf einem Dateiserver Ordner umziehen müssen, kann das Anpassen der Freigaben auf untergeordneten Ordnern sehr aufwändig werden, z.B. wenn es sich um eine große Menge von Home-Shares handelt. Einfacher als über die GUI geht es, wenn Sie die Registry-Schlüssel unter HKEY_LocalMachine\SYSTEM\CurrentControlSet\Services\LanmanServer\Shares\ anpassen. Alternativ können einfach die folgende Powershell-Funktion verwenden, die einen gegebenen Pfad in dem Registry-Schlüssel durch einen neuen ersetzt. Da es sich um eine reine Musterersetzung handelt, können Sie beliebige Teilpfade ersetzen lassen.

function Replace-SharePath
{
<#
    .SYNOPSIS
    Replace the Filesystem-Path of a Share

    .Description
    Replace-Sharepath can change the Filesystem-Path of shares. This can be helpful if you need to move
    Files to a new Drive or have to move files to a subfolder and you have multiple Shares to touch. The
    Script will change the given String into the new string, so all shares under the given Path will be
    affected.
             
    .EXAMPLE
    To move Files from C:\Shares to D:\NewSharesFolder:
    Replace-SharePath -Path c:\Shares -NewPath D:\NewSharesFolder
#>
param(
    [ValidateScript({ if ( ! ( Test-Path -path $_ -PathType Container )) {Throw "Bitte den Quellpfad prüfen!"}; $true })]
    [Parameter(mandatory=$true)]
    # The Path to Change.
    $Path,

    [ValidateScript({ if ( ! ( Test-Path -path $_ -PathType Container )) {Throw "Bitte den Quellpfad prüfen!"}; $true })]
    [Parameter(mandatory=$true)]
    # The New Path
    $Newpath
)

    $path = $Path.Replace('\','\\')
    $Newpath = $Newpath.Replace('\','\')
    $ShareList = Get-Item HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Shares\
    ForEach ( $Share in $ShareList.Property )
    {
        Get-ItemProperty -Path $ShareList.pspath -Name $share
        $newValue = ( Get-ItemProperty -Path $ShareList.pspath -Name $share ).$Share -replace "(^Path=)($path)","Path=$newpath"
        Set-ItemProperty -Path $ShareList.pspath -Name $Share -Value $Newvalue -PassThru
    }
}

Continue reading
  5949 Hits

TPM für Hyper-V VM mit Powershell aktivieren

Virtuelle Maschinen mit Hyper-V anzulegen ist in Powershell mit den beiden Cmdlets New-VM und Set-VM relativ einfach, da die Cmdlets alle wesentlichen Funktionen einer virtuellen Maschine mit den Standard-Parametern abbilden. Das Aktivieren des virtuellen TPMs gestaltet sich aber überraschend schwierig. Während man im Hyper-V Manager nur ein H...

Continue reading
  5059 Hits

Fehler bei JSON-Import in Python: json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Python kann mit dem json-Modul Strings im JSON-Format direkt in einen Dictionary konvertieren. Zum Import aus einer JSON-Datei muss man die Datei zuerst mit open einlesen.  import jsonwith open('c:\user.json') as user: message = json.load(user) Python erwartet hier, wie im JSON-Standard definiert, eine in UTF8 codierte Datei ohne BOM...

Continue reading
  3059 Hits

Den Klingel-Sound in der WSL Bash deaktivieren

Hat man das Windows Subsystem für Linux installiert und arbeitet in der Bash mit der Kommandozeilenergänzung per Tabulator, wird man ein ziemlich nerviges Sound-Feedback in Form eines Pings kaum überhören können. Um den Ping abzuschalten, muß man die Datei /etc/inputrc editieren und die Konfigurations-Schlüssel bell-style auf none setzen - nor...

Continue reading
Tags:
  1953 Hits

E-mails in Joomla werden von Google als nicht zulässige Tags erkannt

Wenn die Google Search Console auf Ihrer Joomla-Website ungültige AMP-Seiten erkennt, könnte das an der Mail-Cloaking Funktion von Joomla liegen, die seit Version 4.10 standardmäßig aktiviert ist. Mail-Cloaking verschleiert E-Mail-Adressen automatisch mit JavaScript-Code, indem die Email-Adresse verschlüsselt in ein Tag <joomla-hidden-mail> e...

Continue reading
  1469 Hits

Send-Mailmessage erzeugt keine verwendbaren Fehler - und wie man damit umgeht

Send-Mailmessage ist ein sehr nützliches Cmdlet, um Emails direkt aus Powershell an einen Mailserver zu senden. Er steht seit Powershell 2.0 zur Verfügung und vermeidet so, dass man sich direkt mit dem [System.net.mail]-Typ herumschlagen muß. Allerdings zeigt das Cmdlet ein sehr merkwürdiges Fehlerverhalten.

Wenn man versucht, Verbindungsfehler abzufangen, ist ein erster vernünftiger Ansatz, einfach auf den Parameter -Errorvariable zurückzugreifen:

Send-Mailmessage -SmtpServer mail.meineFirma.de -Subject 'Warnung' -Body 'Hier kommt die Maus' -From 'Elefant@netz-weise.xyz' -to 'Maulwurf@netz-weise.xyz' -ErrorVariable Fehlermeldung
If ( $Fehlermeldung ) { $Fehlermeldung.Exception.Message }

Tritt ein Fehler auf, wird dieser direkt in der Variablen $Fehlermeldung gespeichert. Achtung, bei der Angabe der Fehlervariablen wird kein $-Zeichen angegeben!

Continue reading
Tags:
  6288 Hits

Mails (nicht nur in Outlook) automatisch sortieren mit der Plus-Adressierung in Exchange Online

Seit Mai 2022 hat Exchange eine neue Funktion erhalten, die sich wunderbar verwenden lässt, um eingehende Newsletter-mails und ähnliches automatisch zu sortieren. Diese Funktion nennt sich Plus-Adressierung, weil man in die eigene Email-Adresse einfach ein + gefolgt von einem selbstgewählten Text erweitern kann, die dann ...

Continue reading
  4407 Hits

SQL-Server Agent-Jobs vom Entwickler bearbeiten lassen

Mit dem SQL-Server Agent und der Datenbankrolle ""SQLAgentUserRole"" in der msdb-Datenbank kann man einem SQL-Login Zugriff auf einen Job geben. Voraussetzung ist, dass der Login dem JOB auch als Owner zugewiesen wird. Soll der User allerdings auch die Zeitpläne für geplante Aufträge verwalten, stellt man fest, dass dies nicht unbedingt klappt. Ursache dafür ist die schlecht Dokumentierte Tatsache, dass der Login auch Besitzer der Zeitpläne sein muß. Hat er diese nicht angelegt, kann er dementsprechend keine Änderungen durchführen. Stattdessen bekommt er eine Meldung "The specified schedule @schedule_id() does not exist". Den Besitzer des Zeitplans kann man nur über die Tabelle msdb.dbo.sysschedules in der Spalte owner_sid einsehen. Das folgende Script zeigt alle Job an, bei denen Besitzer für Zeitplan und Job nicht identisch sind:

SELECT (SELECT name FROM sys.server_principals WHERE [SID] = ss.owner_sid) AS ScheduleOwner,
(SELECT name FROM sys.server_principals WHERE [SID] = sj.owner_sid) AS JobOwner,
ss.name AS ScheduleName,
ss.owner_sid AS ScheduleOwnerSid,
sj.name AS JobName,
sj.owner_sid AS JobOwnerSID
FROM msdb.dbo.sysschedules AS ss
INNER JOIN msdb.dbo.sysjobschedules AS sjs
ON sjs.schedule_id = ss.schedule_id
INNER JOIN msdb.dbo.sysjobs AS sj
ON sjs.job_id = sj.job_id
WHERE ss.owner_sid <> sj.owner_sid

Und mit folgendem Script beheben Sie das Problem, indem Sie den Besitzer aller zeitpläne auf den gleichen Besitzer setzen wie den zugehörigen Job. Um nicht alle Jobs ungesehen zu überschreiben, geben Sie in der 1. Zeile einen Login-Namen ein:

DECLARE @JobOwner NVARCHAR(255) = 'Benutzer'
DECLARE @JobOwnerSid VARBINARY(85)
SELECT @JobOwnerSid = [sid] FROM master.sys.server_principals WHERE name = @JobOwner
UPDATE SS
SET ss.owner_sid = sj.owner_sid
FROM msdb.dbo.sysschedules AS ss
INNER JOIN msdb.dbo.sysjobschedules AS sjs
ON sjs.schedule_id = ss.schedule_id
INNER JOIN msdb.dbo.sysjobs AS sj
ON sjs.job_id = sj.job_id
WHERE (ss.owner_sid <> sj.owner_sid)
AND (sj.owner_sid = @JobOwnerSid)

 

Tags:
  3683 Hits