internet2107
Goto Top

Powershell - Ausgabe des Codes als Text

Hallo zusammen.
Ich arbeite mit der Software Powershell Studio. Mit dieser scripte ich viel, am Ende kommt eine .exe-Datei heraus.
Das funktioniert auch soweit immer problemlos.
Nun wurde aber die Frage gestellt, ob man nicht per Knopfdruck eine Eigenschaft einschalten kann, dass die Vorgehensweise innerhalb der .exe Datei auch sichtbar gemacht werden kann?
Im Klartext möchte man also nach Wunsch auch die Ausgabe des Codes haben, der zum Beispiel abläuft, wenn man einen Button drückt.

Als Beispiel nehmen wir mal einen Button, der die Aufgabe hat, alle Services auf einem Remotecomputer zu sammeln, diese in einer .xls Datei zu exportieren, anschließend diese Datei auf den lokalen Computer kopiert.
Das läuft innerhalb der .exe Datei als "BlackBox" ab. Es erfüllt seinen Zweck, aber wenn jemand sehen will welcher Code dahinterhängt, hat er Pech.
Gibt es eine Möglichkeit zu sagen:
"während du den Code ausführst, schreibe gleichzeitig deinen Code in eine Textdatei..."?

Praktisch ein Logging mit allem was er macht und tut...

Content-Key: 340804

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

Ausgedruckt am: 19.03.2024 um 04:03 Uhr

Mitglied: H41mSh1C0R
H41mSh1C0R 16.06.2017 um 06:56:48 Uhr
Goto Top
Servus,

wenn du den "Quelltext" hast und solch ein Logging brauchst baue es einfach ein und hänge es an eine Option.

Hast du nur die Exe dann such den der die Exe gebaut hat und bitte ihn das Logging einzubauen. =)

VG
Mitglied: internet2107
internet2107 16.06.2017 um 07:26:52 Uhr
Goto Top
Ich brauche so etwas wie Start-Transscript .... Stop-Transscript.
Problem bei Transscript ist aber, dass ich dafür
a) Framework 5.0 auf jedem Rechner installiert haben muss
b) Transscript praktisch nur die Fehler loggt.

Ja, natürlich habe ich den Quelltext.
Mitglied: 133417
133417 16.06.2017 um 09:02:22 Uhr
Goto Top
Zitat von @internet2107:

Ich brauche so etwas wie Start-Transscript .... Stop-Transscript.
Problem bei Transscript ist aber, dass ich dafür
a) Framework 5.0 auf jedem Rechner installiert haben muss
Das ist natürlich Blödsinn. Die CMDlets gibt's seit PS 3.0.

b) Transscript praktisch nur die Fehler loggt.
https://serverfault.com/questions/102098/powershell-script-showing-comma ...

Gruß
Mitglied: internet2107
internet2107 16.06.2017 um 09:32:09 Uhr
Goto Top
Danke, aber auch das ist leider nicht das, was ich suche.
Set-PSDebug -Trace 1
produziert eine ganze Menge "Sondermüll", der überflüssig ist
Mitglied: 133417
133417 16.06.2017 aktualisiert um 09:56:13 Uhr
Goto Top
Zitat von @internet2107:
Ja, natürlich habe ich den Quelltext.
Dann gebe ihn aus, fertig. Du hast ihn, also kannst du ihn auch z.B. in ein Array/Hashtable schreiben und bei Bedarf ausgeben.
So eine Funktion die du suchst gibt es nicht.

BTW. Powershell als Exe verpackt?? Da nimmt man doch besser gleich c# und ist unabhängig von der Shell...
Mitglied: 133417
Lösung 133417 16.06.2017 aktualisiert um 15:04:49 Uhr
Goto Top
Ein Beispiel wäre folgendes:
Das zeigt für jeden Button der Form den jeweiligen Inhalt des Click-Eventhandlers als Tooltip an wenn man die Maus über den Button hovert. Steuern lässt sich die Anzeige über die Bool-Variable $showCodeInTooltip.
function GenerateForm {

#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null  
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null  
#endregion

#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$btn3 = New-Object System.Windows.Forms.Button
$btn2 = New-Object System.Windows.Forms.Button
$btn1 = New-Object System.Windows.Forms.Button
$toolTip1 = New-Object System.Windows.Forms.ToolTip
$tooltip1.IsBalloon = $true
$tooltip1.ShowAlways = $true
$tooltip1.ToolTipTitle = "Source-Code behind Control"  

$showCodeInToolTip = $true

$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects

$handler_btn1_Click= {
    [System.Windows.Forms.MessageBox]::Show("Playing guitar")  
}

$handler_btn2_Click= {
    [System.Windows.Forms.MessageBox]::Show("Playing piano")  
}
$handler_btn3_Click= {
    [System.Windows.Forms.MessageBox]::Show("Playing drums")  
}

$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
	$form1.WindowState = $InitialFormWindowState
}

#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 48
$System_Drawing_Size.Width = 254
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.Name = "form1"  
$form1.Text = "Show Code Demo"  

$btn3.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 174
$System_Drawing_Point.Y = 12
$btn3.Location = $System_Drawing_Point
$btn3.Name = "btn3"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btn3.Size = $System_Drawing_Size
$btn3.TabIndex = 2
$btn3.Text = "Play drums"  
$btn3.UseVisualStyleBackColor = $True
$btn3.add_Click($handler_btn3_Click)

$form1.Controls.Add($btn3)

$btn2.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 93
$System_Drawing_Point.Y = 12
$btn2.Location = $System_Drawing_Point
$btn2.Name = "btn2"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btn2.Size = $System_Drawing_Size
$btn2.TabIndex = 1
$btn2.Text = "Play piano"  
$btn2.UseVisualStyleBackColor = $True
$btn2.add_Click($handler_btn2_Click)

$form1.Controls.Add($btn2)


$btn1.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 12
$btn1.Location = $System_Drawing_Point
$btn1.Name = "btn1"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btn1.Size = $System_Drawing_Size
$btn1.TabIndex = 0
$btn1.Text = "Play guitar"  
$btn1.UseVisualStyleBackColor = $True
$btn1.add_Click($handler_btn1_Click)

$form1.Controls.Add($btn1)


if ($showCodeInToolTip){
    $form1.Controls | ?{$_.GetType().Name -eq "Button"} | %{  
        $tooltip1.SetToolTip($_,(iex -Command "`$handler_$($_.Name)_Click"))  
    }
}

#endregion Generated Form Code

#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null

} #End Function

#Call the Function
GenerateForm
Gruß
Mitglied: internet2107
internet2107 16.06.2017 um 15:03:31 Uhr
Goto Top
Danke erstmal. Werde ich gleich mal ausprobieren, wenn ich Zeit habe.
Mitglied: internet2107
internet2107 16.06.2017 um 18:32:59 Uhr
Goto Top
Deine Idee war die Richtige. Danke. Musste etwas umstricken, aber genau das habe ich gesucht.
Danke und ein schönes Wochenende.
Mitglied: 133417
Lösung 133417 16.06.2017 um 18:51:34 Uhr
Goto Top
Ebenso ein gut's WE.