Zum Inhalt wechseln


Foto

Druckerinstallation PS Skript "problemchen"


  • Bitte melde dich an um zu Antworten
2 Antworten in diesem Thema

#1 Slavefighter

Slavefighter

    Junior Member

  • 85 Beiträge

 

Geschrieben 30. Mai 2017 - 09:36

Hallo alle Zusammen,

 

ich habe 2 kleine Probleme bei meinem Skript:

 

1. Scheint er bei der Ausführung die Credentials nicht mehr zu speichern, dadurch kommt es dann dazu, dass das drucken nicht mehr möglich ist (erst das erneute einbinden des entsprechenden Druckers schafft abhilfe)

 

2. Kommt bei der der Treiberinstallation die Abfrage, ob man denn diesen Treiber wirklich installieren will ( Win7 - Win 10).

 

 

Zum Skript:

Die Infrastruktur bestehend aus X VLAN, welche sich alle im Backbone treffen wo auch der Druckerserver mit auf dem DC liegt.

Die jeweilligen Drucker sind mit Fester IP in dem entsprechenden VLAN versehen und es gibt einen Dummy, der ausschließlich für das Drucken bzw das einbinden besteht.

 

Auf dem Desktop gibt es eine einfach Batch, die das PS Skript ausführt mit einer "Grafischen" Oberfläche, wo lediglich der Raum ausgewählt werden muss, frei nach dem KISS prinzip.

 

[spoiler]
cmdkey /add:edu-dc /user:Druck /pass:'Pa$$w0rd'



Function Druckerinstallation ($Drucker) {



$user = 'Druck'

$pwd = 'Pa$$w0rd'



net use \\edu-dc\Oki_$Drucker $pwd /USER:$user

$printerpath = "\\edu-dc\Oki_$Drucker"

$net = New-Object -com WScript.Network

$net.AddWindowsPrinterConnection($printerpath)





if ($Drucker -eq  'Raum1'){

$Printer = (Get-WmiObject -Class win32_printer) | ? {$_.Name -eq "\\edu-dc\ES4132_Raum1"}

}



if ($Drucker -eq  'Raum3'){

$Printer = (Get-WmiObject -Class win32_printer) | ? {$_.Name -eq "\\edu-dc\ES4132_Raum3"}

}



if ($Drucker -eq  'Raum4'){

$Printer = (Get-WmiObject -Class win32_printer) | ? {$_.Name -eq "\\edu-dc\ES4132_Raum4"}

}



if ($Drucker -eq  'Raum6'){

$Printer = (Get-WmiObject -Class win32_printer) | ? {$_.Name -eq "\\edu-dc\ES4132_Raum6"}

}



if ($Drucker -eq  'Raum7'){

$Printer = (Get-WmiObject -Class win32_printer) | ? {$_.Name -eq "\\edu-dc\ES4132_Raum7"}

}



if ($Drucker -eq  'Raum8'){

$Printer = (Get-WmiObject -Class win32_printer) | ? {$_.Name -eq "\\edu-dc\ES4132_Raum8"}

}



if ($Drucker -eq  'Raum9'){

$Printer = (Get-WmiObject -Class win32_printer) | ? {$_.Name -eq "\\edu-dc\ES4132_Raum9"}

}



if ($Drucker -eq  'Raum10'){

$Printer = (Get-WmiObject -Class win32_printer) | ? {$_.Name -eq "\\edu-dc\ES4132_Raum10"}

}



if ($Drucker -eq  'Raum11'){

$Printer = (Get-WmiObject -Class win32_printer) | ? {$_.Name -eq "\\edu-dc\ES4132_Raum11"}

}



if ($Drucker -eq  'Raum12'){

$Printer = (Get-WmiObject -Class win32_printer) | ? {$_.Name -eq "\\edu-dc\ES4132_Raum12"}

}



if ($Drucker -eq  'Raum13'){

$Printer = (Get-WmiObject -Class win32_printer) | ? {$_.Name -eq "\\edu-dc\Oki_Raum13"}

}



$Printer.SetDefaultPrinter()

}





function Bestaetigung {

$test=$a = new-object -comobject wscript.shell

$b = $a.popup("Drucker wurde installiert",2, "Dieses Feld schließt sich automatisch",0)

}



function Installation {

$test=$a = new-object -comobject wscript.shell

$b = $a.popup("Drucker wird installiert",1, "Bitte warten",0)

}



function Registry {

$Pfad = "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Printers"

$regpfad = Test-Path $Pfad

if ($regpfad -eq $FALSE) {

new-item -path "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Printers"

new-item -path "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint"

new-itemproperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint\" -name "restricted" -type dword -value -"0"

}

}

 



################################################################

registry





[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")



################################################################



$objForm = New-Object System.Windows.Forms.Form

$objForm.StartPosition = "CenterScreen"

$objForm.Size = New-Object System.Drawing.Size(380,300)



$objForm.Text = "Druckerinstallation"



################################################################



$objLabel = New-Object System.Windows.Forms.Label

$objLabel.Location = New-Object System.Drawing.Size(10,20)

$objLabel.Size = New-Object System.Drawing.Size(200,50)

$objLabel.Text = "In welchem Raum befinden Sie sich?"

$objLabel.Name = "Raumabfrage"

$objForm.Controls.Add($objLabel)



################################################################



$Button1 = New-Object System.Windows.Forms.Button

$Button1.Location = New-Object System.Drawing.Size(20,80)

$Button1.Size = New-Object System.Drawing.Size(75,23)

$Button1.Text = "Raum 1"

$Button1.Add_Click({



Installation

DruckerInstallation ("Raum1")

Bestaetigung



$objForm.Close()





$objForm.Close()

})

$objForm.Controls.Add($Button13)



################################################################



[void] $objForm.ShowDialog()

[spoiler]

 

Die Credentials sollen gespeichert werden

Die Treiber(installations)abfrage soll automatisch mit "Immer Ja" bestätigt werden.

 

Gibt es Infos / Seiten wo ich das Nachschlagen kann? oder hat vl jemand eine Idee?!

 

LG

Slave

 

 

PS: Bei diesem Skript hatte ich Selbstverständlich Hilfe, doch leider steht diese "Hilfe" nicht mehr zur Verfügung.

 

Edit: Skript abgekürzt


Bearbeitet von Slavefighter, 30. Mai 2017 - 09:37.


#2 MurdocX

MurdocX

    Board Veteran

  • 585 Beiträge

 

Geschrieben 30. Mai 2017 - 12:40

Dein Skript ist etwas überdimensioniert und optimierungsbedürftig. 

 

Anstatt 20x :

if ($Drucker -eq  'Raum1'){
  $Printer = (Get-WmiObject -Class) | ? {$_.Name -eq "\\edu-dc\ES4132_Raum1"}
}

1x das hier: 

$Printer = Get-WmiObject -Class win32_printer | Where-Object { $_.Name -like "\\edu-dc\ES4132_$Drucker" }

Für unseren Bereich nutze ich meine geschriebene Funktion.

Function Connect-Printer
{
  param
  (
    [string]$Druckername
  )

  $PrintServer = '\\SRVPRINT'

  try
  {
    [VOID](New-Object -ComObject WScript.Network).AddWindowsPrinterConnection("$PrintServer\$Druckername")
    [VOID](Get-WmiObject -Class Win32_Printer | Where-Object {$_.Name -like "$PrintServer\$Druckername"}).SetDefaultPrinter()
    Out-File -InputObject "$(Get-Date);DRUCKER;VERBUNDEN!" -FilePath $LogPfad -Encoding default -Append
    Write-Host ":: Drucker '$Druckername' verbunden." -ForegroundColor Green
  }
  catch
  {
    Out-File -InputObject "$(Get-Date);DRUCKER;ERROR;$_" -FilePath $LogPfad -Encoding default -Append
    Write-Host ":: Drucker '$Druckername' FEHLER: $_" -ForegroundColor Red
  }

Um die Drucker einwandfrei installieren zu lassen, benötigst du auch kein Netzwerkshare, sondern nur eine Gruppenrichtlinie die das dem Benutzer autom. erlaubt:

"Point-To-Print Einschränkung" -> deaktivieren

 

Zitat: 

Mit dieser Richtlinieneinstellung wird das Point-and-Print-Verhalten von Clients, einschließlich der Sicherheitshinweise für Windows Vista-Computer, gesteuert. Die Richtlinieneinstellung gilt nur für Clients ohne Druckadministrator und nur auf Computern, die Mitglieder einer Domäne sind.
 
          Wenn Sie diese Richtlinieneinstellung aktivieren, geschieht Folgendes:
- Clients unter Windows XP und höher laden nur Druckertreiberkomponenten aus einer Liste explizit benannter Server herunter. Wenn ein kompatibler Druckertreiber auf dem Client verfügbar ist, wird eine Druckerverbindung hergestellt. Ist kein kompatibler Druckertreiber auf dem Client verfügbar, wird keine Verbindung hergestellt.
          - Clients unter Windows Vista können so konfiguriert werden, dass keine Sicherheitswarnungen oder Eingabeaufforderungen mit erhöhten Rechten angezeigt werden, wenn Benutzer Point-and-Print verwenden oder wenn Treiber für Druckerverbindungen aktualisiert werden müssen.
 
          Wenn Sie diese Richtlinieneinstellung nicht konfigurieren, geschieht Folgendes:
- Clientcomputer unter Windows Vista können Point-and-Print mit jedem Server verwenden.
          - Auf Computern unter Windows Vista werden eine Warnung und eine Eingabeaufforderung mit erhöhten Rechten angezeigt, wenn Benutzer mit Point-and-Print eine Druckerverbindung mit einem beliebigen Server herstellen.
          - Auf Computern unter Windows Vista wird eine Warnung und eine Eingabeaufforderung mit erhöhten Rechten angezeigt, wenn ein Treiber für eine vorhandene Druckerverbindung aktualisiert werden muss.
          - Clientcomputer unter Windows Server 2003 und Windows XP können über Point-and-Print eine Druckerverbindung mit einem beliebigen Server in ihrer Gesamtstruktur herstellen.
 
          Wenn Sie diese Richtlinieneinstellung deaktivieren, geschieht Folgendes:
- Clientcomputer unter Windows Vista können über Point-and-Print eine Druckerverbindung mit einem beliebigen Server herstellen.
          - Auf Computern unter Windows Vista wird keine Warnung oder Eingabeaufforderung mit erhöhten Rechten angezeigt, wenn Benutzer über Point-and-Print eine Druckerverbindung mit einem beliebigen Server herstellen.
          - Auf Computern unter Windows Vista wird keine Warnung oder Eingabeaufforderung mit erhöhten Rechten angezeigt, wenn ein Treiber für eine vorhandene Druckerverbindung aktualisiert werden muss.
          - Clientcomputer unter Windows Server 2003 und Windows XP können über Point-and-Print eine Druckerverbindung mit einem beliebigen Server herstellen.
          - Die Einstellung "Point-and-Print ist nur mit Computern der eigenen Gesamtstruktur möglich" betrifft nur Windows Server 2003 und Windows XP SP1 (und höhere Service Packs).

Mit freundlicher Unterstützung
Jan


#3 Slavefighter

Slavefighter

    Junior Member

  • 85 Beiträge

 

Geschrieben 31. Mai 2017 - 07:55

Vielen Dank für die Infos, werde es mal anpassen und Umbauen.

 

 

LG

 

Slave