sebi1980
Goto Top

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. face-smile


  1. Check if printer has already been added

$CheckPrinter = Get-printer | where ($_.Name -like "Epson")
If ($CheckPrinter = $null)

{
  1. Make folder for driver download

$PRTFolder = "C:\Temp\Drivers"
New-Item -Path $PRTFolder -ItemType Directory -confirm

  1. Download the driver from Azure repository

$source = "printertest.com"
$zipdestination = "$PRTFolder\printerdriver.zip"
Invoke-WebRequest $source -OutFile $zipdestination

  1. 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"
}

Content-Key: 3998995294

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

Printed on: April 26, 2024 at 15:04 o'clock

Mitglied: 3803037559
Solution 3803037559 Sep 20, 2022 updated at 15:01:05 (UTC)
Goto Top
Bähh, warum benutzt du hier keine Codetags ???
Code-Tags

Zitat von @sebi1980:
$CheckPrinter = Get-printer | where ($_.Name -like "Epson")
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 ein
If ($CheckPrinter){
auch reichen würde.
about_Comparison_Operators

$source = "printertest.com"
$zipdestination = "$PRTFolder\printerdriver.zip"
Invoke-WebRequest $source -OutFile $zipdestination
Fehlt Fehlerbehandlung bei nicht erreichen.

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.

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

Fehlerbehandlung fehlt quasi komplett.

Cheers
cg
Member: Tezzla
Solution Tezzla Sep 21, 2022 updated at 08:45:52 (UTC)
Goto Top
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:

%WINSYSDIR%spool\tools\PrintBrm.exe -R -O FORCE -F "PRINTER.printerExport"  

VG