north89
Goto Top

Ps2exe kennt -AsArray nicht

Hallo zusammen,

ich hoffe, ihr könnt mir weiter helfen.

Mein PowerShell-Skript funktioniert (PowerShell 7.3.9 / .NET 7) Nun wollte ich alles in eine *.exe packen, damit der Code weder direkt sichtbar, noch editierbar ist.

Nach einer Recherche bin ich auf ps2exe (Version 1.0.13) gestoßen. Das hat auch super funktioniert, nur bricht die Ausführung beim Programmteil ab, bei dem ich "-AsArray" nutze (siehe Bild):
"Es wurde kein Parameter gefunden, der dem Parameternamen "AsArray" entspricht.

Benutzt wird es nur an dieser Stelle:

$value_Json = $value_Base64Array | ConvertTo-Json -AsArray
Invoke-RestMethod -Uri $url -Method Put -Body $value_Json -ContentType 'application/json' -UseDefaultCredentials  

Ich bin mir nicht sicher, welche .NET Version ps2exe nutzt, aber eigentlich doch die Version, welche auch mein Skript nutzt.
AsArray gibt es scheinbar ja noch nicht so lange...

Kennt jemand das Problem bzw. eine Lösung?
Einen Workaround ohne "-AsArray" habe ich leider bisher nicht finden können.

Vielen Dank im Voraus, für Lösungen wäre ich seeehr dankbar!

Grüße
asarray

Content-Key: 23084184646

Url: https://administrator.de/contentid/23084184646

Printed on: June 20, 2024 at 23:06 o'clock

Mitglied: 12764050420
Solution 12764050420 Apr 29, 2024 updated at 14:21:44 (UTC)
Goto Top
Hi.
Einen Workaround ohne "-AsArray" habe ich leider bisher nicht finden können.
Das packt ja alles nur in Square-Brackets für ein Array. Einfach stattdessen so schreiben, kommt das selbe bei raus, dann brauchst du -AsArray nicht (den gibt es erst ab PS Version 7):
$value_Json = $value_Base64Array | ConvertTo-Json
Invoke-RestMethod -Uri $url -Method Put -Body "[$value_Json]" -ContentType 'application/json' -UseDefaultCredentials    
Gruß schrick
Member: DerWoWusste
DerWoWusste Apr 29, 2024 updated at 14:30:00 (UTC)
Goto Top
Nun wollte alles in eine *.exe packen, damit der Code weder direkt sichtbar, noch editierbar ist.
Du bist dir bewusst, dass dieser Schutz nicht existent ist, oder? Wenn man die exe mit dem Parameter -u (wenn ich mich nicht irre) startet, dann entpackt sich das Ganze zu der ursprünglichen .ps1
Edit: siehe @mbehrens: es ist -extract:<FILENAME>
Member: mbehrens
mbehrens Apr 29, 2024 at 14:17:21 (UTC)
Goto Top
Zitat von @DerWoWusste:

Nun wollte alles in eine *.exe packen, damit der Code weder direkt sichtbar, noch editierbar ist.
Du bist dir bewusst, dass dieser Schutz nicht existent ist, oder? Wenn man die exe mit dem Parameter -u (wenn ich mich nicht irre) startet, dann entpackt sich das ganze in zu der ursprünglichen .ps1

-extract:<FILENAME>
Member: North89
North89 Apr 29, 2024 at 14:34:53 (UTC)
Goto Top
Habe es ausprobiert - Funktioniert. Allerbesten Dank!!
Member: North89
North89 Apr 29, 2024 at 14:39:46 (UTC)
Goto Top
Zitat von @mbehrens:

Zitat von @DerWoWusste:

Nun wollte alles in eine *.exe packen, damit der Code weder direkt sichtbar, noch editierbar ist.
Du bist dir bewusst, dass dieser Schutz nicht existent ist, oder? Wenn man die exe mit dem Parameter -u (wenn ich mich nicht irre) startet, dann entpackt sich das ganze in zu der ursprünglichen .ps1

-extract:<FILENAME>

Ja, das ist ein kleiner Schutz gegen Anwender, nicht gegen Entwickler.
Gibt es denn eine bessere Möglichkeit?
Habe vorher mal mit Verschlüsselungen experimentiert (Invoke-Stealth). Das hat leider nicht funktioniert.
Member: DerWoWusste
DerWoWusste Apr 29, 2024 at 18:51:09 (UTC)
Goto Top
Gibt es denn eine bessere Möglichkeit?
Vielleicht. Sag mir, warum du es verstecken willst und was du versteckt. Oft ist ein Ausführen als Systemkonto die Lösung.
Member: North89
North89 Apr 30, 2024 at 08:31:10 (UTC)
Goto Top
Es werden Daten auf Geräte in der industriellen Produktion geschrieben - das soll nicht jeder machen können face-smile
Und wenn jemand das Skript recht einfach manipulieren kann, würde ich es schon gerne verhindern - zumindest so gut es geht...
Member: DerWoWusste
DerWoWusste Apr 30, 2024 at 08:47:05 (UTC)
Goto Top
Du hast ja meinen Voschlag gelesen: verwende das Systemkonto. Innerhalb einer Domäne kann das auch im Netzwerk handeln, hat lokal alle Zugriffsrechte und sollte somit alles lesen und schreiben können.
Mitglied: 12764050420
12764050420 Apr 30, 2024 updated at 09:05:23 (UTC)
Goto Top
Zitat von @North89:

Es werden Daten auf Geräte in der industriellen Produktion geschrieben - das soll nicht jeder machen können face-smile
Und wenn jemand das Skript recht einfach manipulieren kann, würde ich es schon gerne verhindern - zumindest so gut es geht...

Skript signieren und nur signierte Skripte erlauben. Credentials gehören auch niemals in Skripten gespeichert. Lass es dann über einen entsprechenden Service-Account ausführen je nach Aufgabe.
Member: North89
North89 Apr 30, 2024 at 09:38:34 (UTC)
Goto Top
Ja, das Skript wird signiert. Es wird aber vom Kunden auf deren Rechner ausgeführt. Daher hilft nur ein Schutz "innerhalb" des Skripts. Aber danke für den Kommentar!
Member: DerWoWusste
DerWoWusste Apr 30, 2024 at 10:37:19 (UTC)
Goto Top
Bitte immer auf alle Kommentare antworten, sonst wird nicht klar, ob ein Kommentar übersehen wurde.
Member: North89
North89 Apr 30, 2024 at 11:24:16 (UTC)
Goto Top
Zitat von @DerWoWusste:

Bitte immer auf alle Kommentare antworten, sonst wird nicht klar, ob ein Kommentar übersehen wurde.

Ist ok, danke.
Systemkonto klingt gut, ist aber wie geschrieben nicht möglich - da nicht in meiner Hand.
Werde versuchen das Skript zusätzlich zur exe zu verschlüsseln.