coreknabe
Goto Top

Windows 7 Netzwerkdrucker mit Authentifizierung per Powershell hinzufügen

Hallo,

folgendes Problem: Ich möchte vorhandene Netzwerkdrucker, die sich auf einem Windows 2003-Server befinden, für Windows 7-Clients bereitstellen. Nun ist es aber so, dass die Benutzer sich noch einmal authentifizieren müssen, um die Drucker nutzen zu können. Dafür habe ich das Skript unten gebastelt. Zusätzlich wird das Passwort noch unsichtbar eingegeben und es erfolgt eine Fehlerabfrage.


@echo off
cls
echo.
echo.
echo.
echo 
echo 
echo #               ANMELDUNG AM DRUCKERKONTO               #
echo 
echo
echo.
echo.
set /p matnr=Bitte die Benutzerkennung eingeben:  
echo.
echo.
echo PASSWORT-EINGABE ERFOLGT UNSICHTBAR !
echo.
echo.
set "GetPW=%temp%\GetPW.vbs"   
echo WScript.Echo CreateObject("ScriptPW.Password").GetPassword()>"%GetPW%"   
echo Bitte Passwort eingeben:
for /f "delims=" %%i in ('cscript //nologo "%GetPW%"') do set "Pass=%%i"   
del "%GetPW%"  
echo.
echo.
net use lpt2: \\SERVER\DRUCKER /user:xxx\%matnr% %Pass% /persistent:no
echo.
echo.
if %errorlevel% == 0 echo
if %errorlevel% == 0 echo 
if %errorlevel% == 0 echo ### VERBINDUNG OK, DRUCKER KOENNEN ###
if %errorlevel% == 0 echo ###     JETZT GENUTZT WERDEN                       ###
if %errorlevel% == 0 echo
if %errorlevel% == 0 echo
if %errorlevel% == 2 echo
if %errorlevel% == 2 echo
if %errorlevel% == 2 echo !!! FEHLER, BITTE ERNEUT AN WINDOWS ANMELDEN     !!!
if %errorlevel% == 2 echo 
if %errorlevel% == 2 echo 
echo.
echo.
set Pass=
pause


Für Windows 7 habe ich schon mal dies gefunden, um die gemappten Drucker auszuwählen.:

# PowerShell add share printer
# Author: Guy Thomas
$PrinterPath = "\\Server\PrintShare"  
$net = new-Object -com WScript.Network
$net.AddWindowsPrinterConnection($PrinterPath)

Hier fehlt mir allerdings noch der Code, wo die Benutzer Ihre Kennung und Ihr Passwort eingeben können. Hat jemand ne Idee, wie man das mmit der Powershell macht? Bei Eingabe des Kennworts soll nichts bzw. Sternchen o.ä. erscheinen, wie im Batch oben. Und die Anzeige von Fehlern wäre ebenfalls fein...

Content-Key: 159594

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

Printed on: April 19, 2024 at 20:04 o'clock

Member: dog
dog Jan 27, 2011 at 14:33:52 (UTC)
Goto Top
Vielleicht solltest du erst AddPrinterConnection() aufrufen, dann sollte sich Windows die Login-Daten merken.
Member: Coreknabe
Coreknabe Jan 27, 2011 at 14:38:00 (UTC)
Goto Top
Funktioniert nicht, weil die mit einer anderen Userkennung ins System kommen.

Um es vielleicht noch einmal etwas zu verdeutlichen: Es stehen Systeme für ALLE bereit. Die Anmeldung an Windows erfolgt mit einem Benutzer der sehr eingeschränkte bis gar keine Rechte hat. Die nötigen Rechte wie z.B. fürs Drucken, müssen erst durch Eingabe der personenbezogenen Kennung und Passwort erlangt werden. Single-Sign-On geht also leider nicht.

Die Drucker sind im System schon vorhanden, nur hat der User, der als Default eingeloggt wird, keine Berechtigungen, diese auch zu nutzen.
Member: Coreknabe
Coreknabe Jan 28, 2011 at 14:34:44 (UTC)
Goto Top
Abfrage von Benutzername und Passwort habe ich umgesetzt, jetzt fehlt mir noch die Info, wie ich die Anmeldedaten an den Netzwerkdrucker knüpfe, mit dem ich drucken will... Sahnehäubchen wäre die Fehlerabfrage (verbunden oder nicht).

Das ist der Code für die Abfrage der Nutzerdaten:

$user=Read-Host -Prompt "Bitte geben Sie Ihren Benutzernamen ein"  
$password=Read-Host -Prompt "Bitte geben Sie Ihr Kennwort ein" -AsSecureString  
Member: Coreknabe
Coreknabe Feb 07, 2011 at 13:15:36 (UTC)
Goto Top
Problem gelöst, der komplette Code für alle Interessierten:

$matnr=Read-Host -Prompt "     Bitte geben Sie Ihren Benutzernamen ein"  
write-host ""  
$password=Read-Host -Prompt "     Bitte geben Sie Ihr Kennwort ein" -AsSecureString  
write-host ""  
$pwcl=[System.Runtime.InteropServices.marshal]::PtrToStringAuto([System.Runtime.InteropServices.marshal]::SecureStringToBSTR($password))

#Credentials an Netzwerkdrucker übergeben und verbinden
net use lpt2: \\SERVER\DRUCKER /user:DOMÄNE\$matnr $pwcl /persistent:no

#Laden benoetigter Bibliotheken fuer Rueckmeldungen
$bib=""  
$bib=[reflection.assembly]::LoadWithPartialName("System.Windows.Forms")  

#Auswertung Exitcodes und Anzeige Rueckmeldungen
if ($lastexitcode -eq 0)
{
    [System.Windows.Forms.Messagebox]::Show("Verbindung OK!   
    Die Drucker können jetzt genutzt werden.",("Druckerkonto") )  
}

else
{
    [System.Windows.Forms.Messagebox]::Show("   Verbindung fehlgeschlagen!   
    Haben Sie Benutzernamen und Passwort korrekt eingegeben? 
    Beachten Sie auch den Fehlertext in der Eingabemaske.
    Bitte versuchen Sie es erneut.",("Druckerkonto") )  
}