Memtest Pro Launcher

Dabei seit
Feb. 2008
Beiträge
2.655
#1
Hallo zusammen,

weil ich mit meinem Ryzen recht viel mit Memtest die Stabilität des Arbeitsspeichers verifizieren musste und das lästige starten und anordnen der vielen Memtest Fenster mir zu lästig war, habe ich in PowerShell einen kleinen Launcher geschrieben, den ich hiermit der Community ebenfalls zur Verfügung stellen möchte. Man muss in dem PowerShell Script einmal im oberen Bereich die Anzahl der Threads sowie die Speichermenge pro Thread eintragen, sowie ob man die Threads mit niedriger Priorität laufen lassen möchte (damit man noch den PC nebenbei nutzen kann ohne einzuschlafen) und danach das Skript nur noch mit Rechtsklick -> Run with Powershell starten. Einmal ausgefüllt kann mit Rechtsklick -> Run with PowerShell vollautomatisch alle Memtest Fenster starten und gleich grafisch anordnen lassen.

Es startet dann vollautomatisch die Fenster mit den gewünschten Einstellungen und ordnet diese ordentlich an der rechten Seite des Bildschirms an.

https://www.youtube.com/watch?v=zoCLVhV71DE&feature=youtu.be

Installation:
1: Den Code in eine Textdatei kopieren und diese umbenennen zu MemtestLauncher.ps1. Diese Datei MemtestLauncher.ps1 dann in den Memtest Pro Ordner verschieben. Es wird nicht die kostenlose Version unterstützt, weil diese keinen Kommandozeilensupport bietet.
2: Die Datei MemtestLauncher.ps1 mit einem Texteditor öffnen und die ersten 3 Zeilen nach Wunsch konfigurieren
3: Das Skript mit Rechtsklick -> Run with Powershell starten.

Code:
## To Fill ##
$MemtestThreads = 14
$MemtestMemoryperThread = 1000
$RunMemtestWithLowPriority = $true

## Script Logic - do not modify until you are not know what you are doing! #
$StartArgument = "/t" + $MemtestMemoryperThread
$StartCount = $null
while($StartCount -lt $MemtestThreads) {
start memtestpro $StartArgument
$StartCount++
}

Start-Sleep 5
if ($RunMemtestWithLowPriority -eq $true){
    foreach ($Process in (Get-Process | where {$_.Processname -like "*memtest*"})) {$Process.PriorityClass = "BelowNormal"}
}

$CSharpSource = @" 
    using System; 
    using System.Runtime.InteropServices;
 
    namespace TW.Tools.InlinePS
    {
        public static class WindowManagement
        {
            [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
            public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);
                
            public const int SWP_NOSIZE = 0x01, SWP_NOMOVE = 0x02, SWP_SHOWWINDOW = 0x40, SWP_HIDEWINDOW = 0x80;
 
            public static void SetPosition(IntPtr handle, int x, int y, int width, int height)
            {
                if (handle != null)
                { 
                    SetWindowPos(handle, 0, x, y, 0, 0, SWP_NOSIZE | SWP_HIDEWINDOW);
                
                    if (width > -1 && height > -1)
                        SetWindowPos(handle, 0, 0, 0, width, height, SWP_NOMOVE);
 
                    SetWindowPos(handle, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
                }
            }
        }
    }
"@ 
 
Add-Type -TypeDefinition $CSharpSource -Language CSharp -ErrorAction SilentlyContinue

$Width = 267
$Height = 325
$monitor = Get-Wmiobject Win32_Videocontroller
$MaxVertical = $Monitor.CurrentVerticalResolution
$MaxHorizontal = $Monitor.CurrentHorizontalResolution
$XCount = 0
$YCount = 0

$AllProcesses = Get-Process -name memTest* | Sort-Object -Property StartTime


foreach ($Process in $AllProcesses){
if (($YCount * $Height) -ge ($MaxVertical - $Height)){
$YCount = 0
$XCount++
}

if ($YCount -eq "0"){
    $PosY = ($YCount * $Height)
}
else{
    $PosY = ($YCount * $Height - $YCount * 3)
}

    $PosX = $MaxHorizontal - (($XCount+1) * $Width - (5 * ($XCount+1)))

[TW.Tools.InlinePS.WindowManagement]::SetPosition($Process.MainWindowHandle, $PosX, $PosY, $Width, $Height)
$Ycount++

}
 
Zuletzt bearbeitet:

rg88

Fleet Admiral
Dabei seit
Feb. 2015
Beiträge
18.869
#2
Kann man sich eigentlich komplett sparen, da ein Speichertest, der unter Windows läuft niemals aussagekräftig ist, um nicht zu sagen sinnlos.

Memtest86 von Boot-CD oder Stick starten. Dann bekommt man auch brauchbare Ergebnisse nach 5-6 Pass über einige Stunden.
 
Dabei seit
Mai 2011
Beiträge
1.093
#3
Ich benutze auch Memtest vom USB Stick und boote das, ist wirklich besser zum testen.

​Aber trotzdem muss ich meinen Respekt aussprechen was der TE da gezaubert hat. Man muss sich nur zu helfen wissen. :D
 

Stunrise

Commander
Ersteller dieses Themas
Dabei seit
Feb. 2008
Beiträge
2.655
#4
Memtest86 von Boot-CD oder Stick starten. Dann bekommt man auch brauchbare Ergebnisse nach 5-6 Pass über einige Stunden.
Das sieht jeder anders, ich sehe das ganz und gar nicht so. Diese ganzen Boot Tools haben bei mir mit OC nie brauchbare Ergebnisse ausgespuckt, da liefen die Tests stunden ohne Fehler, während Apps unter Windows relativ schnell abgestürzt sind und Memtest Pro nach nur ein paar Sekunden Fehler ausgespuckt hat. Grundsätzlich halte ich ein Boot Test vom Prinzip her ebenfalls für besser, allerdings kenne ich keinen bootbaren Speichertest, der an die Zuverlässigkeit der Engine von Memtest Pro auch nur halbwegs heran kommt. Deshalb verwende ich persönlich immer HCI Memtest Pro und habe mir dafür einen Launcher geschrieben, dem ich hier jedem zur Verfügung gestellt habe. Du kannst aber gerne auf den Launcher verzichten und deinen Boot Speichertest nehmen, da habe ich kein Problem damit.

@Killertomate: Danke :)
 

rg88

Fleet Admiral
Dabei seit
Feb. 2015
Beiträge
18.869
#5
Ich kenne auch nur einen zuverlässigen und das ist eben Memtest86.

Ein Test unter Windows ist immer abhängig vom Betriebssystem, dessen Scheduler und dessen Speicherverwaltung. Es ist gar nicht möglich den RAM auf diese Art komplett zu testen.
Wenn Memtest86 dir keine Fehler ausspuckt, dann hast du diesen wohl nicht lange genug laufen lassen. Oder eine falsche Version benutzt, zB memtest86+ für DDR4 eingesetzt, was nicht unterstützt wird.

Was bringt ein Speichertest unter Windows?
-> Es werden Fehler gefunden -> OC zu hoch oder RAM defekt
-> Es werden keine Fehler gefunden -> Dieses Ergebnis ist nicht aussagekräftig


Mir ist schon klar, dass auch kein bootfähiges Tool 100%ige Ergebnisse liefert. Aber es ist nahe dran. Ein Tool das unter einem Betriebssystem läuft kann das schlicht überhaupt nicht richtig, siehe oben.
 
Dabei seit
Juli 2009
Beiträge
4.420
#7
Bin da ganz bei Stunrise, memtest86 ist für Timing und RAM OC nicht mehr ansatzweise aussagekräftig.

Die neue Passmark Variante mag da wieder anders sein.

Und warum soll es ein Unterschied sein, ob das Betriebssystem Windows oder ein Mini Linux ist, irgendwas muss Passmark ja auch einsetzen.
 
Zuletzt bearbeitet:
Dabei seit
Sep. 2004
Beiträge
210
#8
@Stunrise: Danke! Hab mit den MemtesterPro gekauft und dein Script wie oben beschrieben kopiert und gestartet.. nur leider tut das NIX. Powershell geht auf und schließt sich wieder, ohne den Memtester zu starten. Script liegt im MemtestPro Ordner! Was stimmt da nicht?
 

Stunrise

Commander
Ersteller dieses Themas
Dabei seit
Feb. 2008
Beiträge
2.655
#9
Also das Skript als solches sollte schon funktionieren, bzw. tut es ja auch bei anderen Usern. Du musst die Fehlermeldung abgreifen, um zu sehen, wo das Problem liegt.

Starte mal die PowerShell ISE
C:\Windows\system32\WindowsPowerShell\v1.0\powershell_ise.exe

Gehe Auf File -> Open -> Lade das PowerShell Skript rein - das Skript wird dann im oberen Bereich (Skript Pane) geöffnet, während du unten die Powershell ein- und ausgabe hast.

Nun musst du in den Pfad navigieren, wo das Skript und die Memtest.exe liegt. Das kann man machen, in dem man im unteren Bereich der PowerShell ISE den Pfad mit cd eingibt, z.B. wenn alles unter C:\Install\Memtest Pro liegt cd "C:\Install\Memtest Pro"

Vergesse da bei nicht die Gänsefüße bei dem Pfad anzugeben.

1.jpg

Wenn das gemacht ist und du mit der PowerShell im richtigen Ordner bist, auf Run Script klicken (oder einfach F5).

Dann hast du die Fehlermeldung, die du hier rein stellen kannst.
 
Zuletzt bearbeitet:
Dabei seit
Sep. 2004
Beiträge
210
#10
dann kommt das hier:

Die Datei "C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1" kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist. Weitere
Informationen finden Sie unter "about_Execution_Policies" (https:/go.microsoft.com/fwlink/?LinkID=135170).
+ CategoryInfo : Sicherheitsfehler: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnauthorizedAccess


Welches Risiko gehe ich ein, wenn ich das Ausführen von Scripte wie hier beschrieben erlaube?
 

Stunrise

Commander
Ersteller dieses Themas
Dabei seit
Feb. 2008
Beiträge
2.655
#11
Bei mir funktioniert es problemlos mit der Standard Execution Policy "Restricted", also nicht erlaubt. Das Skript geht trotzdem problemlos.

Man könnte mal folgendes probieren.
Powershell als Admin starten -> Set-ExecutionPolicy Unrestricted
Skript ausführen
Wieder zurückstellen: Set-ExecutionPolicy Restricted

Dann siehst du, ob es daran liegt. Das Risiko ist überschaubar, dann können überhaupt PowerShell Skripte erstmal ausgeführt werden. Die müsste man immernoch selbst runterladen und ausführen und die laufen immer im User-Kontext ohne Admin-Rechte. Der Standard ist aber Restricted, also verboten, bei Bedarf kann man es dann signieren (Unternehmen) oder allgemein erlauben (Privat)
 
Dabei seit
Sep. 2004
Beiträge
210
#12
script startet jetzt, nachdem ich einen fehler korrigiert habe ;) da waren leerzeichen drin, wo keine erlaubt sind.

jedenfalls kommt nach dem starten des scripts das fenster "womit soll diese datei geöffnet werden?" dialogfenster. kurz darauf ein haufen fehlermeldungen und die fenster werden an den linken rand verschoben... zumindest ein paar davon. die meisten verschwinden ins nirvana (sind aber geöffnet, sieht man in der taskleiste). anscheinend gibts da ein problem beim verschieben der fenster.

PHP:
PS C:\Users\M2\Downloads\MemTestPro> C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:62 Zeichen:9
+     if (($YCount * $Height) -ge ($MaxVertical - $Height)){
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:74 Zeichen:9
+         $PosX = $MaxHorizontal - (($XCount+1) * $Width - (5 * ($XCoun ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:62 Zeichen:9
+     if (($YCount * $Height) -ge ($MaxVertical - $Height)){
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:74 Zeichen:9
+         $PosX = $MaxHorizontal - (($XCount+1) * $Width - (5 * ($XCoun ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:62 Zeichen:9
+     if (($YCount * $Height) -ge ($MaxVertical - $Height)){
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:74 Zeichen:9
+         $PosX = $MaxHorizontal - (($XCount+1) * $Width - (5 * ($XCoun ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:62 Zeichen:9
+     if (($YCount * $Height) -ge ($MaxVertical - $Height)){
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:74 Zeichen:9
+         $PosX = $MaxHorizontal - (($XCount+1) * $Width - (5 * ($XCoun ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:62 Zeichen:9
+     if (($YCount * $Height) -ge ($MaxVertical - $Height)){
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:74 Zeichen:9
+         $PosX = $MaxHorizontal - (($XCount+1) * $Width - (5 * ($XCoun ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:62 Zeichen:9
+     if (($YCount * $Height) -ge ($MaxVertical - $Height)){
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:74 Zeichen:9
+         $PosX = $MaxHorizontal - (($XCount+1) * $Width - (5 * ($XCoun ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:62 Zeichen:9
+     if (($YCount * $Height) -ge ($MaxVertical - $Height)){
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:74 Zeichen:9
+         $PosX = $MaxHorizontal - (($XCount+1) * $Width - (5 * ($XCoun ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:62 Zeichen:9
+     if (($YCount * $Height) -ge ($MaxVertical - $Height)){
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:74 Zeichen:9
+         $PosX = $MaxHorizontal - (($XCount+1) * $Width - (5 * ($XCoun ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:62 Zeichen:9
+     if (($YCount * $Height) -ge ($MaxVertical - $Height)){
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:74 Zeichen:9
+         $PosX = $MaxHorizontal - (($XCount+1) * $Width - (5 * ($XCoun ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:62 Zeichen:9
+     if (($YCount * $Height) -ge ($MaxVertical - $Height)){
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:74 Zeichen:9
+         $PosX = $MaxHorizontal - (($XCount+1) * $Width - (5 * ($XCoun ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:62 Zeichen:9
+     if (($YCount * $Height) -ge ($MaxVertical - $Height)){
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:74 Zeichen:9
+         $PosX = $MaxHorizontal - (($XCount+1) * $Width - (5 * ($XCoun ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:62 Zeichen:9
+     if (($YCount * $Height) -ge ($MaxVertical - $Height)){
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:74 Zeichen:9
+         $PosX = $MaxHorizontal - (($XCount+1) * $Width - (5 * ($XCoun ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:62 Zeichen:9
+     if (($YCount * $Height) -ge ($MaxVertical - $Height)){
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:74 Zeichen:9
+         $PosX = $MaxHorizontal - (($XCount+1) * $Width - (5 * ($XCoun ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:62 Zeichen:9
+     if (($YCount * $Height) -ge ($MaxVertical - $Height)){
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
 
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "op_Subtraction" enthält.
In C:\Users\M2\Downloads\MemTestPro\MemtestLauncher.ps1:74 Zeichen:9
+         $PosX = $MaxHorizontal - (($XCount+1) * $Width - (5 * ($XCoun ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound
danke für jede hilfe!!!

PS: das dialogfeld "womit soll diese datei geöffnet werden..." kommt nicht, wenn ich das script mit dem powershell ISE starte.
 

Stunrise

Commander
Ersteller dieses Themas
Dabei seit
Feb. 2008
Beiträge
2.655
#13
Okay, freut mich, dass es jetzt läuft. PowerShell ISE ist so eine Art Mini-Entwicklungsumgebung für PowerShell, hilfreich für Debugging und Skripting. Man sollte auch die Datei mit Rechtsklick -> Run with Powershell starten, oder eben über ISE - normalerweise werden PS1 Dateien nicht direkt mit PowerShell gestartet, sondern oft mit einem Editor wie Notepad++ oder so.

Wo genau war denn der Fehler mit dem Leerzeichen? Bei mir läuft das Skript 1:1 ohne Probleme durch, hab es auch mit dem Kauf von dem Intel Core i9 öfters mal verwendet, um den Speicher dort zu testen. Hattest du die memtestpro Datei umbenannt? Da ist mir beim durchgehen aufgefallen, dass das durchaus fehleranfällig ist. Ich hab mal eine neue Version gemacht mit der Abfrage des Pfads.

## To Fill ##
$MemtestThreads = 10 #Hier die Anzahl der gewünschten Memtest Pro Fenster angeben
$MemtestMemoryperThread = 2500 #Hier die Menge an Arbeitsspeicher in MB eingeben, die jedes Memtest Pro Fenster haben soll
$RunMemtestWithLowPriority = $true #Soll Memtest Pro mit niedriger Priorität laufen? $true=ja $false=nein
$MemTestProExePath = "C:\Install\Memtest Pro\memtestPro.exe"

## Script Logic - do not modify until you are not know what you are doing! #
$StartArgument = "/t" + $MemtestMemoryperThread
$StartCount = $null
while($StartCount -lt $MemtestThreads) {
start $MemTestProExePath $StartArgument
$StartCount++
}

Start-Sleep 5
if ($RunMemtestWithLowPriority -eq $true){
foreach ($Process in (Get-Process | where {$_.Processname -like "*memtest*"})) {$Process.PriorityClass = "BelowNormal"}
}

$CSharpSource = @"
using System;
using System.Runtime.InteropServices;

namespace TW.Tools.InlinePS
{
public static class WindowManagement
{
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);

public const int SWP_NOSIZE = 0x01, SWP_NOMOVE = 0x02, SWP_SHOWWINDOW = 0x40, SWP_HIDEWINDOW = 0x80;

public static void SetPosition(IntPtr handle, int x, int y, int width, int height)
{
if (handle != null)
{
SetWindowPos(handle, 0, x, y, 0, 0, SWP_NOSIZE | SWP_HIDEWINDOW);

if (width > -1 && height > -1)
SetWindowPos(handle, 0, 0, 0, width, height, SWP_NOMOVE);

SetWindowPos(handle, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
}
}
}
}
"@

Add-Type -TypeDefinition $CSharpSource -Language CSharp -ErrorAction SilentlyContinue

$Width = 267
$Height = 325
$monitor = Get-Wmiobject Win32_Videocontroller
$MaxVertical = $Monitor.CurrentVerticalResolution
$MaxHorizontal = $Monitor.CurrentHorizontalResolution
$XCount = 0
$YCount = 0

$AllProcesses = Get-Process -name memTest* | Sort-Object -Property StartTime


foreach ($Process in $AllProcesses){
if (($YCount * $Height) -ge ($MaxVertical - $Height)){
$YCount = 0
$XCount++
}

if ($YCount -eq "0"){
$PosY = ($YCount * $Height)
}
else{
$PosY = ($YCount * $Height - $YCount * 3)
}

$PosX = $MaxHorizontal - (($XCount+1) * $Width - (5 * ($XCount+1)))

[TW.Tools.InlinePS.WindowManagement]::SetPosition($Process.MainWindowHandle, $PosX, $PosY, $Width, $Height)
$Ycount++

}
 
Top