WMI kann das, aber ich habe ein Problem. Die PCs sind eingeschaltet, aber abgemeldet. Wenn ich versuche, Folgendes auszuführen:
wmic /node:%strIP% printer where DeviceID="lp1" set DriverName="Lexmark Universal v2"
Es schlägt mit einer Meldung über einen „generischen Fehler“ fehl. Ich melde mich per RDP an und führe dann denselben Befehl von meinem Ende aus aus, und es funktioniert. Die von mir verwendete Powershell-Version ist älter, daher fehlen einige der Drucker-Cmdlets, und eine Aktualisierung von PS kommt derzeit nicht in Frage. Gibt es eine Möglichkeit, jemanden per Remote-Zugriff anzumelden, ohne sich tatsächlich per RDP anmelden zu müssen? Über PS, cmd, PSEXEC usw.?
Der andere Weg, den ich gewählt habe, ist die Verwendung von regedit, aber damit stoße ich auf einige Probleme, nämlich, dass ich nicht herausfinden kann, was ich kopieren soll. In regedit kann ich den Treibernamen und die Einstellung ändern, die Duplex und Fach 2 aktivieren (in den Druckereinstellungen), aber ich kann nicht herausfinden, wie ich die Einstellungen in den Druckereinstellungen für beidseitiges Drucken und dies entlang der langen Kante ändern kann.
Um herauszufinden, was ich ändern muss, habe ich in regedit nach dem Druckernamen als Datenwert gesucht und die Schlüssel exportiert, bevor ich die Einstellungen geändert habe. Dann habe ich es NACH dem Ändern der Einstellungen erneut exportiert. Anschließend habe ich fc /c /a /u before.reg after.reg
die Änderungen erhalten. Ich habe die .reg-Datei so zerstückelt, dass nur die geänderten Werte enthalten sind. Das Ausführen der .reg-Datei scheint alles zu ändern, außer die Einstellungen für beidseitiges Drucken entlang der langen Kante. Es handelt sich um einen Lexmark-Drucker, daher frage ich mich, ob die Einstellungen dafür vielleicht woanders gespeichert sind.
Meine Firma hat vor Kurzem die Sicherheitsrichtlinien dahingehend geändert, dass ein PC nach 30 Minuten Inaktivität abgemeldet wird. Diese Treiberänderungen können nicht während der normalen Arbeitszeiten durchgeführt werden, wenn die PCs NICHT abgemeldet sind. Daher werden sie bis jetzt über Nacht durchgeführt, indem man sich per RDP anmeldet und die einzelnen PCs manuell durchführt. Ich hätte nichts dagegen, herauszufinden, wie man jemanden remote anmeldet, ohne sich jemals per RDP anzumelden, damit WMI dann seine Magie entfalten kann.
Ich habe es nur mit Powershell versucht:
$Str = Read-Host "Please select a store number [###] "
$PC = Read-Host "Please select a PC number [##] "
$PCNm = "0$Str-CCPC-$PC"
$lp1 = Get-WMIObject -ComputerName $PCNm -Query "SELECT * from Win32_Printer Where DeviceID='lp1'"
$lp1.DriverName = "Lexmark Universal v2"
$lp1.Put()
Auch dort schlägt es mit einem allgemeinen Fehler fehl, wenn niemand am PC angemeldet ist. Ich kann WMI nach Eigenschaften abfragen, also funktioniert WMI, aber wenn ich versuche, Werte festzulegen, schlägt es fehl. Ich habe es mit einem überprüft, format-list -property drivername
es wurde problemlos aktualisiert, nachdem ich mich über RDP angemeldet und DANN das Skript ausgeführt habe. Offensichtlich möchte ich mich überhaupt nicht über RDP anmelden. Ich habe PSRemoting auf dem PC aktiviert, nur für den Fall, also werde ich es als invoke-command
Nächstes versuchen.
Antwort1
Gibt es eine Möglichkeit, jemanden aus der Ferne anzumelden?
Sie können psexec
einen Remote-Befehl als bestimmter Benutzer ausführen.
psexec \\computer -u user -p psswd [options] command [arguments]
Versuchen Sie den folgenden Befehl:
psexec \\computer -u user -p psswd wmic /node:%strIP% printer where DeviceID="lp1" set DriverName="Lexmark Universal v2"
Anmerkungen:
- Möglicherweise möchten Sie sich auch die
@run_file
Option „Befehl auf jedem Computer ausführen, der in der angegebenen Textdatei aufgeführt ist“ ansehen. - Um die Ausführung auf allen Computern in der aktuellen Domäne auszuführen, geben Sie
\\*
statt\\computer
Syntax
psexec \\computer[,computer[,..] [options] command [arguments] psexec @run_file [options] command [arguments]
Optionen:
computer The computer on which psexec will run command. Default = local system To run against all computers in the current domain enter "\\*" @run_file Run command on every computer listed in the text file specified. command Name of the program to execute
...
-p psswd Specify a password for user (optional). Passed as clear text. If omitted, you will be prompted to enter a hidden password. -u user Specify a user name for login to remote computer(optional).
Quellepsexec
Weitere Informationen
- Ein AZ-Index der Windows CMD-Befehlszeile- Ein hervorragendes Nachschlagewerk zu allem, was mit der Windows-Eingabeaufforderung zu tun hat.
- psexec- Führen Sie einen Befehlszeilenprozess auf einem Remotecomputer aus. Führen Sie einen Befehlszeilenprozess auf einem Remotecomputer aus.