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

Ausgedruckt am: 08.01.2025 um 12:01 Uhr

CH3COOH
CH3COOH 07.01.2025 um 14:29:40 Uhr
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 07.01.2025 aktualisiert um 15:33:43 Uhr
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 07.01.2025 aktualisiert um 16:09:30 Uhr
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 07.01.2025 um 14:34:31 Uhr
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 07.01.2025 um 17:59:41 Uhr
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 07.01.2025 um 18:36:00 Uhr
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 07.01.2025 um 18:49:33 Uhr
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 07.01.2025 um 19:49:35 Uhr
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 08.01.2025 um 08:14:16 Uhr
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 ...