Ich führe ein JSL-Skript vom Powershell-Kern unter Windows aus.Hat jemand eine gute Möglichkeit, von JSL auf die Konsole zu schreiben, damit es in mein Powershell-Skript schreibt?
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.In der Hoffnung, dass jemand etwas Robusteres getan hat.
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.
Cool.Ich werde es prüfen.
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 von Windows, damit PowerShell einen Port öffnen kann.
Und schließlich
Klicken Sie mit der rechten Maustaste auf das .PS1-Skript auf dem Desktop und ->Run in PowerShell.