Powershell über .Bat starten und einen Befehl in der Powershell Konsole ausführen

Wilfriede

Lieutenant
Registriert
Juni 2012
Beiträge
896
Hallo zusammen

Hoffe, ich bin hier richtig. Ansonsten bitte verschieben.

Ich habe ein Powershellscript das ich gerne über ein Batchfile starten möchte. Nun habe ich das Problem, dass das Powershell Script mehrere Befehle kennt. Ich weiss leider nicht, wie ich diese über ein Batch File ausführen kann. Also wie ich über ein Batch ein Powershell Script starte, ist mir bekannt. Aber leider nicht, wie ich noch einen zusätzlichen Befehl in der Powershell abgebe.

Hier mal zwei Beispiele:

C:\Downloads\AdobeReaderDC> Powershell.exe -ExecutionPolicy Bypass .\Deploy-AdobeReaderDC.ps1 -DeploymentType "Install" -DeployMode "Interactive"
C:\Downloads\AdobeReaderDC> Powershell.exe -ExecutionPolicy Bypass .\Deploy-AdobeReaderDC.ps1 -DeploymentType "Uninstall" -DeployMode "Silent"

  • Dies ist, was ich direkt in der Powershell eingebe.
Es geht um diese "install" und z.B. "uninstall" wie "silent". Ich möchte z.B. ein Batch das "install" und eines das "uninstall" ausführt. Mit demselben Powershell Script.

Ich habe schon das ein oder andere versucht aber leider ohne Erfolg :(

Im Anhang findet ihr noch das Powershell Script.

Hat hier vielleicht jemand eine Idee?

Besten Dank & Gruss

Orc
 

Anhänge

Eventuell wäre das was für dich: https://ftp.heise.de/ct/listings/2021/11/2111_152.zip
Der Artikel selbst ist leider hinter einer Paywall (aber c't-Abo lohnt einfach): https://www.heise.de/ratgeber/Windows-10-PowerShell-Skripte-als-Batch-verpacken-6043473.html

Edit: Okay, wie es mit den Übergabeparameter dann funktioniert, das habe ich selbst noch nicht ausprobiert.

Sollte kein Problem sein:
1626886451502.png


Der Code der hello.ps1:
Code:
[CmdletBinding()]
Param (
  [parameter(Position=0, ValueFromPipeline, Mandatory=$true)]
  [String]$text
)
Write-Host "Hallo ${text}"

Der Code der erzeugten hello.cmd:
Code:
@echo off
%windir%\System32\more +8 "%~f0" > "%temp%\%~n0.ps1"
powershell -NoProfile -ExecutionPolicy Bypass -File "%temp%\%~n0.ps1" %*
del %temp%\%~n0.ps1
pause
exit /b
*** Ab hier PowerShell ***
[CmdletBinding()]
Param (
  [parameter(Position=0, ValueFromPipeline, Mandatory=$true)]
  [String]$text
)
Write-Host "Hallo ${text}"

Edit:
Ansonsten schau dir mal an, wie der aufruf hier ist:
Code:
powershell -NoProfile -ExecutionPolicy Bypass -File "%temp%\%~n0.ps1" %*

Eventuell muss es also bei dir so sein:
Code:
powershell -NoProfile -ExecutionPolicy Bypass -File .\Deploy-AdobeReaderDC.ps1 -DeploymentType "Uninstall" -DeployMode "Silent"
 
Zuletzt bearbeitet:
Kurzgefragt: Für welchen Einsatzzweck brauchst du jetzt speziell dieses Script? Zum massenweisen Ausrollen von Software?
 
Klingt für mich auch so, als wenn hier ein Management über ein (wie auch immer geartetes) Softwareverteilungssystem geplant scheint.
Ich würde daher mal das PSAppDeploymentToolkit in den Raum werfen wollen, nutzen viele Firmen (inkl. mein Arbeitgeber, auch ich habe in meiner Paketierungszeit lange damit gearbeitet) und kann eigentlich genau das was der TE sich vorstellt (plus noch viel mehr).
 
Zuletzt bearbeitet:
Mal ne ganz andere Idee. Warum den Acrobat Reader nicht als MSI per GPO verteilen? Das ist schlecht dokumentiert, aber vor der Aufgabe stand ich auch schon und mittlerweile klappt es wunderbar.
 
Hallo zusammen

Danke schon mal für die Antworten!

Ja, ich möchte es in der Firma verteilen. Früher ging dies immer ohne Probleme. Aber seit einiger Zeit hat Adobe etwas an den kostenlosen Versionen geändert. Habe mal gelesen, sie versuchen zu verhindern, dass die kostenlose Adobe DC Version in Firmen zum Einsatz kommt.

Was denkt denn ihr, was zur Zeit hier best practice ist? Denke das PSAppDeploymentToolkit oder über die GPO hört sich eigentlich noch interessant an.

Besten Dank & Gruss

Orc
 
Also wenn vorhanden es ein AD gibt, dann ist der offizielle Weg das MSI Paket per GPO. Ich verteile damit den DC, Professional 17 & 21. Letztere sind ein Tick aufwendiger.

Bist du grundsätzlich mit der Verteilung von MSI-Paketen vertraut? Dann ist es easy going. Ich kann dir ein paar Links raussuchen, die mir geholfen haben. Ist alles leider etwas versteckt in der Developer Ecke bei Adobe.
 
Ja, ich möchte es in der Firma verteilen. Früher ging dies immer ohne Probleme. Aber seit einiger Zeit hat Adobe etwas an den kostenlosen Versionen geändert. Habe mal gelesen, sie versuchen zu verhindern, dass die kostenlose Adobe DC Version in Firmen zum Einsatz kommt.
Darf man fragen wie es denn 'früher' verteilt worden ist? Und welche Probleme du hast?
Dass Adobe hier irgendetwas blocken soll höre ich zum ersten Mal, Adobe Reader DC ist ja der Quasi-Standard (in den meisten Firmen), was PDF-Betrachtung angeht. Bei uns z.B. auf 50k+ Sytemen installiert.
Wichtig ist halt nur (im Business/Enterprise Umfeld mit Verteilungssystem): MSI-Installer nutzen.

Da du ja schon das PSAppDeployToolkit nutzt (sorry, hatte gestern nicht in das Archiv geschaut, aber das ist ja bereits das Main-Script), nimmt doch einfach die zugehörige Exe, welche mit den Script-Parametern angesprochen werden kann und diese an das PS-Script durchreicht (z.B. Deploy-Application.exe -DeploymentType "Install").
WICHTIG: Die Datei 'Deploy-Application.ps1' darf NICHT umbenannt werden (so wie du es aktuell getan hast)!

Um auch noch auf deine ursprüngliche Frage hinsichtlich Batch Datei zurück zu kommen:
Wenn du den '-File' Parameter nutzt (powershell.exe [...] -File .\xxxxx.ps1 -DeploymentType Install), dann sollten Parameterangaben nach eben diesem als Parameter für die angesprochene Datei gewertet werden.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Poati
Vielen Dank für die Antworten!

@Poati
Die Links würde ich gerne nehmen. Wäre froh, wenn du mir diese zusenden könntest. Hört sich richtig an ;)

@Excavated
Ich habe einfach eine aktuelle Version heruntergeladen. Diese entpackt.

Setup.ini

[Startup]
RequireMSI=3.0
CmdLine=/sall /rs

[Product]
PATCH=AcroRdrDCUpd2000920063.msp
msi=AcroRead.msi
CmdLine=TRANSFORMS="AcroRead.mst"

[MSI Updater]
Path=http://ardownload.adobe.com/pub/adobe/reader/win/8.x/8.0/misc/WindowsInstaller-KB893803-v2-x86.exe

Und dann über die AcroRead.msi verteilt. Habe es einfach so gemacht wie mein Vorgänger. Und auf einmal wurden nur noch sehr alte Versionen aufgespielt. Auch wenn ich eine Aktuelle heruntergeladen habe. Zu Beginn hatte ich aber keine Probleme.

Nochmals Danke für die sehr hilfreichen Antworten! Habe ich auch noch anderes gelernt.

Ich arbeite eben noch nicht so lange in der IT. Der Arbeitskollege hat einen Burnout und ich bin etwas überlastet. Echt sehr freundlich, dass ihr so hilfsbereit seid. Wenn ich es richtig verstehe, wäre dies sogar eine Verbesserung gegenüber der aktuellen Gangart :)

Gruss

Orc
 
Jetzt stellt sich erstmal die Frage, was du wo heruntergeladen hast, die in der 'setup.ini' angegebene MSP ist die für das Update Mai 2020 (Build 20.009.20063). Aktuell wäre die 21.005.20058.
Allerdings scheint auch die 'setup.ini' ja bereits angepasst worden zu sein, sonst würde dort nicht
CmdLine=TRANSFORMS="AcroRead.mst"
enthalten sein
Hast du ggf. die setup.ini von einem Vorgängerpaket übernommen und vergessen die Angabe für die MSP anzupassen, also das hier:
PATCH=AcroRdrDCUpd2000920063.msp
Üblicherweise läd man den aktuellsten Enterprise-Installer hier herunter: https://get.adobe.com/de/reader/enterprise/ da sind sowohl die Basis-MSI und als auch die aktuielle MSP drin.

Und über welche 'AcroRead.msi' hast das dann verteilt? Das von im Archiv enthaltene Skript nutzt die 'AcroRdrDC*.exe' als Installer und spricht nicht direkt die MSI + MSP an:
Code:
$ExePath = Get-ChildItem -Path "$dirFiles" -Include AcroRdrDC*.exe -File -Recurse -ErrorAction SilentlyContinue
[...]
Execute-Process -Path "$ExePath" -Parameters "/sAll /rs /msi EULA_ACCEPT=YES /L*v C:\Windows\Logs\Software\AdobeReaderDC-Install.log" -WindowStyle Hidden

Kannst du ggf. noch mal zusammenfassen, was genau du gemacht hats und was du wie ausführen willst?
Ggf. auch noch wie das Vorgänger-Paket gestrickt ist (mal nen Screenshot om 'Files' Verzeichnis hier einstellen)?
 
Zurück
Oben