PowerShell Druckerinstallation
Hi zusammen,
ich habe hier ein PowerShell Script, welches ich Korrektur lesen und eventuell verbessern soll. Ich habe es soweit korrigiert, wie es meine sehr spärlichen PowerShell Kenntnisse zugelassen haben. Vielleicht findet sich hier ja jemand, der dies mal gegenprüfen und mir Feedback geben kann. Gerne nehme ich auch Verbesserungsvorschläge entgegen. Vielen Dank schon einmal im Voraus.
$CheckPrinter = Get-printer | where ($_.Name -like "Epson")
If ($CheckPrinter = $null)
{
$PRTFolder = "C:\Temp\Drivers"
New-Item -Path $PRTFolder -ItemType Directory -confirm
$source = "printertest.com"
$zipdestination = "$PRTFolder\printerdriver.zip"
Invoke-WebRequest $source -OutFile $zipdestination
$unzippeddestination = "$PRTFolder\printerdriver"
Expand-Archive -Path $zipdestination -DestinationPath $unzippeddestination
Remove-Item -Path $zipdestination
if($env:PROCESSOR_ARCHITECTURE = "x86")
{
Start-Process "$env:WINDIR\system32\windowspowershell\v1.0\powershell.exe" -WorkingDirectory $PRTFolder -ArgumentList "pnputil.exe /add-driver *.inf /subdir /install | Out-File -FilePath (Join-Path $Folder '\Install-Drivers.txt')" -NoNewWindow -Wait
}
elseif($env:PROCESSOR_ARCHITECTURE = "AMD64")
{
Start-Process "$env:WINDIR\system32\windowspowershell\v1.0\powershell.exe" -WorkingDirectory $PRTFolder -ArgumentList "pnputil.exe /add-driver *.inf /subdir /install | Out-File -FilePath (Join-Path $Folder '\Install-Drivers.txt')" -NoNewWindow -Wait
}
[String]$pnpOutput = Get-Content "$PRTFolder\Install-Drivers.txt" | Select-String "Published Name"
$pnpOutput -match "Published name:\s*(?<name>.*\.inf)"
$driverINF = Get-ChildItem -Path C:\Windows\INF\$($matches.Name)
Add-PrinterDriver -Name "Epson" -InfPath $driverINF.FullName
Add-PrinterPort -Name "PRT_Epson" -PrinterHostAddress "192.168.21.11"
Add-Printer -Name "Default Epson" -DriverName "Epson UniversalPCL" -PortName "Epson"
}
ich habe hier ein PowerShell Script, welches ich Korrektur lesen und eventuell verbessern soll. Ich habe es soweit korrigiert, wie es meine sehr spärlichen PowerShell Kenntnisse zugelassen haben. Vielleicht findet sich hier ja jemand, der dies mal gegenprüfen und mir Feedback geben kann. Gerne nehme ich auch Verbesserungsvorschläge entgegen. Vielen Dank schon einmal im Voraus.
- Check if printer has already been added
$CheckPrinter = Get-printer | where ($_.Name -like "Epson")
If ($CheckPrinter = $null)
{
- Make folder for driver download
$PRTFolder = "C:\Temp\Drivers"
New-Item -Path $PRTFolder -ItemType Directory -confirm
- Download the driver from Azure repository
$source = "printertest.com"
$zipdestination = "$PRTFolder\printerdriver.zip"
Invoke-WebRequest $source -OutFile $zipdestination
- Extract the zip archive and delete the zip
$unzippeddestination = "$PRTFolder\printerdriver"
Expand-Archive -Path $zipdestination -DestinationPath $unzippeddestination
Remove-Item -Path $zipdestination
if($env:PROCESSOR_ARCHITECTURE = "x86")
{
Start-Process "$env:WINDIR\system32\windowspowershell\v1.0\powershell.exe" -WorkingDirectory $PRTFolder -ArgumentList "pnputil.exe /add-driver *.inf /subdir /install | Out-File -FilePath (Join-Path $Folder '\Install-Drivers.txt')" -NoNewWindow -Wait
}
elseif($env:PROCESSOR_ARCHITECTURE = "AMD64")
{
Start-Process "$env:WINDIR\system32\windowspowershell\v1.0\powershell.exe" -WorkingDirectory $PRTFolder -ArgumentList "pnputil.exe /add-driver *.inf /subdir /install | Out-File -FilePath (Join-Path $Folder '\Install-Drivers.txt')" -NoNewWindow -Wait
}
[String]$pnpOutput = Get-Content "$PRTFolder\Install-Drivers.txt" | Select-String "Published Name"
$pnpOutput -match "Published name:\s*(?<name>.*\.inf)"
$driverINF = Get-ChildItem -Path C:\Windows\INF\$($matches.Name)
Add-PrinterDriver -Name "Epson" -InfPath $driverINF.FullName
Add-PrinterPort -Name "PRT_Epson" -PrinterHostAddress "192.168.21.11"
Add-Printer -Name "Default Epson" -DriverName "Epson UniversalPCL" -PortName "Epson"
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3998995294
Url: https://administrator.de/forum/powershell-druckerinstallation-3998995294.html
Ausgedruckt am: 06.05.2025 um 02:05 Uhr
2 Kommentare
Neuester Kommentar

Bähh, warum benutzt du hier keine Codetags ???
Code-Tags
Hier fehlen Wildcards im where object wenn du -Like benutzt und der Drucker nicht nur Epson heißen soll.
auch reichen würde.
about_Comparison_Operators
Fehlerbehandlung fehlt quasi komplett.
Cheers
cg
Code-Tags
Hier fehlen Wildcards im where object wenn du -Like benutzt und der Drucker nicht nur Epson heißen soll.
$CheckPrinter = Get-printer | where ($_.Name -like "*Epson*")
If ($CheckPrinter = $null)
Fehler "=" ist kein Vergleichsoperator in Powershell sondern nur ein Zuweisungsoperator! Hier gehört -eq stattdessen hin, obwohl einIf ($CheckPrinter){
about_Comparison_Operators
$source = "printertest.com"
$zipdestination = "$PRTFolder\printerdriver.zip"
Invoke-WebRequest $source -OutFile $zipdestination
Fehlt Fehlerbehandlung bei nicht erreichen.$zipdestination = "$PRTFolder\printerdriver.zip"
Invoke-WebRequest $source -OutFile $zipdestination
if($env:PROCESSOR_ARCHITECTURE = "x86")
{
Start-Process "$env:WINDIR\system32\windowspowershell\v1.0\powershell.exe" -WorkingDirectory $PRTFolder -ArgumentList "pnputil.exe /add-driver *.inf /subdir /install | Out-File -FilePath (Join-Path $Folder '\Install-Drivers.txt')" -NoNewWindow -Wait
Wieso pnputil innerhalb einer weiteren Powershell Session in einer weiteren PS Session starten?? Doppelt gemoppelt.{
Start-Process "$env:WINDIR\system32\windowspowershell\v1.0\powershell.exe" -WorkingDirectory $PRTFolder -ArgumentList "pnputil.exe /add-driver *.inf /subdir /install | Out-File -FilePath (Join-Path $Folder '\Install-Drivers.txt')" -NoNewWindow -Wait
elseif($env:PROCESSOR_ARCHITECTURE = "AMD64")
{
Start-Process "$env:WINDIR\system32\windowspowershell\v1.0\powershell.exe" -WorkingDirectory $PRTFolder -ArgumentList "pnputil.exe /add-driver *.inf /subdir /install | Out-File -FilePath (Join-Path $Folder '\Install-Drivers.txt')" -NoNewWindow -Wait
}
same here{
Start-Process "$env:WINDIR\system32\windowspowershell\v1.0\powershell.exe" -WorkingDirectory $PRTFolder -ArgumentList "pnputil.exe /add-driver *.inf /subdir /install | Out-File -FilePath (Join-Path $Folder '\Install-Drivers.txt')" -NoNewWindow -Wait
}
Fehlerbehandlung fehlt quasi komplett.
Cheers
cg
Ein kurzer Hinweis sei gestattet: Es gibt die Funktion Drucker zu exportieren und im Anschluss mit allen getätigten Einstellungen innerhalb der Treiber auch auf anderen Maschinen wieder zu importieren.
Einziger Nachteil ist, dass wirklich alles an Treibern, Anschlüssen und Druckern mitgenommen wird.
Ist dann aber ein Einzeiler inkl. aller Einstellungen:
VG
Einziger Nachteil ist, dass wirklich alles an Treibern, Anschlüssen und Druckern mitgenommen wird.
Ist dann aber ein Einzeiler inkl. aller Einstellungen:
%WINSYSDIR%spool\tools\PrintBrm.exe -R -O FORCE -F "PRINTER.printerExport"
VG