112timo
Goto Top

PS1 Skript in EXE

Hallo Leute,
wie der Tietel schon sagt, möchte ich ein PowerShell-Skript (.ps1) in eine funktionsfähige .exe kompilieren.

Bitte keine Online Konverter. Kann mir jemand sagen, wie ich das möglichst ohne konvertierungsprogramme anstelle (Virusgefahr, Datenklau...)

Für die die es Interessiert hier das Skript:
(ja die auskommentierten befehle müssen so sein, wegen unserem Azubi)
$pfad = Read-Host "Bitte den Speicherpfad eingeben" #Fragt den Speicherort vom Benutzer ab  

$dateiname = Read-Host "Bitte den Dateinamen eingeben" #Fragt den Dateinamen ab  

$datumzeit = get-date -Format "dd.MM.yyyy, HH:mm:ss" #Gibt Datum/Uhrzeit aus  

$pcname = $(Get-WmiObject Win32_Computersystem).name #Gibt den PC-Namen aus

$OSversion = [System.Environment]::OSVersion.Version #Gibt die OS-Version aus

$benutzer = $Env:USERNAME #Gibt den aktuell angemeldeten Benutzernamen aus

$domäne = $env:USERDNSDOMAIN #Gibt die aktuelle Domäne aus

$Laufwerk = Get-WmiObject -class win32_logicalDisk
ForEach ($Element in $Laufwerk){
if ($Element.DriveType -eq 3){
$Laufwerk2 = $Element.FreeSpace/1GB
$Laufwerk01 = $Element.Size/1GB
$Laufwerk4 = $Laufwerk01|Out-String
$Laufwerk3 = $Laufwerk2|Out-String
$frei = Write-Output ($Laufwerk3.SubString(0,5))
$gesamt = Write-Output ($Laufwerk4.SubString(0,5))
}
}
#Gibt den freien und den gesamten Festplattenspeicher an


$internetverbindung = if (Test-Connection 213.183.81.10 -BufferSize 16 -Count 1 -Quiet) { Write-output aktiv} else {Write-Output inaktiv} #Gibt an, ob eine Internetverbindung besteht 


#$internetverbindung = (Resolve-DnsName www.cc-net.ag).ip4address
#$domäne = [Environment]::UserDomainName
#$benutzer = [Environment]::UserName
#$speicher = Get-WMIObject Win32_LogicalDisk -filter "name='c:'" | select name, freespace 
#$speicher = gwmi Win32_LogicalDisk -Computer $pcname | ForEach {$_.name, [math]::truncate($_.freespace / 1GB)}
#$internetverbindung = Test-NetConnection 213.183.81.10 | select Pingsucceeded
#New-item c:\PC-Info\$date.txt -force -value "$Titel `r`n`r`nComputername:          $pcname`r`n`r`nWindowsversion:        $OSversion`r`n`r`nangemeldeter Benutzer: $benutzer`r`n`r`nDomäne:                $domäne`r`n`r`nInternetverbindung:    $internetverbindung`r`n`r`n$speicher"  




New-item $pfad/$dateiname.txt -force -value "  
_______________________________________________________________
                         |
Datum, Uhrzeit           | $datumzeit
_________________________|_____________________________________
                         |                       
Computername:            | $pcname               
_________________________|_____________________________________
                         |                       
Windowsversion:          | $OSversion            
_________________________|_____________________________________
                         |                       
angemeldeter Benutzer:   | $benutzer             
_________________________|_____________________________________
                         |                       
Domäne:                  | $domäne               
_________________________|_____________________________________
                         |                       
Internetverbindung:      | $internetverbindung   
_________________________|_____________________________________
                         |                       
Speicher in C:/          | $gesamt GB gesamt, $frei GB frei      
_________________________|_____________________________________
"   


$mail = Read-Host "Soll die Datei per E-Mail versendet werden? (ja/nein)"  

switch ($mail){
ja {
$absender = Read-Host "Bitte den Absender eingeben"  
$empfänger = Read-Host "Bitte den Empfänger eingeben"  
$server = Read-Host "Bitte den SMTP-Server eingeben"  
$betreff = Read-Host "Bitte den Betreff eingeben"  
$text = Read-Host "Bitte einen E-Mailtext eingeben"  
}
nein {exit}
}
#Fragt die nötigen infos zur Mail vom Benutzer ab


Send-MailMessage -From "$absender" -to "$empfänger" -Subject "$betreff" -Body "$text" -SmtpServer "$server" -Credential "$absender" -UseSSL -Port 587 -Attachments "$pfad/$dateiname.txt"  

Gruß Timo

Content-ID: 307703

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

Ausgedruckt am: 17.11.2024 um 07:11 Uhr

atze187
Lösung atze187 20.06.2016 um 13:19:01 Uhr
Goto Top
Hi Timo,

Powershell wird nicht kompiliert. Um das Skript in eine exe umzuwandeln musst du entweder eine eigene Anwendung schreiben die den Skript-Code enthält und diese dann per Powershell ausführt oder eine Programm genau diese Funktion schon bietet. Ersteres ist mit Visual Studio kein Problem, aber ich würde aus Bequemlichkeit zweitens bevorzugen: PS2Exe

Gruß,
André
SaschaRD
Lösung SaschaRD 20.06.2016 um 13:41:44 Uhr
Goto Top
Hallo @112Timo,

installiere dir den PowerGUI Script Editor der hat die Funktionalität bereits implementiert, um dein geschriebenes Script zu einer .exe Datei zu kompilieren.

Gruß, Sascha
129813
129813 20.06.2016 aktualisiert um 13:59:41 Uhr
Goto Top
Hi.
Running Powershell-Skripts or Batch in EXE-Wrappers is always very bad practice. First most Anti-Virus engines will fire up if they see such a wrapper, second hiding sensitive information is not protected in such programs. And much more flaws ...

Conclusion: Write a normal program in c# or vb.net etc.

Regards
112Timo
112Timo 20.06.2016 um 14:06:03 Uhr
Goto Top
Danke Leute ich hab es hinbekommen.

@129813: This script is for my company so we can add this to the Whitelist of our Anti-Virus engine.