imicha
Goto Top

Remote per Script Lizenzen austauschen

Hallo liebe ITLer Gemeinde,

ich bin neu hier und hoffe hier auf einen guten Austausch sowie neue Erfahrungen bzw. Ideen.. face-smile

Ich bin nun seit 27 Jahren im IT Geschäft tätig.
Da ich mich nun endlich mit dem Scripten beschäftigen möchte (räusper ..::: Muss face-big-smile)
möchte ich nun den Anfang machen und gerne auf eure Erfahrungen zurückgreifen.

Ich such nun seit einigen Tagen eine gute Möglichkeit bei via Remote in Form eines Scriptes
Lizenzen auf dem Server aus zu tauschen.

Folgendes habe ich bereits im Internet erfolgreich zurecht gesucht.
Komme jedoch einfach nicht mehr weiter.. .. ... face-sad


$servers = @("Server1", "Server2") # Ersetze mit deinen Servernamen  
 Installiere die ESU-Lizenz
try {
slmgr.vbs /ipk $key
Write-Host "ESU-Lizenz erfolgreich auf $env:COMPUTERNAME installiert."  
} catch {
Write-Host "Fehler bei der Installation der ESU-Lizenz auf $env:COMPUTERNAME: $_"  
}

Was mir dieser Stelle noch fehlen würde...
- Parameter mit Login Informationen
- Fehlt hier nicht der Befehl zum aktivieren der Lizenz? (slmgr.vbs /ato)
- Wurde der Lizenzkey erfolgreich ausgetauscht? (slmgr.vbs /dil)
- Schreibe Ergebnise in eine Log-Datei

Könnt Ihr mir helfen?


Vielen lieben Dank im Voraus
IMicha

Content-ID: 670538

Url: https://administrator.de/forum/remote-per-script-lizenzen-austauschen-670538.html

Printed on: January 20, 2025 at 17:01 o'clock

CH3COOH
CH3COOH Jan 07, 2025 at 13:29:40 (UTC)
Goto Top
Hallo IMicha,
also zum einen ist slmbgr.vbs kein Powershell-Command. Das soll doch Powershell sein oder? Falls ja wäre Invoke-Command eine Interessante Anlaufstelle für dich. Und ggf. cscript.
Gruß
CamelCase
CamelCase Jan 07, 2025 updated at 14:33:43 (UTC)
Goto Top
Moin,

ich hab da noch was für:

param (
    [Parameter(Mandatory=$true)]
    [string[]]$Servers,          # Liste der Servernamen
    [Parameter(Mandatory=$true)]
    [string]$LicenseKey,         # Neuer Lizenzschlüssel
    [Parameter(Mandatory=$true)]
    [PSCredential]$Credential,   # Anmeldeinformationen
    [Parameter(Mandatory=$false)]
    [string]$LogPath = "C:\Logs\LicenseUpdate.log"  # Pfad zur Log-Datei  
)

function Write-Log {
    param (
        [string]$Message
    )
    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"  
    $logMessage = "$timestamp - $Message"  
    Write-Output $logMessage
    Add-Content -Path $LogPath -Value $logMessage
}

$logDir = Split-Path -Path $LogPath
if (!(Test-Path -Path $logDir)) {
    New-Item -Path $logDir -ItemType Directory -Force
}

foreach ($server in $Servers) {
    Write-Log "Starte Lizenzaktualisierung auf Server: $server"  

    try {
        Invoke-Command -ComputerName $server -Credential $Credential -ScriptBlock {
            param ($key)

            $cscriptPath = "$env:SystemRoot\System32\cscript.exe"  
            $slmgrPath = "$env:SystemRoot\System32\slmgr.vbs"  

            # Installiere den Lizenzschlüssel
            $installResult = & $cscriptPath //NoLogo $slmgrPath /ipk $key
            Start-Sleep -Seconds 5

            # Aktiviere die Lizenz
            $activateResult = & $cscriptPath //NoLogo $slmgrPath /ato
            Start-Sleep -Seconds 2

            # Überprüfe den Lizenzstatus
            $status = & $cscriptPath //NoLogo $slmgrPath /dli

            return @{
                InstallResult = $installResult
                ActivateResult = $activateResult
                Status = $status
            }
        } -ArgumentList $LicenseKey -ErrorAction Stop | ForEach-Object {
            Write-Log "Server: $server"  
            Write-Log "Installations-Ergebnis: $($_.InstallResult)"  
            Write-Log "Aktivierungs-Ergebnis: $($_.ActivateResult)"  
            Write-Log "Lizenzstatus: $($_.Status)"  
            Write-Log "--------------------------------------------"  
        }

    } catch {
        Write-Log "Fehler bei der Lizenzaktualisierung auf $server : $_"  
    }
}

Write-Log "Lizenzaktualisierung abgeschlossen."  

Liste mit 1 Server pro Zeile als TXT speichern, Skript speichern als z.b. Set-WindowsKey.ps1, ausführen mit z.B.:

.\Set-WindowsKey.ps1 -Servers (Get-Content C:\servers.txt) -LicenseKey "FCKGW-RHQQ2-...." -Credential (Get-Credential)  
aqui
aqui Jan 07, 2025 updated at 15:09:30 (UTC)
Goto Top
kein Powershell-Command
Der TO hat ja auch gar nicht genannt welches denn überhaupt sein bevorzugtes Scripting Tool ist! face-sad
CamelCase
CamelCase Jan 07, 2025 at 13:34:31 (UTC)
Goto Top
Zitat von @aqui:

kein Powershell-Command
Der TO hat ja auch gar nicht genannt welches sein bevorzugtes Scripting Tool ist! face-sad

Auf PowerShell kann man wegen "Write-Host" schließen ;)
DerWoWusste
DerWoWusste Jan 07, 2025 at 16:59:41 (UTC)
Goto Top
Ich rate davon ab, Powershell-Remoting überhaupt für solche trivialen Dinge zu nutzen.
Powershell-Remoting bedingt immer, dass man mit Konten, die auf (ggf. mehreren) Remotesystemen Admins sind, arbeiten muss. Ebenso müssen für das Remoting Ports geöffnet werden, die man nicht ohne Not öffnen sollte.

Besser: setze geplante Tasks per GPO auf die Sache an, die können all das auch und haben Null zusätzliches Risiko.
Ein solcher Task kann zum Beispiel als Systemkonto laufen und hat so alle Rechte und kann dennoch ein Log auf eine Freigabe absondern.

Details in meinem Artikel
https://www.experts-exchange.com/articles/35931/About-the-risks-of-execu ...
Dani
Dani Jan 07, 2025 at 17:36:00 (UTC)
Goto Top
Moin,
seit wann ersetzen ESU Lizenzen den eigentliche Lizenz Schlüssel? Bis dato war das noch immer ein zusätzlich Key.

Ich such nun seit einigen Tagen eine gute Möglichkeit bei via Remote in Form eines Scriptes
Lizenzen auf dem Server aus zu tauschen.
Schöne Grüße von Microsoft: https://github.com/dadorner-msft/activationws


Gruß,
Daniel
IMicha
IMicha Jan 07, 2025 at 17:49:33 (UTC)
Goto Top
@CH3COOH:
Vielen Dank, für Deine Unterstützung...
dies werde ich mir auf jeden Fall genauer ansehen.. face-smile

@aqui:
Bitte sehe es mir nach das ich in der tat vergessen habe
welches Scripting ich bevorzuge... face-sad
Denn eigentlich ist es mir vorab völlig egal, denn wie ich
bereits schon schrieb, mich aktuell erst intensiver mit diesem
Thema beschäftige...
Ich gelobe auf jeden Fall Besserung.. face-big-smile

@CamelCase:
vielen herzlichen Dank für dieses tolle Script.
eigentlich dass was ich gesucht habe.. face-smile
Werde mich gleich an die Arbeit machen....


Vielen herzlichen Dank für das Teilen Deiner Arbeit. ThumbsUp
IMicha
IMicha Jan 07, 2025 at 18:49:35 (UTC)
Goto Top
Zitat von @Dani:

Moin,
seit wann ersetzen ESU Lizenzen den eigentliche Lizenz Schlüssel? Bis dato war das noch immer ein zusätzlich Key.

Ich such nun seit einigen Tagen eine gute Möglichkeit bei via Remote in Form eines Scriptes
Lizenzen auf dem Server aus zu tauschen.
Schöne Grüße von Microsoft: https://github.com/dadorner-msft/activationws


Gruß,
Daniel

Hi Daniel,

wenn vorab bereits schon einmal eine ESU installiert war, muss diese durch eine aktuelle ausgetauscht werden.. face-smile
Aus diesem Grund, werden die Befehlszeilen wie unten beschrieben auf dem Server gesetzt:

cmd als Admin ausführen:
slmgr.vbs ipk --- (Dieser Befehl tauscht meinen Erkenntnissen nach den Lizenzkey aus.. )
slmgr.vbs ato
slmgr.vbs /dli

Zu Deinem Link https://github.com/dadorner-msft/activationws hätte ich da eine Frage...
Wie soll dies funktionieren?

Dateien als Zip Downloaden?
Habe jedoch nicht so ganz verstanden wie es weiter gehen soll....


Viele Grüße
CamelCase
CamelCase Jan 08, 2025 at 07:14:16 (UTC)
Goto Top
Moin,

Dateien als Zip Downloaden?
Habe jedoch nicht so ganz verstanden wie es weiter gehen soll....

Den Instruktionen hier folgen:
https://github.com/dadorner-msft/activationws?tab=readme-ov-file#install ...
aqui
aqui Jan 12, 2025 at 12:57:17 (UTC)
Goto Top
Wenn dies denn nun die Lösung war bitte dann nicht vergessen deinen Thread hier auf erledigt zu setzen!
How can I mark a post as solved?