Mit Hilfe des geposteten
Powershell Script und Windows 11 Boardmitteln konnte ich den Stromverbrauch des PCs in HWInfo eintragen.
Für die Leistungsmessung wurde ein Shelly Plus Plug S verwendet.
Eine kurze Beschreibung der durchgeführten Schritte:
Windows-Taste + X Terminal (Administrator) aufrufen
PowerShell Entwicklungsumgebung (ISE) starten:
Datei --> Neu
Nachfolgendes einfügen dabei aber unter $ipOrHostname die IP der Shelly anpassen:
Code:
$ipOrHostname = "0.0.0.0"
$intervalMs = 1000
$deviceName = "HWL Power"
$sensorId = "Power0"
$sensorName = "PC"
try { Get-Item -Path "HKCU:\Software\HWiNFO64\Sensors\Custom" -ErrorAction Stop }
catch { New-Item –Path "HKCU:\Software\HWiNFO64\Sensors\" –Name "Custom" }
try { Get-Item -Path "HKCU:\Software\HWiNFO64\Sensors\Custom\${deviceName}" -ErrorAction Stop }
catch { New-Item –Path "HKCU:\Software\HWiNFO64\Sensors\Custom" –Name ${deviceName} }
try { Get-Item -Path "HKCU:\Software\HWiNFO64\Sensors\Custom\${deviceName}\${sensorId}" -ErrorAction Stop }
catch { New-Item –Path "HKCU:\Software\HWiNFO64\Sensors\Custom\${deviceName}" –Name ${sensorId} }
try { Get-ItemProperty -Path "HKCU:\Software\HWiNFO64\Sensors\Custom\${deviceName}\${sensorId}" -Name "Name" -ErrorAction Stop }
catch { New-ItemProperty –Path "HKCU:\Software\HWiNFO64\Sensors\Custom\${deviceName}\${sensorId}" –Name "Name" -Value ${sensorName} -PropertyType String }
while (1 -eq 1) {
$request = Invoke-WebRequest "http://${ipOrHostname}/rpc/Switch.GetStatus?id=0"
if ($request.StatusCode -eq 200)
{
$json = $request.Content | ConvertFrom-Json
$power = $json.apower
New-ItemProperty –Path "HKCU:\Software\HWiNFO64\Sensors\Custom\${deviceName}\${sensorId}" –Name "Value" -Value $power -PropertyType String -Force
}
Start-Sleep -Milliseconds ${intervalMs}
}
Mit Speichern unter... Script speichern. (z.B. Shelly.ps1)
PowerShell Ausführungsrichtlinie abfragen.
Ergebnis = Restricted Es darf keine PowerShell Script ausgeführt werden.
Um PowerShell Scripte ausführen zu dürfen wird die Ausführungsrichtlinie in AllSigned geändert.
AllSigned bedeutet PowerShell Scripte dürfen nur ausgeführt werden, wenn sie signiert sind.
Code:
Set-ExecutionPolicy AllSigned
Zertifikat erstellen und einbinden:
Code:
New-SelfSignedCertificate -CertStoreLocation cert:\currentuser\my `
-Subject "CN=PowerShellAllSigned" `
-Type CodeSigningCert `
-Provider "Microsoft Enhanced RSA and AES Cryptographic Provider" `
-NotAfter (Get-Date).AddYears(10) `
-KeyAlgorithm RSA `
-KeyUsage DigitalSignature `
-KeyExportPolicy Exportable
Certificate Manager Tool öffnen:
PowerShellAllSigned Zertifikat öffnen.
Zertifikat exportieren:
Details --> In Datei kopieren --> Weiter --> Nein, privaten Schlüssel nicht exportieren
--> DER-codiert-binär X.509 (.CER)
Das exportierte Zertifikat nun in Vertrauenswürdigen Stammzertifizierungsstellen
und in den Vertrauenswürdigen Herausgebern importieren.
Alle Aufgaben --> Importieren
Um das Script mit dem Zertifikat zu signieren:
Code:
Set-AuthenticodeSignature -FilePath F:\Shelly.ps1 -Certificate (Get-ChildItem -Path Cert:\CurrentUser\My\ -CodeSigningCert)
Das Script soll beim Start von Windows automatisch ausgeführt werden.
Aufgabenplanung öffnen:
Aufgabe erstellen --> Allgemein Name: Shelly --> Unabhängig von der Benutzeranmeldung ausführen
Trigger --> Neu --> Aufgabe starten: Bei Anmeldung
Aktion --> Neu --> Aktion: Programm starten --> Programm/Skript: powershell.exe
Argument hinzufügen (optional): F:\Shelly.ps1
Fertig.... beim nächsten Start des Computers sollte der Eintrag in HWInfo angelegt sein.
Gruß
Milbrot