[KMS Client] Activation expiration script

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Snors
  • Registratie: Oktober 2007
  • Laatst online: 11-08 12:42
Allen,

Ik ben al dagenlang aan het worstelen om het e.e.a. in elkaar te knutselen. Ik ben bezig met een KMS Volume Activation Expiration remind script. Dit houd in dat als bijvoorbeeld de Volume activation expiration beneden de 20 dagen komt er een pop-up verschijnt met een waarschuwing.

Ondanks dat MS adviseert om client's die niet vaak met ons netwerk verbinden van een MAK key te voorzien zou ik deze ook graag met KMS willen uitrusten. Om te voorkomen dat ze pas na 180 dagen te zien krijgen dat hun activatie gaat verlopen wil ik ze eerder op de hoogte stellen d.m.v. een pop-up die aangeeft dat ze met VPN moeten verbinden om hun computer activated te houden.

Met het command slmgr.vbs /dlv krijg je een Windows Script Host pop-up waar de Volume activation expiration instaat. Ik heb al geprobeerd de tekst te trimmen, de dagen in een variable te krijgen en als het getal <20 is een popup te weergeven.

Iemand die mij verder op weg kan helpen of weet of zoiets al out of the box bestaat?

Acties:
  • 0 Henk 'm!

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 03-10 14:56

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Snors schreef op dinsdag 22 oktober 2013 @ 11:02:
Met het command slmgr.vbs /dlv krijg je een Windows Script Host pop-up waar de Volume activation expiration instaat. Ik heb al geprobeerd de tekst te trimmen, de dagen in een variable te krijgen en als het getal <20 is een popup te weergeven.
Wat lukt er niet? Waar loop je tegenaan?

Overigens met "cscript C:\Windows\System32\slmgr.vbs /dli" krijg je de output al naar console, vandaar uit is het wat makkelijker bewerken.

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Acties:
  • 0 Henk 'm!

  • Snors
  • Registratie: Oktober 2007
  • Laatst online: 11-08 12:42
Question Mark schreef op dinsdag 22 oktober 2013 @ 11:23:
[...]

Wat lukt er niet? Waar loop je tegenaan?

Overigens met "cscript C:\Windows\System32\slmgr.vbs /dli" krijg je de output al naar console, vandaar uit is het wat makkelijker bewerken.
Ik loop vast op het weergeven van een single line en de rest weg trimmen. Ik wil niet eerst alles in een temp file wegschrijven, inladen, trimmen en dan de output weergeven maar direct de overige boel weghalen en alleen het aantal dagen overhouden. /dli was ik ook al achter om de output direct naar console te printen:
PowerShell:
1
Invoke-Expression "cscript //t:20 'C:\Windows\System32\slmgr.vbs' ` /dli"


Ik gebruik powershell omdat deze out of the box trim functies ondersteund. Ik moet dus alleen regel 7(als ik het goed heb) in een var zetten en dan de boel gaan inkorten...

EDIT:
Hmm, zit nu op de volgende code:
PowerShell:
1
2
3
4
5
6
7
8
$timeleft = cscript //t:20 C:\Windows\System32\slmgr.vbs /dli |
 select-string "Volume activation expiration" |
  foreach {$_.line.split(":")[1].trim()}

#OUTPUT
Write-Host "Timeleft : " $timeleft

pause


Dit werkt nu nog alleen de dagen selecteren. Hoe kan ik dit het beste doen? Ik trim liever geen static letters weg. De output is nu:
Timeleft : 259098 minute(s) (180 day(s))

Variable inhoud is 259098 minute(s) (180 day(s))

[ Voor 23% gewijzigd door Snors op 22-10-2013 12:06 ]


Acties:
  • 0 Henk 'm!

  • Snors
  • Registratie: Oktober 2007
  • Laatst online: 11-08 12:42
Ok, ik heb de variable en kan hiermee verder werken. Vraag me alleen af of ik het niet op een te omslachtige manier heb gedaan:
PowerShell:
1
2
3
4
5
6
7
8
9
10
11
$timeleft = cscript //t:20 C:\Windows\System32\slmgr.vbs /dli |
 select-string "Volume activation expiration" |
  foreach {$_.line.split("(")[2].trim()}

$timeleft = $timeleft.Replace("day", "")
$timeleft = $timeleft.Replace(" ", "")

#OUTPUT
$timeleft

pause


Kan dit op een "betere" manier?

Totale script is als volgt geworden:
PowerShell:
1
2
3
4
5
6
7
8
9
10
11
$timeleft = cscript //t:20 C:\Windows\System32\slmgr.vbs /dli |
 select-string "Volume activation expiration" |
  foreach {$_.line.split("(")[2].trim()}

$timeleft = $timeleft.Replace("day", "")
$timeleft = $timeleft.Replace(" ", "")
If([int]$timeleft -le 20) {
    [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
    [Windows.Forms.MessageBox]::Show("You've $timeleft days left to get your Windows re-activated. Please connect with VPN to the Network and leave it open for ~2 hours to get automatically re-activated", "Windows Activation Reminder", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Information)
}
exit

[ Voor 45% gewijzigd door Snors op 22-10-2013 14:38 ]


Acties:
  • 0 Henk 'm!

  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 01-10 11:17
Wellicht nog handig voor anderen: er kan natuurlijk ook gebruik gemaakt worden van
Get-WmiObject SoftwareLicensingProduct en GracePeriodRemaining

http://blog.bjornhouben.com