MSSQL : Backup erstellen mit Powershell

Ich hatte die Anforderung das Backups eines MSSQL Servers erstellt werden müssen. Das vorhandene Powershell Script war "suboptimal". Aus diesem Grund habe ich mir mal 2 Stunden Zeit genommen und habe selbst eins erstellt.

Getestet hab ich es mit MSSQL 2017 / 2019 sollte aber grundsätzlich auf jedem MSSQL Server laufen auf dem SQLPS zur Verfügung steht.

Hier gehts zum Skript : https://github.com/Mokkujin/powershell/tree/main/server/mssql

Exchange Powershell: Prüfen der Exchange Schema Version

Problem:
Bei der Installation eines kumulativen Updates der Exchange Server ist meistens nicht ganz klar, ob ein Schema Update nötig ist oder nicht. Microsoft gibt meistens die nötige Schema Version an.

Lösung:
Um zu prüfen, ob ich die richtige Version bereits verwende, habe ich mir ein PowerShell-Skript geschrieben, das die Exchange Schema Version ausgibt:

# Exchange Schema Version

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn

$sc = (Get-ADRootDSE).SchemaNamingContext
$ob = "CN=ms-Exch-Schema-Version-Pt," + $sc
$ru = "RangeUpper: $((Get-ADObject $ob -pr rangeUpper).rangeUpper)"

$dc = (Get-ADRootDSE).DefaultNamingContext
$ob = "CN=Microsoft Exchange System Objects," + $dc
$ovd = "ObjectVersion (Default): $((Get-ADObject $ob -pr objectVersion).objectVersion)"

$cc = (Get-ADRootDSE).ConfigurationNamingContext
$fl = "(objectClass=msExchOrganizationContainer)"
$ovc = "ObjectVersion (Configuration): $((Get-ADObject -LDAPFilter $fl -SearchBase $cc -pr objectVersion).objectVersion)"

Write-Output $ru $ovd $ovc


Eine schöne Übersicht der jeweiligen Schema Version findet ihr bei Ali:
Ali Tajran: Exchange schema versions (up to date list)

Windows : pslogrotate.ps1 um Logfiles zu rotieren

Wir haben hier einige Anwendungen unter Windows im Einsatz die unsere Platten zuschreiben mit Logfiles. Aus meinen Linux Systemen kenne ich logrotate und pslogrotate ist eine light Version von diesem.

pslogrotate baut auf powershell 5 auf und ist mit einem json einfach zu configurieren. Definieren kann mal die Vorhaltezeit der Logs in Tagen und ob die Logs komprimiert werden sollen. Auch der Dienst kann auf restart gesetzt werden. Das bedeutet mein Script beendet den Dienst roliert das Logfile und startet den Dienst wieder.

Gerne bin ich für Feature Requests offen , diese dann bitte in Github direkt stellen.

Hier gehts zu pslogrotate.ps1 : https://github.com/Mokkujin/powershell/tree/main/pslogrotate

Powershell : New-SmbShare "no mapping between account and sid"

Ich musste heute in einem größeren Skript mehrere Folder anlegen und diese auf AD Gruppen berechtigen.
Die NTFS Rechte waren kein Problem jedoch die Rechte auf die Freigabe haben leider nicht geklappt.
Ich hab immer nur diese Fehlermeldung erhalten.

no mapping between account names and security IDs was done

Wenn ich jedoch den Befehl direkt in der Powershell eingegeben hat alles geklappt.
New-SmbShare -Path D:\DEMO_PFAD -Name Demo -ChangeAccess Group1,Group2,Group3,Group4 -FullAccess AdminGroup
also kann ja hier nur ein Problem mit der Bulk Verarbeitung vorliegen. Nach etwas basteln bin ich dann auf diese Lösung gekommen.
# create Share
$smbpath = 'D:\DEMO_PFAD'
$smbname = 'DEMO'
New-SmbShare -Path $smbpath -Name $smbname -FullAccess AdminGroup
$Groups = @()
$Groups += 'Group1'
$Groups += 'Group2'
$Groups += 'Group3'
$Groups += 'Group4'
# grant change permission on share
foreach ($Group in $Groups)
{
    Grant-SmbShareAccess -Name $smbname -AccountName $Group -AccessRight Change -Force
}


Quelle :
https://docs.microsoft.com/en-us/powershell/module/smbshare/new-smbshare?view=windowsserver2019-ps
https://docs.microsoft.com/en-us/powershell/module/smbshare/grant-smbshareaccess?view=windowsserver2019-ps

AWS : Windows Remote Desktop - Zugriff nicht möglich

Wir hatten hier das Problem das die RDP Session nicht mehr zu starten ist.

Es ist immer dieser Fehler aufgetreten.

RDP internal error

Die Maschinen laufen in der AWS und leider war der Session Manager auch noch nicht am Start. z.G. war auf der Maschine der SSM-Agent bereits installiert, wenn nicht kann man das so erledigen, natürlich bevor RDP kaputt ist ;-) (Install SSM Agent on Windows)

Die Maschine muss natürlich in SSM aufgeführt sein. Sollte das nicht der Fall sein einfach mal überprüfen ob die richtigen IAM Rollen auf den Maschinen angewendet werden. Für eine schnelle Fehlerbehebung hatte ich kurzfristig SSMFullAccess verwendet.

IAM Policy
Jetzt startet man den AWS System Manager und führt dort das Dokument "AWS-RunPowerShellScript" gegen die kaputte Maschine aus.


Unter Run a command kann man im Feld Command parameters kann man ein Powershell Script rein werfen das gegen die Maschine läuft.


hier das skript
$AllCertificates = (Get-ChildItem -Path 'Cert:\LocalMachine\My' |
Where-Object -FilterScript {
$_.Subject -Match $env:Computername } |
Select-Object Thumbprint, Subject, NotBefore, NotAfter, Issuer |
Sort-Object -Property NotAfter -Descending)
foreach ($Cert in $AllCertificates)
{
Write-Output $Cert
}


Alle folgenden Skript werden nach dem selben Muster ausgeführt.

1.) Auslesen des Zertifikates
Get-WmiObject -Class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'"
unter SSLCertificateSHA1Hash steht der Thumbprint

2.) Setzen des Zertifikates
$RDPGeneralSettings = (Get-WmiObject -Class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'")
Set-WmiInstance -path $RDPGeneralSettings.__path -argument @{SSLCertificateSHA1Hash = "NEUER THUMBPRINT"}

3.) Restart des RDP Dienstes
Restart-Service -Name TermService -force

Kurz noch zur Erklärung , mit diesem Powershell hab ich mir die Events angeschaut die mich auf die richtige Fährte gebracht haben.
Get-EventLog -LogName System -After 6/9/2021 -Before 9/9/2021 -EntryType Error | Format-List
“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)