Powershell Code?
Hallo Leute,
ich habe ein Powershell-Code der alle 23 Sekunden auf die LeerTaste drückt.
und zwar der hier: [void][System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")
while (1 -eq 1) {
Sleep -Seconds 23
[System.Windows.Forms.SendKeys]::SendWait(" ")
}
und ich würde gerne wollen, dass der Code zwischen 21sekunden und 24 Sekunden randomly eine Zahl wählt, statt alle 23 Sekunden die LeerTaste zu drücken.
was noch besser wäre, wenn er z.B. 21.4 Sekunden oder 22.7 Sekunden random wählt.
kann mir jemand da helfen und den Code umschreiben?
mit freundlichen Grüßen und danke
3 Antworten
Wo hast Du denn den völlig veralteten Code ausggraben🤔😅
...::LoadWithPartialName ist ein Relikt aus der Zeit von Powershell 2.0 und sollte keinesfalls mehr eingesetzt werden.
Mit Powershell 3.0 wurde Add-Type eingeführt und übernimmt sämtliche Aufgaben rund um den Zugriff auf externe Bibliotheken/APIs.
while (1 -eq 1) {} ist ebenfalls Nonsens , da der Ausdruck (1 -eq 1lediglich True zurückliefert. dafür hat Powershell die Variable $True oder man schreibt einfach 1 , was in einem Ausdruck ebenfalls als True interpretiert wird.
while (1 -eq 1) {}
while (1) {}
while ($True) {}
...tun das Gleiche.
...aber Nun zu deiner Zufallszahl:
Get-Random liefert je nach für -Minimum/-Maximum übergebenem Typ ein Double oder Integer zurück. da Start-Sleep Millisekunden als Parameter akzeptiert erübrigt sich jegliche Herumrechnerei und wir generieren direkt einen Zufallswert von 21000 bis 24000 (oder was immer Dir vorschwebt).
using namespace System.Windows.Forms
Add-Type -AssemblyName 'System.Windows.Forms'
while ($True) {
$MilliSecondsToSleep = Get-Random -Minimum 21000 -Maximum 24000
Write-Host "$MilliSecondsToSleep Millisekunden Pause" #zeile kann weg, nur mal Anzeigen welcher Wert generiert wurde
Start-Sleep -MilliSeconds $MilliSecondsToSleep
[SendKeys]::SendWait(' ')
}
natürlich kann man das ganze auch noch eindampfen und direkt in eine Verknüpfung schreiben:
powershell -c "Add-Type -a 'System.Windows.Forms';while (1){sleep -m (Get-Random -min 21000 -max 24000);[System.Windows.Forms.SendKeys]::SendWait(' ')}"

Das hier sollte auch mit Sekundenbruchteilen funktionieren. Der Zeitraum liegt zufällig zwischen 21 und 24 Sekunden (24 nicht inklusive).
$milliseconds = Get-Random -Maximum 3000
$timeToSleep = (21000.0 + $milliseconds) / 1000.0
Start-Sleep -Seconds $timeToSleep
weshalb rödelst Du mit Sekunden herum?
Weil der Fragesteller explizit danach gefragt hat :-) Klar sind Millisekunden praktischer.
Könntest du mir bitte auch sagen wo ich dein Code in diesem Code: [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
while ($true) {
$randomSleepTime = Get-Random -Minimum 21 -Maximum 24
Sleep -Seconds $randomSleepTime
[System.Windows.Forms.SendKeys]::SendWait(" ")
}
hier einbauen soll. Bin ein leihe. Wäre voll lieb wenn du das noch sagen könntest
Du ersetzt die folgenden Zeilen durch meine:
$randomSleepTime = Get-Random -Minimum 21 -Maximum 24
Sleep -Seconds $randomSleepTime
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
while ($true) {
$randomSleepTime = Get-Random -Minimum 21 -Maximum 24
Sleep -Seconds $randomSleepTime
[System.Windows.Forms.SendKeys]::SendWait(" ")
}
Gib auch immer schön die seit 2012 veraltetete Methode [System.Reflection.Assembly]::LoadWithPartialName() weiter!
weshalb rödelst Du mit Sekunden herum?
Einfach direkt mit Millisekunden arbeiten, damit erübrigt die "theoretisch aufwendige" Herumrechnerei.
...Mal abgesehen davon, das Start-Sleep (alias sleep) alles andere als genau ist:
...🤪