bn2023
Goto Top

Schriftgröße in PS-Script anpassen

Hallo,

durch die Hilfe hier aus dem Forum und ein bisschen weiterer Recherche im Internet, habe ich nun ein PS-Script, in dem u.a. auch Meldungen ausgegeben werden (hier auch nochmal danke an @colinardo).

Da der Hintergrund des sich öffnenden Fensters in dunkelblau ist, habe ich die Schriftfarbe bereits auf "Yellow", bzw. "Cyan" angepaßt mit dem Befehl

-F Cyan
-F Yellow

Die Schrift wird auch korrekt in dieser Farbe ausgegeben.
Nun suche ich eine Möglichkeit, auch die Schriftgröße der ausgegebenen Meldungen anzupassen. Leider finde ich hierzu meist nur Angaben, wie man die eigentliche PS-Console anpassen kann, aber nicht die Schriftgröße für eine Ausgabe im Script.

Folgender Versuch hat nicht funktioniert:

write-host "Exportiere Daten aus Scan von '$($Env:username)' ... " -F Cyan .fontSize = 20 -NoNewline  

Diesen Zusatz für die Schriftgröße hatte ich bei meiner Suche im Internet irgendwo gefunden, aber ich war ehrlich gesagt, auch schon skeptisch, ob das funktionieren kann...

Es wäre toll, wenn mir jemand weiterhelfen könnte.

Grüße,
BN

Content-ID: 668983

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

Ausgedruckt am: 21.11.2024 um 12:11 Uhr

Kraemer
Kraemer 24.10.2024 aktualisiert um 09:02:15 Uhr
Goto Top
Moin,

imho ist deine Suche hier nun beendet. Wie für Konsolen üblich, gibt es nur einen Font in einer Größe. Wenn du mehr brauchst, musst du dich mit WinForms beschäftigen.

Gruß

PS: Es gibt ne nette Trickserei, die zumindest Fett-Schrift verspricht: https://rogierdijkman.medium.com/use-bold-font-in-write-host-b4b8155a820 ...
Aber auch hier wird faktisch nur mit der Farbe gespielt und der Eindruck erzeugt, dass es sich um Fett-Schrift handelt
BN2023
BN2023 24.10.2024 aktualisiert um 09:12:42 Uhr
Goto Top
OK und danke Dir @Kraemer

Werde mir den Inhalt des Links gleich mal anschauen.
Schade dass man die Schriftgröße der ausgegebenen Meldungen im PS-Fenster nicht anpassen kann. Aber dann ist das eben so.

Wenn ich das aus meinen Recherchen im Internet richtig verstanden habe, kann man also nur die Schriftgröße insgesamt anpassen... also für die Console. Richtig?
Dann würde ich mal darüber nachdenken, ob ich das nicht mal versuche.
Aber da gibts offenbar auch verschiedene Wege. Welcher wäre dann der Beste?

Grüße,
BN
150704
150704 24.10.2024 aktualisiert um 10:43:05 Uhr
Goto Top
Wozu noch auf der Konsole rum fleuchen wenn du doch das ganze Arsenal der Windows Forms zur Verfügung hast
Add-Type -A System.Windows.Forms
Add-Type -A System.Drawing
$form = New-Object System.Windows.Forms.Form -P @{
    Text = "Meldung"  
    Size = '400,200'  
    StartPosition = 'CenterScreen'  
    MaximizeBox = $false
    MinimizeBox = $false
    FormBorderStyle = 'FixedDialog'  
    add_Load = {
        $timer.Start()
    }
    add_Closed = {
        $timer.Stop()
        $timer.Dispose()
    }
}
$lbl = New-Object System.Windows.Forms.Label -P @{
    Dock = 'Fill'  
    TextAlign = 'MiddleCenter'  
    Text = "Hallo das ist ein Test`n(Dialog schließt nach 3 Sekunden)"  
    Font = [System.Drawing.Font]::New('Calibri',18,[System.Drawing.FontStyle]::Bold)  
}
$timer = New-Object System.Windows.Forms.Timer -P @{
    Interval = 3000
    add_Tick = {
        $form.Close()
    }
}
$form.Controls.Add($lbl)
[void]$form.ShowDialog()
Wenn du also Klick-Bunti brauchst ist das dein Weg.
BN2023
BN2023 24.10.2024 aktualisiert um 12:09:15 Uhr
Goto Top
Danke Dir @150704

Ich habe den Sinn dieses Codes jedoch noch nicht wirklich verstanden face-wink
Muss ich das einmalig ausführen und - wenn ja - wie kann ich das dann z.B. in meinem Script nutzen?
Oder kommt Dein Code in mein Script (.ps1) mit rein?

Oder reicht es vielleicht sogar aus, den folgenden Code-Abschnitt irgendwo (wo?) in mein .ps1-Script einzubauen:

$lbl = New-Object System.Windows.Forms.Label -P @{
    Font = [System.Drawing.Font]::New('Calibri',18,[System.Drawing.FontStyle]::Bold)    

Ich suche ja eine Möglichkeit mein vorhandenes Script so anzupassen, dass die Abfrage, die im Fenster erscheint, einfach eine etwas größere Schrift hat.

Dort wird folgendes abgefragt:

"Bitte hier die ID-Nummer angeben:"

oder

"Exportiere Daten aus Scan von Max Müller..."

Und diese Sätze sollen einfach etwas größer erscheinen.

Grüße,
BN
150704
150704 24.10.2024 aktualisiert um 12:17:48 Uhr
Goto Top
ch habe den Sinn dieses Codes jedoch noch nicht wirklich verstanden
Einfach ausführen und du siehst was passiert face-smile. Heut schon wieder Freitag ...
Lesen & Lernen
BN2023
BN2023 24.10.2024 aktualisiert um 12:24:32 Uhr
Goto Top
hahaha, nö, Donnerstag face-smile

Habe es soeben mal getestet und es erschien ein kleines Fenster mit großer Schrift "Hallo das ist ein Test", welches nach 3 Sekunden wieder zu ging.

Vielleicht habe ich es ja auch schlecht erklärt im Eingangs-Post.

In meinem Fall ist es ja so, dass ein Script abläuft (.ps1), in dem Daten aus einer PDF-Datei in bestimmte Spalten einer Excel-Datei übertragen werden.
Dabei wird dann halt als Erstes die ID-Nummer abgefragt. Dazu erscheint dann eben ein Fenster (blauer Hintergrund, Schrift in Cyan od. Gelb), in dem die Abfrage steht "Bitte hier die ID-Nummer eingeben... Dann ENTER drücken:".

Über dieser Abfrage steht dann noch "Exportiere Daten aus Scan von Max Müller..."

Ansonsten steht in dem Fenster auch nix weiter drin und es schließt sich dann auch wieder.
Und nur diese beiden Sätze sollen eben in größerer Schrift sein.

Wie kann ich denn Deinen Code (od. Teile davon) dort so mit einbauen, dass das funktioniert?

Grüße,
BN
150704
Lösung 150704 24.10.2024 aktualisiert um 12:36:23 Uhr
Goto Top
Add-Type -A System.Windows.Forms
Add-Type -A System.Drawing
$form = New-Object System.Windows.Forms.Form -P @{
    Text = "Exportiere Daten aus Scan von Max Müller..."    
    Size = '400,150'    
    StartPosition = 'CenterScreen'    
    MaximizeBox = $false
    MinimizeBox = $false
    FormBorderStyle = 'FixedDialog'  
}
$lbl = New-Object System.Windows.Forms.Label -P @{
    Location = '10,10'  
    Size = '380,30'  
    Text = "Bitte hier die ID-Nummer eingeben:"  
    Font = [System.Drawing.Font]::New('Calibri',15,[System.Drawing.FontStyle]::Bold)  
}
$inputbox = New-Object System.Windows.Forms.TextBox -P @{
    Location = '10,40'  
    Size = '300,30'  
}
$btnOK = New-Object System.Windows.Forms.Button -P @{
    Text = "OK"  
    Location = '300,80'  
    Size = '80,30'  
    add_Click = {
        if($inputbox.Text -eq ''){  
            [System.Windows.Forms.MessageBox]::Show("Die ID darf nicht leer sein!","Fehler",0,48)  
        }else{
            $form.Close()
        }
    }
}
$form.Controls.AddRange(@($lbl,$inputbox,$btnOK))
[void]$form.ShowDialog()
$id = $inputbox.Text
"Die ID lautet: $id"  

# mach hier weiter mit der ID
BN2023
BN2023 24.10.2024 aktualisiert um 13:25:26 Uhr
Goto Top
oh, vielen Dank. Das funktioniert schon mal echt gut @150704

Du schreibst im Code "# mach hier weiter mit der ID".

In meinem PS-Script wird die eingegebene ID ja dann in eine Excel-Datei übertragen.
Das geschieht durch den folgenden Code:

$eingabe=""  
      $eingabe = Read-Host `n`n 'Bitte ID-Nummer eingeben - dann ENTER drücken '  
      $ws.Cells($lRow, 1).Value = $eingabe

Wenn ich Dich richtig verstehe, sollte Dein gesamter Code von oben dann direkt über den hier von mir einkopierten Code gesetzt werden?
Aber... wie gelangt denn die ID-Nummer dann über meinen Code (siehe Box) in das Excel-Formular. Da muss doch eine Verbindung hergestellt werden... face-wink

Ich nehme mal an, dass ich "$eingabe" aus meinem Code dann einfach durch "$id" ersetzen sollte. Aber dann würde der Text aus meinem Code ja dort auch nochmal erscheinen.

Irgendwie habe ich den Zusammenhang noch nicht kapiert... also wie jetzt die aus Deinem Code ermittelte ID-Nummer (ist ja wohl $id) dann nach Excel übertragen wird mit "$ws.Cells($lRow, 1).Value = $eingabe" (bzw. $id).

Hier mal die beiden entspr. Code-Teile aus meinem Script:

# Ausgabemeldung im PS-Fenster nach Ausführen des PS-Scriptes
      write-host "Exportiere Daten aus dem Scanordner von '$($Env:username)' ... " -F Cyan -NoNewline  

# Übertragung der ID-Nummer nach Excel!
      $eingabe=""  
      $eingabe = Read-Host `n`n 'Bitte ID-Nummer eingeben - dann ENTER drücken '  
      $ws.Cells($lRow, 1).Value = $eingabe

Grüße,
BN
BN2023
BN2023 28.10.2024 um 14:17:54 Uhr
Goto Top
Habe alles super hinbekommen.
Danke für Eure Hilfe nochmal...

Eine Schönheitsfrage habe ich jedoch noch:

Wenn ich eine Meldung im PS-Fenster ausgebe, nachdem der User schon seine Angaben gemacht und die letzte Angabe auch schon mit ENTER bestätigt hat.

write-host "Nun bitte nochmal die Entertaste drücken! ... " -F Cyan -NoNewline  

Gibt es eine Möglichkeit, dass diese Meldung einfach nur für 3 Sekunden stehen bleibt und dann vonselbst verschwindet, ohne dass man nochmal Enter drücken muss?

Grüße,
BN
BN2023
BN2023 28.10.2024 aktualisiert um 14:34:04 Uhr
Goto Top
...sorry, hat sich erledigt.

Habe es mit "Start-Sleep -seconds 3" gelöst face-wink

Grüße,
BN