Ich führe ein JSL-Skript vom Powershell-Kern unter Windows aus. Kennt jemand eine gute Möglichkeit, von JSL aus in die Konsole zu schreiben, sodass es in mein Powershell-Skript geschrieben wird?
Derzeit schreibe ich in eine temporäre Datei und überprüfe diese Datei dann im Powershell-Skript in einer Schleife und schreibe den Inhalt dieser Datei. Ich hoffe, jemand hat etwas Robusteres gemacht.
Sie könnten so etwas tun. Hier ist (mein erstes, mehr oder weniger) Powershell-Skript (danke Github und Stapelüberlauf!) Korrigieren Sie den Pfad zur Desktop-Datei ...
Write-Output "Starting JMP"
Start-Process -FilePath "jmp.exe" -ArgumentList "C:\Users\v1\Desktop\pstest.jsl"
Write-Output "Started JMP"
# https://gist.github.com/staaldraad/153ab9d26d49c387550bcb5f974f7910
# thanks @ https://gist.github.com/staaldraad
$socket = new-object System.Net.Sockets.TcpListener('0.0.0.0', 1080);
if($socket -eq $null){
exit 1;
}
$socket.start();
$client = $socket.AcceptTcpClient();
$stream = $client.GetStream();
$buffer = new-object System.Byte[] 2048;
# $file = 'c:/afile.exe';
# $fileStream = New-Object System.IO.FileStream($file, [System.IO.FileMode]'Create', [System.IO.FileAccess]'Write');
$encoding = new-object System.Text.AsciiEncoding
do
{
$rawresponse = $null;
while($stream.DataAvailable -or $rawresponse -eq $null) {
$rawresponse = $stream.Read($buffer, 0, 2048);
if ($rawresponse -gt 0) {
$response = $encoding.GetString($buffer, 0, $rawresponse)
# $fileStream.Write($buffer, 0, $read);
$response # really? that's all it takes to print to the console?
}
}
} While ($rawresponse -gt 0);
# $fileStream.Close();
$socket.Stop();
$client.close();
$stream.Dispose();
Write-Output "all done, exit in 5 seconds..."
Start-Sleep -Seconds 5
Hier ist ein JSL-Skript, pstest.jsl, für den Desktop ...
s=socket();
s<<CONNECT></CONNECT>
Ich denke, das war erforderlich, kann aber nach ein paar Fehlstarts nicht sicher sein ...
Dialog from windows to allow PowerShell to open a port.Dialog from windows to allow PowerShell to open a port.Dialog from windows to allow PowerShell to open a port.Dialog von Windows, damit PowerShell einen Port öffnen kann.
Und schließlich
Right-click the .PS1 script on the desktop and ->Run in PowerShell.Right-click the .PS1 script on the desktop and ->Run in PowerShell.Right-click the .PS1 script on the desktop and ->Run in PowerShell.Klicken Sie mit der rechten Maustaste auf das .PS1-Skript auf dem Desktop und ->Run in PowerShell.
Cool.Ich werde es prüfen.
Es hört sich so an, als müssten Sie eine DLL erstellen. JMP funktioniert gut mit denen, die einen einzigen Parameter haben. Dieses Argument könnte Ihre Zeichenfolge sein.