PS2EXE - Powershell Komut Dosyalarını Yürütülebilir Dosyalara Derlemek İçin Modül

 PS2EXE - Powershell Komut Dosyalarını Yürütülebilir Dosyalara Derlemek İçin Modül



GUI desteği ile Ingo Karstein'ın harika senaryosunun fazla çalışması. GUI çıkışı ve girişi tek bir anahtarla etkinleştirilir, gerçek Windows yürütülebilir dosyaları oluşturulur. Powershell 5.x desteği ve grafik ön uç ile.

Modül versiyonu.

Komut dosyası tabanlı sürümü burada ( https://github.com/MScholtes/TechNet-Gallery ) ve burada bulabilirsiniz: PS2EXE-GUI: PowerShell Komut Dosyalarını GUI ile EXE Dosyalarına "Dönüştür" .

Yazar: Markus Scholtes

Sürüm: 1.0.10

Tarih: 2021-04-10


PS C:\> Install-Module ps2exe

(Powershell V4'te daha önce PowershellGet'i yüklemeniz gerekebilir) veya buradan indirin: https://www.powershellgallery.com/packages/ps2exe/ .

 Invoke-ps2exe .\source.ps1 .\target.exe

veya

ps2exe .\source.ps1 .\target.exe

"source.ps1" dosyasını yürütülebilir target.exe dosyasında derler (".\target.exe" atlanırsa, çıktı ".\source.exe" dosyasına yazılır).

veya grafiksel bir ön uç için Win-PS2EXE'yi başlatın.

 Win-PS2EXE

Prametre

 ps2exe [-inputFile] '<file_name>' [[-outputFile] '<file_name>'] [-prepareDebug]
       [-x86|-x64] [-lcid <id>] [-STA|-MTA] [-noConsole] [-UNICODEEncoding]
       [-credentialGUI] [-iconFile '<filename>'] [-title '<title>'] [-description '<description>']
       [-company '<company>'] [-product '<product>'] [-copyright '<copyright>'] [-trademark '<trademark>']
       [-version '<version>'] [-configFile] [-noOutput] [-noError] [-noVisualStyles] [-requireAdmin]
       [-supportOS] [-virtualize] [-longPaths]

hata ayıklama x86 veya x64 = yalnızca 32 bit veya 64 bit çalışma zamanı için derleme lcid = derlenmiş yürütülebilir dosya için konum kimliği. Geçerli kullanıcı kültürü belirtilmemişse STA veya MTA = 'Single Thread Apartment' veya 'Multi Thread Apartment' modu noConsole = elde edilen yürütülebilir dosya konsol penceresi olmayan bir Windows Forms uygulaması olacaktır UNICODEEncoding = konsol modunda çıktıyı UNICODE olarak kodlayın credentialGUI = GUI kullan kimlik bilgilerini istemek içinkonsol modunda iconFile = derlenmiş yürütülebilir dosya için simge dosyası adı = başlık bilgisi (Windows Gezgini'nin özellikler iletişim kutusunun ayrıntılar sekmesinde görüntülenir) açıklama = açıklama bilgisi (görüntülenmez, ancak yürütülebilir dosyaya gömülüdür) şirket = şirket bilgisi (görüntülenmez, ancak gömülüdür) yürütülebilir dosyada) ürün = ürün bilgisi (Windows Gezgini'nin özellikler iletişim kutusunun ayrıntılar sekmesinde görüntülenir) telif hakkı bilgisi (Windows Gezgini'nin özellikler iletişim kutusunun ayrıntılar sekmesinde görüntülenir) ticari marka = ticari marka bilgisi (Windows Gezgini'nin özellikler iletişim kutusunun ayrıntılar sekmesinde görüntülenir) sürüm = sürüm bilgisi (Windows Gezgini'nin özellikler iletişim kutusunun ayrıntılar sekmesinde görüntülenir) configFile = config dosyası yaz (<outputfile>.exe.config) noOutput = elde edilen yürütülebilir dosya standart bir çıktı üretmeyecek (ayrıntılı ve bilgi kanalını içerir) noError = elde edilen yürütülebilir dosya hiçbir hata çıktısı üretmeyecek (uyarı ve hata ayıklama kanalını içerir) noVisualStyles = oluşturulan bir Windows GUI uygulaması için görsel stilleri devre dışı bırak ( yalnızca -noConsole ile) requireAdmin = UAC etkinse, derlenmiş yürütülebilir dosya yalnızca yükseltilmiş bağlamda çalışır (gerekirse UAC iletişim kutusu görünür) supportOS = en yeni Windows sürümlerinin işlevlerini kullanın (farkı görmek için [Environment]::OSVersion'ı çalıştırın) virtualize = applicationconfig) noOutput = elde edilen yürütülebilir dosya standart bir çıktı üretmeyecek (ayrıntılı ve bilgi kanalını içerir) noError = elde edilen yürütülebilir dosya hiçbir hata çıktısı üretmeyecek (uyarı ve hata ayıklama kanalını içerir) noVisualStyles = oluşturulan bir Windows GUI uygulaması için görsel stilleri devre dışı bırak (yalnızca -noConsole) requireAdmin = UAC etkinse, derlenmiş yürütülebilir dosya yalnızca yükseltilmiş bağlamda çalışır (gerekirse UAC iletişim kutusu görünür) supportOS = en yeni Windows sürümlerinin işlevlerini kullanın (farkı görmek için [Environment]::OSVersion'ı çalıştırın) virtualize = applicationconfig) noOutput = elde edilen yürütülebilir dosya standart bir çıktı üretmeyecek (ayrıntılı ve bilgi kanalını içerir) noError = elde edilen yürütülebilir dosya hiçbir hata çıktısı üretmeyecek (uyarı ve hata ayıklama kanalını içerir) noVisualStyles = oluşturulan bir Windows GUI uygulaması için görsel stilleri devre dışı bırak (yalnızca -noConsole) requireAdmin = UAC etkinse, derlenmiş yürütülebilir dosya yalnızca yükseltilmiş bağlamda çalışır (gerekirse UAC iletişim kutusu görünür) supportOS = en yeni Windows sürümlerinin işlevlerini kullanın (farkı görmek için [Environment]::OSVersion'ı çalıştırın) virtualize = applicationderlenmiş yürütülebilir dosya yalnızca yükseltilmiş bağlamda çalışır (gerekirse UAC iletişim kutusu görünür) supportOS = en yeni Windows sürümlerinin işlevlerini kullanın (farkı görmek için [Environment]::OSVersion'ı çalıştırın) virtualize = applicationderlenmiş yürütülebilir dosya yalnızca yükseltilmiş bağlamda çalışır (gerekirse UAC iletişim kutusu görünür) supportOS = en yeni Windows sürümlerinin işlevlerini kullanın (farkı görmek için [Environment]::OSVersion'ı çalıştırın) virtualize = applicationsanallaştırma etkinleştirilir (x86 çalışma zamanını zorlar) longPaths = OS'de etkinleştirilmişse uzun yolları etkinleştir (> 260 karakter) (yalnızca Windows 10 ile çalışır) ">

 inputFile = Powershell script that you want to convert to executable (file has to be UTF8 or UTF16 encoded)
     outputFile = destination executable file name or folder, defaults to inputFile with extension '.exe'
   prepareDebug = create helpful information for debugging    
     x86 or x64 = compile for 32-bit or 64-bit runtime only
           lcid = location ID for the compiled executable. Current user culture if not specified
     STA or MTA = 'Single Thread Apartment' or 'Multi Thread Apartment' mode
      noConsole = the resulting executable will be a Windows Forms app without a console window
UNICODEEncoding = encode output as UNICODE in console mode
  credentialGUI = use GUI for prompting credentials in console mode
       iconFile = icon file name for the compiled executable
          title = title information (displayed in details tab of Windows Explorer's properties dialog)
    description = description info   rmation (not displayed, but embedded in executable)
        company = company information (not displayed, but embedded in executable)
        product = product information (displayed in details tab of Windows Explorer's properties dialog)
      copyright = copyright information (displayed in details tab of Windows Explorer's properties dialog)
      trademark = trademark information (displayed in details tab of Windows Explorer's properties dialog)
        version = version information (displayed in details tab of Windows Explorer's properties dialog)
     configFile = write config file (<outputfile>.exe.config)
       noOutput = the resulting executable will generate no standard output (includes verbose and information channel)
        noError = the resulting executable will generate no error output (includes warning and debug channel)
 noVisualStyles = disable visual styles for a generated windows GUI application (only with -noConsole)         
   requireAdmin = if UAC is enabled, compiled executable run only in elevated context (UAC dialog appears if required)
      supportOS = use functions of newest Windows versions (execute [Environment]::OSVersion to see the difference)
     virtualize = application virtualization is activated (forcing x86 runtime)
      longPaths = enable long paths ( > 260 characters) if enabled on OS (works only with Windows 10)

Oluşturulan bir yürütülebilir dosya aşağıdaki ayrılmış parametrelere sahiptir:


-debug              Forces the executable to be debugged. It calls "System.Diagnostics.Debugger.Launch()".
-extract:<FILENAME> Extracts the powerShell script inside the executable and saves it as FILENAME.
                    The script will not be executed.
-wait               At the end of the script execution it writes "Hit any key to exit..." and waits for a key to be pressed.
-end                All following options will be passed to the script inside the executable.
                    All preceding options are used by the executable itself and will not be passed to the script.





Açıklamalar

Uygulanmayan cmdlet'lerin listesi:
Temel giriş/çıkış komutlarının PS2EXE için C# ile yeniden yazılması gerekiyordu. Değil vardır uygulanan Yaz-İlerleme konsol modunda (çok fazla iş) ve Start-Transkript / Durdur-Transkript (Microsoft tarafından hiçbir uygun referans uygulaması).


GUI modu çıktı biçimlendirmesi:
Powershell'de varsayılan olarak komutların çıktıları satır başına (bir dizi dizi olarak) biçimlendirilir. Komutunuz 10 satır çıktı ürettiğinde ve GUI çıktısını kullandığınızda, her biri bir OK bekleyen 10 mesaj kutusu görünecektir. Bu boruyu önlemek için komutunuzu Out-String komut satırına iletin. Bu, çıktıyı 10 satırlık bir dize dizisine dönüştürür, tüm çıktılar tek bir mesaj kutusunda gösterilir (örneğin: dir C:\ | Out-String).


Yapılandırma dosyaları:
PS2EXE, oluşturulan yürütülebilir dosyanın adı + ".config" ile yapılandırma dosyaları oluşturabilir. Çoğu durumda bu yapılandırma dosyaları gerekli değildir, hangi .Net Framework sürümünün kullanılması gerektiğini söyleyen bir bildirimdir. Genellikle gerçek .Net Çerçevesini kullanacağınız için, yürütülebilir dosyanızı yapılandırma dosyası olmadan çalıştırmayı deneyin.


Parametre işleme:
Derlenmiş komut dosyaları, orijinal komut dosyası gibi parametreleri işler. Windows ortamından bir kısıtlama gelir: tüm yürütülebilir dosyalar için tüm parametreler STRING türündedir, parametre türünüz için örtük bir dönüştürme yoksa, komut dosyanızda açıkça dönüştürmeniz gerekir. Hatta içeriği aynı kısıtlamayla yürütülebilir dosyaya yönlendirebilirsiniz (tüm borulu değerler STRING türündedir).


Şifre güvenliği:
Derlenmiş komut dosyanızda asla parola saklamayın! -extract parametresiyle betiğin derlenmesi basitçe yapılabilir. Örneğin

Output.exe -extract:C:\Output.ps1

Çıktı.exe'de depolanan komut dosyasını ayrıştırır.


Komut dosyası değişkenleri:
PS2EXE bir komut dosyasını yürütülebilir bir dosyaya dönüştürdüğünden, komut dosyasıyla ilgili değişkenler artık mevcut değildir. Özellikle $PSScriptRoot değişkeni boş.

$MyInvocation değişkeni, bir komut dosyasındakinden başka değerlere ayarlanmıştır.

Aşağıdaki kodla derlenmiş/derlenmemiş komut dosyası/yürütülebilir yolu alabilirsiniz (JacquesFS sayesinde):


if ($MyInvocation.MyCommand.CommandType -eq "ExternalScript")
 { $ScriptPath = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition }
 else
 { $ScriptPath = Split-Path -Parent -Path ([Environment]::GetCommandLineArgs()[0]) 
     if (!$ScriptPath){ $ScriptPath = "." } }

-noConsole modunda arka planda pencere:
-noConsole modu olan bir komut dosyasında (yani Get-Credential için veya cmd.exe kabuğu gerektiren bir komut için) harici bir pencere açıldığında, bir sonraki pencere arka planda açılır.

Bunun nedeni, dış pencere kapatıldığında ana pencereyi etkinleştirmeye çalışmasıdır. Derlenmiş komut dosyasının penceresi olmadığından, bunun yerine derlenmiş komut dosyasının üst penceresi, normalde Explorer veya Powershell penceresi etkinleştirilir.

Bu sorunu çözmek için $Host.UI.RawUI.FlushInputBuffer() etkinleştirilebilen görünmez bir pencere açar. Aşağıdaki $Host.UI.RawUI.FlushInputBuffer() çağrısı bu pencereyi kapatır (ve böyle devam eder).

Aşağıdaki örnek, tek bir "ipconfig | Out-String" çağrısı yapacağından artık arka planda bir pencere açmayacaktır:

$Host.UI.RawUI.FlushInputBuffer()
ipconfig | Out-String
$Host.UI.RawUI.FlushInputBuffer()


Değişiklikler:

1.0.10 / 2021-04-10
outputFile parametresi artık bir hedef klasörü kabul ediyor (dosya adı olmadan)

1.0.9 / 2021-02-28
UNICODE olarak çıktı alınacak yeni UNICODEEncoding parametresi
parametre hata ayıklamasını hazırlaDebug olarak değiştirdi
sonunda gelişmiş parametreleri kullanmaya cesaret etti

1.0.8 / 2020-10-24
yeniden düzenlenmiş

1.0.7 / 2020-08-21
tek bir işlem hattında eşzamanlı ilerleme çubukları için hata düzeltmesi

1.0.6 / 2020-08-10
seçim istemi artık Powershell gibi davranıyor (yalnızca konsol modu)
(sınırlı) Powershell Core desteği (arka planda Windows Powershell'i başlatır)
negatif parametre değerlerinin sabit işlenmesi
animasyonlu ilerleme çubukları desteği (yalnızca noConsole modu)

1.0.5 / 2020-07-11
iç içe ilerleme çubukları desteği (yalnızca noConsole modu)

1.0.4 / 2020-04-19
GUI uygulamaları için varsayılan olarak Application.EnableVisualStyles(), bunu önlemek için yeni parametre -noVisualStyles

1.0.3 / 2020-02-15
git diff'e izin vermek için dosyaları UTF-16'dan UTF-8'e dönüştürdü

konsol modunda güvenli dize isteğinde kontrol tuşlarını yoksay


1.0.2 / 2020-01-08
github'a eklenen örnekler

1.0.1 / 2019-12-16
ps2exe.ps1 ve Win-PS2EXE'de "GUI pencereleri için sınırsız pencere genişliği" sorunu düzeltildi

1.0.0 / 2019-11-08
ilk kararlı modül versiyonu

0.0.0 / 2019-09-15
deneysel



Daha yeni Daha eski

POST ADS1

POST ADS 2