bob777
Goto Top

Ps1 Script geht nach dem Klick immer zu

Hallo

Was ist der Fehler oder Grund dass die winget_install.sp1 Datei gestartet wird, das Fenster aber nach 2 Secunden zugeht (die shell ist nur schwarz)

Versucht habe ich das und weiss nicht weiter.

1
powershell
# Ausführen des Befehls "winget list" 
Start-Process -FilePath "winget" -ArgumentList "list" -Wait  

# Ausführen des Befehls "winget upgrade -all" 
Start-Process -FilePath "winget" -ArgumentList "upgrade -all" -Wait  

# Warten für 555 Sekunden, bevor die PowerShell geschlossen wird
Start-Sleep -Seconds 5000

2
powershell
# Ausführen des Befehls "winget list" 
winget list

# Ausführen des Befehls "winget upgrade -all" 
winget upgrade -all

# Warten auf Benutzereingabe, bevor die PowerShell geschlossen wird
pause

3 weitere versuche
# Öffne ein PowerShell-Fenster und führe die Befehle aus
# Start-Process powershell -NoExit -ArgumentList "winget list; winget upgrade -all" 
# Öffne ein PowerShell-Fenster und führe die Befehle aus
# powershell -NoExit -Command "winget list; winget upgrade -all; pause" 
# Öffne ein PowerShell-Fenster und führe die Befehle aus
powershell -NoExit -Command "winget list; winget upgrade -all; Read-Host -Prompt 'Drücken Sie eine beliebige Taste, um fortzufahren.'pause"  


bei allen ist das selbe .. nach dem klick geht das fenster einfach nur zu .. winget ist installiert ..

Content-ID: 91961545831

Url: https://administrator.de/forum/ps1-script-geht-nach-dem-klick-immer-zu-91961545831.html

Ausgedruckt am: 22.12.2024 um 09:12 Uhr

manuel-r
manuel-r 18.01.2024 um 15:48:26 Uhr
Goto Top
Hallo

Läuft winget vielleicht auf einen Fehler und du siehst den nicht, weil das Fenster direkt zu geht? Mach mal ein -NoNewWindow dazu. Dann wird winget in der gleichen Konsole ausgeführt und du siehst wenigstens den Fehler falls einer kommt.

Manuel
Celiko
Celiko 18.01.2024 um 16:01:58 Uhr
Goto Top
Moin,

powershell -NoExit -Command "winget list; winget upgrade --all"    

Funktioniert bei mir und das Fenster schließt sich nicht automatisch.
Bei winget bitte "--" verwenden.

VG
kreuzberger
kreuzberger 18.01.2024 um 16:05:58 Uhr
Goto Top
Hallo @bob777

wenn man

windet List
verwenden möchte muss man zusätzliche Lizenzvereinbarungen eingehen. Diese müssen proaktiv einmalig bestätigt werden. In einem Script wird das wohl so u.U. nicht gehen.

Vielleicht löst sich das Problem, indem du es einmalig in Powershell Console als Befehl so eintippt und dann eben bestätigst mit (Ja).

Kreuzberger
Celiko
Celiko 18.01.2024 aktualisiert um 16:16:55 Uhr
Goto Top
Zitat von @kreuzberger:
windet List
verwenden möchte muss man zusätzliche Lizenzvereinbarungen eingehen. Diese müssen proaktiv einmalig bestätigt werden. In einem Script wird das wohl so u.U. nicht gehen.

geht mittlerweile mit folgenden Parametern:
--accept-source-agreements
--accept-package-agreements

https://learn.microsoft.com/de-de/windows/package-manager/winget/upgrade ...

Nachtrag:
Der Accept-Agreements Parameter und der --all Parameter können erst seit ca. dem 08.11.2022 verwendet werden:
https://github.com/microsoft/winget-cli/issues/2680

VG
kreuzberger
kreuzberger 18.01.2024 um 16:21:31 Uhr
Goto Top
@Celiko

Ich finde es etwas befremdlich, wenn ich ein Agreements akzeptieren soll, welches mir inhaltlich auf diese Weise gar nicht bekannt wird.

Kreuzberger

Ich hab mich bei
windet
wohl vertippt und falsch „windet“ geschrieben. Sorry
Celiko
Celiko 18.01.2024 um 16:25:20 Uhr
Goto Top
@kreuzberger
Yo, bin ich voll bei dir. Wollte nur darauf hinweisen für den TO. Evtl. will er das Global an seine Clients verteilen mit dem Gedanken: Hauptsache aktuell.

Wir nutzen auch Winget, aber nutzen ein Array von Programmnamen, die aktualisiert werden sollen mit dem automatischen Accept-Agreement Parameter.
So haben wir die Kontrolle, welche Applikationen wir über Winget updaten wollen.

VG
Celiko
Celiko 18.01.2024 aktualisiert um 16:30:51 Uhr
Goto Top
Wenn das Script per Task Scheduler ausgeführt wird dann muss das im User-Context gestartet werden, weil sonst die GUI nicht angezeigt werden kann...
Alternativ als System und Impersonation des angemeldeten Users vornehmen.

Wenn das Script ohne Fenster ausgeführt werden soll und du gerne sehen willst, was der so macht kannst du Start-Transcript nutzen.

pjumper hat das gut dargestellt:
PowerShell "Login Script" läuft als Scheduled Task nicht
Windows Server Aufgabenplanung Robocopy

VG
Crusher79
Crusher79 19.01.2024 um 08:21:20 Uhr
Goto Top
Testen mit PowerShell ISE oder meinewegten auch Visual Studio Code und debugger.

Offenhalten kann man es auch mit

pause

Normal reicht der Aufruf. Mitunter blenden Scripte kurz in Rot ein, dass Ressourcen nicht gefunden wurden o.ä. Diese Fehler muss man abfangen, bzw. beheben.

Anlaufstellen wären auch Ereignislog und ähnliches. Man kann ps1 Dateien auch via Batch xxx.cmd starten oder mittels VBS. Letzteres bietet noch die Möglichkeit PS1 Aufruf zu verbergen.

Zum Verbergen gibt es auch andere Mehtoden. VBS geht aber auch immer noch. Ansonsten schau dass du was siehst! Mit pause anhalten. Erstmal so debuggen Dann kommt man rasch zu einer Lösung!

VBS zum Starten - ggf. auch hidden - nehmen:

 objShell.Run strCMD,0

Dim objShell,objFSO,objFile

Set objShell=CreateObject("WScript.Shell")  
Set objFSO=CreateObject("Scripting.FileSystemObject")  

'enter the path for your PowerShell Script  
strPath="c:\Scripts\winsscp_bck_cp.ps1"  

'verify file exists  
If objFSO.FileExists(strPath) Then
'return short path name  
    set objFile=objFSO.GetFile(strPath)
    strCMD="powershell -nologo -command " & Chr(34) & "&{" &_  
     objFile.ShortPath & "}" & Chr(34)  
    'Uncomment next line for debugging  
    'WScript.Echo strCMD  
   
    'use 0 to hide window  
    objShell.Run strCMD,0

Else

'Display error message  
    WScript.Echo "Failed to find " & strPath  
    WScript.Quit
   
End If
bob777
bob777 19.01.2024 aktualisiert um 09:55:16 Uhr
Goto Top
Moin .. echt ein geiles Teil das winget.. so viel geklicke was da wegfällt wenn man es über "winget upgrade --all" macht.

Jetzt bin ich noch es am Händisch machen aber das soll per Klick und später ein mal die Woche als Task automatisch gestartet werden..

Nur zwei Sachen noch:
1. angeblich soll winget auch Windows Updates miteinbeziehen .. macht es aber nicht.. weil nach dem winget man unter Windows Update weiter unter der Online Suche Updates findet. (gibt es einen Weg dass alle Updates installiert werden auch die über Onlinesuche)

2. Wie wird das an Schlausten gemacht damit die Richtlinien nicht meckern ?
wingetscreenshot 2024-01-19 092436

Edit:

Jetzt sehe ich dass ich nicht mal winget per Kommandozeile installiert bekomme (über store kein problem)

So steht die Setup jetzt seit 10 Minuten ..
winget setup automatisch screenshot 2024-01-19 094109


die setup.exe wird gestartet aber will auch nicht mit RemoteSigned sich installieren .. gibt Fehler "Installation fehlgeschlagen mit Exitcode: 17003" aus .
 Es gibt verschiedene Ausführungsrichtlinien, darunter "Restricted", "RemoteSigned", "AllSigned" und andere, die das Ausführen von Skripts unter verschiedenen Bedingungen steuern.  

#richtlinien überprüfen
Get-ExecutionPolicy

#wiederherstellen der richtlinien
Set-ExecutionPolicy -ExecutionPolicy Restricted

#setze richtlinien um scripte auszuführen
Set-ExecutionPolicy RemoteSigned
manuel-r
manuel-r 19.01.2024 um 09:50:38 Uhr
Goto Top
Ich vermute da wartet das Office im Hintergrund auf irgendeinen Klick (vielleicht die EULA). Es gibt doch bestimmt eine Option für winget mit der EULAs akzeptiert werden oder mit der man sozusagen alles auf automatisch stellen kann?!
Ich kenne mich nicht mit winget aus, weil ich choco nutze...

Manuel
bob777
bob777 19.01.2024 aktualisiert um 10:04:50 Uhr
Goto Top
Edit! Geht!

Setzte die Richtlinien auf.
Set-ExecutionPolicy AllSigned

Installiere mit:
winget install --id Microsoft.Office


Setze wieder die Richtlinien zurück.
 Set-ExecutionPolicy -ExecutionPolicy Restricted

Nur ist das alles sinnlos, wenn es nicht automatisch passiert und über den Store ich es 10x schneller klicken kann.

Kann man das automatisieren? -.-
winget install oky screenshot 2024-01-19 095616
manuel-r
manuel-r 19.01.2024 um 10:05:37 Uhr
Goto Top
Kann man das automatisieren

Indem du das Script einfach startest mit
powershell -ExecutionPolicy AllSigned -File c:\meinscript.ps1
Damit gilt dass AllSigned nur für diesen Scriptaufruf.

Manuel
bob777
bob777 19.01.2024 um 10:34:30 Uhr
Goto Top
Ach ist das blöd -.- Installieren ja aber scripte starten nein.. Obwohl ja AllSignet alles erlaubt

ist nicht digital signiert. Sie können dieses Skript im aktuellen System nicht ausführen. 
Weitere Informationen zum Ausführen von Skripts und Festlegen der Ausführungsrichtlinie erhalten Sie unter "about_Execution_Policies"   
(https:/go.microsoft.com/fwlink/?LinkID=135170)..
    + CategoryInfo          : Sicherheitsfehler: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnauthorizedAccess

sp1 nogo screenshot 2024-01-19 102950
bob777
bob777 19.01.2024 aktualisiert um 10:42:30 Uhr
Goto Top
Zitat von @manuel-r:

Kann man das automatisieren

Indem du das Script einfach startest mit
powershell -ExecutionPolicy AllSigned -File c:\meinscript.ps1
Damit gilt dass AllSigned nur für diesen Scriptaufruf.

Manuel

Hi.. Hilft mir auf die Sprünge.. Soll ich jetzt ein Script für das Script schrieben? Das von dir startet das von mir ?

Hier geht darum dass ich eine(winget install) oder zwei(tools upgrade) sp1 Dateien brauche die mir erst winget installiert und dann die Tools auf dem System aktualieiert .. ohne dass ich in Powershell etwas tippen muss. Nur Doppelkick ist das Ziel
manuel-r
manuel-r 19.01.2024 um 10:59:25 Uhr
Goto Top
Hilft mir auf die Sprünge.. Soll ich jetzt ein Script für das Script schrieben? Das von dir startet das von mir?

Nein. Du bist doch gerade dabei ein Script zu schreiben das später mal in einem geplanten Task laufen soll. In diesem Task gibt du als Programm powershell.exe und als Optionen -ExecutionPolicy AllSigned -File c:\meinscript.ps1 an. Natürlich könntest du dein Script auch mit -Scriptblock an die Powershell übergeben und damit das Script komplett in den Task schreiben. Das wird aber ziemlich unübersichtlich.
Während du noch auf deinem Client testest musst du das Script einfach jedes Mal so starten wie oben geschrieben.

ohne dass ich in Powershell etwas tippen muss. Nur Doppelkick ist das Ziel

Powershell-Scripte werden standardmäßig im Editor geöffnet. Einfach mit Doppelklick funktioniert also nicht.
Entweder Rechtsklick und "Mit Powershell ausführen" oder eine Verknüpfung anlegen mit dem Kommando von oben
powershell -ExecutionPolicy AllSigned -File c:\meinscript.ps1
bob777
bob777 19.01.2024 aktualisiert um 12:34:24 Uhr
Goto Top
OK habs ... jetzt nur doch das ganze irgendwie zusammenbasteln ..

Erlaubt das Installieren
Set-ExecutionPolicy AllSigned

Erlaubt das Ausführen von Scripten mit einem Doppelklick
Set-ExecutionPolicy RemoteSigned

Also, wenn ich in das neue Image winget reinpacke kann ich mir das erste (installieren) sparen..
Und bei zweiten (upgraden) würde ich beim @manuel-r spicken und das Script so ansprechen?

Inhalt wingetinstall.ps1: powershell -NoExit -Command "winget list; winget upgrade --all"
powershell -ExecutionPolicy RemoteSigned -File c:\wingetinstall.ps1

So wird nur das Script mit den lokalen Berechtigungen ausgeführt und nur das Script.. Die Updates aller Tools sollte auch so dann mit Task funktionieren?

Kann das so stimmen?


Jetzt stelle ich mir noch die Frage wies winget nicht alle Windows Updates einbezieht ... (kann man Testen nachdem winget durchgelaufen ist findet Windows Update Online suche (strg+i) weitere.
bob777
bob777 19.01.2024 um 14:12:05 Uhr
Goto Top
Edit: Über die Verknüpfung geht es jetzt mit den RemotSignet..

Nur will er ja diese Datenschutz Sachen nicht überspringen ..


winget datenscreenshot 2024-01-19 140426

nichts will das überspringen o0
powershell -NoExit -Command "winget list; winget upgrade --all; --accept-source-agreements; --accept-package-agreements;"  
#Bestätigt automatisch die Datenschutzbestimmungen
#winget --accept-source-agreements
#winget --accept-package-agreements

face-sad(
manuel-r
manuel-r 19.01.2024 um 14:28:45 Uhr
Goto Top
Ich glaube du solltest dich noch etwas einlesen face-wink

powershell -NoExit -Command "winget list; winget upgrade --all; --accept-source-agreements; --accept-package-agreements;"    

Das was du da verbrochen hast für nacheinander vier Befehle in der Powershell aus
  • winget list
  • winget upgrade --all
  • --accept-source-agreements
  • --accept-package-agreements
und kann deshalb nichts werden. Die letzten beiden sind schon mal gar keine Befehle die ausführbar wären.
Was du willst ist wahrscheinlich
powershell -NoExit -Command "winget list; winget upgrade --all --accept-source-agreements --accept-package-agreements"  
Alles was hier mit "--" beginnt sind Optionen oder Schalter für winget

Manuel
bob777
bob777 19.01.2024 aktualisiert um 14:37:04 Uhr
Goto Top
Leider auch nicht face-sad habe ich aber auch schon getestet gehabt

wingetdatascreenshot 2024-01-19 143528
10138557388
10138557388 19.01.2024 aktualisiert um 14:44:11 Uhr
Goto Top
powershell -EP ByPass -NoExit -Command "winget list; start-process winget -Argumentlist 'upgrade --all --silent --accept-source-agreements --accept-package-agreements --force' -wait -NoNewWindow"    
PJ
bob777
bob777 19.01.2024 aktualisiert um 14:59:41 Uhr
Goto Top
Ach face-smile Das echt super! Läuft durch!. aber am ende hab ich nen Error.. kann auch an unsere Leitung liegen weil wir Probleme haben ..

wingetdataworkscreenshot 2024-01-19 144801

Weitere Hilfe finden Sie unter: „https://aka.ms/winget-command-upgrade“
PS C:\WINDOWS\system32> winget upgrade --all
Fehler beim Durchsuchen der Quelle: winget
Unerwarteter Fehler beim Ausführen des Befehls:
0x8a15000f : Data required by the source is missing
PS C:\WINDOWS\system32>

vll. gehts am Montag.. Danke euch!
kreuzberger
kreuzberger 19.01.2024 um 15:01:29 Uhr
Goto Top
Hi @10138557388

wenn ich hier mal reingrätschen darf.............

Ich wäre begeistert, wenn man das miniscript mal etwas dokumentieren würde um zu sehen was es da genau macht. Darüber hinaus würde ich gerne einen schritt zurück gehen in der art, als dass man Updates/installationen pariert durchführt. Also nur Microsoft Sachen update, nur spezielle software update. also zb nur den mozilla, oder nur den vlc.
Vielleicht hast du ja Laune uns da zu erhellen.
Kreuzberger
bob777
bob777 19.01.2024 aktualisiert um 15:30:33 Uhr
Goto Top
Das ist für mich jetzt ein faq sollte aber schöner gehen ;)

txt mit dem inhalt

powershell -EP ByPass -NoExit -Command "winget list; start-process winget -Argumentlist 'upgrade --all --silent --accept-source-agreements --accept-package-agreements --force' -wait -NoNewWindow"  

als ps1 speichern & verknüpfung setzen mit ziel:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy RemoteSigned -File C:\wingetupdate.ps1

ausführen in c:\ 

wo wingetupdate.ps1 liegt

(würde Verknüpfung und sp1 relatiev zueinander im selben Order immer liegen kann man es überall starten und leicht kopieren) das hab ich noch nicht ganz hinbekommen
###

powershell -EP ByPass -NoExit -Command "winget list; start-process winget -Argumentlist 'upgrade --all --silent --accept-source-agreements --accept-package-agreements --force' -wait -NoNewWindow"


Der Befehl "powershell -EP ByPass -NoExit -Command" startet eine PowerShell-Sitzung mit den angegebenen Parametern.
Der Parameter "-EP ByPass" ermöglicht das Ausführen von nicht signiertem PowerShell-Code.

Der Parameter "-NoExit" verhindert das automatische Beenden der PowerShell-Sitzung nach Ausführung des Befehls.

Der Parameter "-Command" gibt den auszuführenden PowerShell-Befehl an. In diesem Fall wird der Befehl "winget list" ausgeführt, der eine Liste der verfügbaren Anwendungen mit Windows Package Manager anzeigt.

Der Befehl "start-process winget -Argumentlist 'upgrade --all --silent --accept-source-agreements --accept-package-agreements --force' -wait -NoNewWindow" startet den Windows Package Manager (winget) mit den angegebenen Argumenten. Dieser Befehl führt ein Upgrade aller installierten Anwendungen durch, ohne Benutzerinteraktion, indem er automatisch Quell- und Paketvereinbarungen akzeptiert und erzwingt. Der Parameter "-wait" sorgt dafür, dass der Befehl abgeschlossen wird, bevor die PowerShell-Sitzung beendet wird. Der Parameter "-NoNewWindow" verhindert das Öffnen eines neuen Fensters für den Befehl.

Dazu ist das ganze noch nicht fertig .. weil man mit winget noch einzelne Sachen deinstallieren kann

... hier würde es super sein wenn man den ganzen Mist der Mitinstalliert wird in eine Liste packen kann und so das Zeug aufs mal wegkommt.

Befehl dazu schaut dann so aus .. das aber nur xbox .. aus der liste "winget list"
powershell
winget uninstall --id Microsoft.XboxGameOverlay_8wekyb3d8bbwe --silent --force
winget uninstall --id Microsoft.XboxIdentityProvider_8wekyb3d8bbwe --silent --force
winget uninstall --id Microsoft.XboxSpeechToTextOverlay_8wekyb3d8bbwe --silent --force
10138557388
10138557388 19.01.2024 aktualisiert um 15:49:53 Uhr
Goto Top
Zitat von @kreuzberger:
Ich wäre begeistert, wenn man das miniscript mal etwas dokumentieren würde um zu sehen was es da genau macht.
Freitag gibt's von mir nur RTFM 😋
Start-Process
winget upgrade parameter

Soviel Bohei um so einen Pippifax gibt's aber auch nur Freitags ... 🖖
bob777
bob777 22.01.2024 um 11:19:02 Uhr
Goto Top
HI .. bin wieder da .. auf einem ersten Remote Win10 Rechner welcher das hier erhalten sollte, kommt weiter diese Abfrage Nutzungsbedienung.. Ja /Nein

ps1 Datei
powershell -EP ByPass -NoExit -Command "winget list; start-process winget -Argumentlist 'upgrade --all --silent --accept-source-agreements --accept-package-agreements --force' -wait -NoNewWindow"  

verknüpfung
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy RemoteSigned -File C:\wingetupdate.ps1

wingetjaneinscreenshot 2024-01-22 110134

Dazu ist nach dem Installieren der Updates die winget durchführt der Explorer nicht mehr sichtbar.. da ist nur ein grauer Hintergund und die Shell zu sehen .. nur ein neustart kann das beheben o0 das habe ich jetzt das zweite mal.

winget desk