amanogijn
Goto Top

PDFCreator - PsExec - RDP

Wir verwenden einen ESX Server, auf welchem Virtuelle Windows 7 x64 Maschinen für die Aussendiensmitarbeiter, laufen. Die AD - Mitarbeiter greifen per RDP auf diese Maschinen zu. Unter anderem benötigen diese Mitarbeiter den PDFCreator welcher auf unserem Druckserver freigegeben wurde.
Der PDFCreator wird dazu verwendet, aus einem Word, Excel oder aus einer CAD - Zeichnung ein PDF zu generieren welches anschliessend dirket in unsere Dokumentmanagement Software importiert wird.

Guten Tag liebe Administrator.de Mitglieder

Vorerst einige Informationen:

Mehrere physikalische Windows XP Clients
Mehrere physikalische Windows 7 Clients
2x ESX Server für Virtuelle Server (DNS, DHCP, AD, Druck, usw.)
1x ESX Server auf welchem Virtuelle Windows 7 Clients für die Aussendienst Mitarbeiter zur Verfügung gestellt werden.

Problematik:

Wir verwenden nun schon einige Monate das kostenlose Tool: PDFCreator. Dieses Tool stellt einen PDF - Drucker zur Verfügung welcher über einen Virtuellen Server für ALLE Mitarbeiter freigegeben wurde.
Dieser Drucker ist dafür zuständig, Dokumente wie zum Beispiel CAD Zeichnungen direkt als PDF in unser Dokumentmanagementsystem zu impotieren. Das ganze funktioniert wie folgt:

START ----------

Computer A: Druckauftrag an Server A

Server A: PDF wird generiert und auf Filer abgelegt.

Server A: Nach Abschluss der konventierung von xx.xx in PDF wird ein VBA Script ausgeführt, welches eine Teilapplikation des Dokumentensystems mit Administratorenrechte per PsExec anstuppst.
Dieses ist für den Importvorgang sowie für die richtige Zuordnung in dem Dokumentensystem zuständig.

Computer A: Prozess der Teilapplikation wird unter dem User: Administrator gestartet. Einige Sekunden später erscheint das Dokument in der Ordnerablage im Dokumentenmanagement.

ENDE -----------

Bei allen Mitarbeitern, welche hier in-house arbeiten, funktioniert dieser Vorgang problemlos. Egal ob Windows XP oder Windows 7. Bei Mitarbeitern, welche extern arbeiten und über RDP auf die Virtuelle Maschine zugreifen, funktioniet es nicht.
Alle Benutzer melden sich natürlich mit ihrem eigenen Profil an physischen sowie auch an den virtuellen Computern an.

Ich konnte während einigen Tests beobachten, dass der Prozess PsExec sowie auch die Teilapplikation jeweils als Administrator ausgeführt werden. Das ist auch richtig so. Was in meinen Augen jedoch ein Problem darstellt, ist, dass auf der RDP Session keine Applikationen von zur Zeit nicht angemeldeten Benutzern durchgeführt werden können. Liege ich da evtl. richtig?

Ich bitte euch um Hilfe face-smile Bin am verzweifeln!

Mit freundlichen Grüssen aus der Schweiz

AmanoGijn

Content-Key: 180576

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

Ausgedruckt am: 28.03.2024 um 20:03 Uhr

Mitglied: 60730
60730 15.02.2012 um 14:44:40 Uhr
Goto Top
moin,
Zitat von @AmanoGijn:
Wir verwenden nun schon einige Monate das kostenlose Tool: PDFCreator.
  • welche Version / wie installiert und auf welchem OS?

Dieser Drucker ist dafür zuständig, Dokumente wie zum Beispiel CAD Zeichnungen direkt als PDF in unser Dokumentmanagementsystem zu impotieren.
  • Naja - wohl eher um PDFs zu erzeugen, die mittels Script in das DMS importiert werden...
Das ganze funktioniert wie folgt:
  • neee - zeig mal lieber dein Script...

Bei allen Mitarbeitern, welche hier in-house arbeiten, funktioniert dieser Vorgang problemlos. Egal ob Windows XP oder Windows 7.
Bei Mitarbeitern, welche extern arbeiten und über RDP auf die Virtuelle Maschiene zugreifen, funktioniet es nicht.
  • moooooooooment....
  • Wenn einer über welchen Weg auch immer per rdp auf einen Server /RDP zugreift, dann ist der doch ein "lokaler" Benutzer...
Was in meinen Augen jedoch ein Problem darstellt, ist, dass auf der RDP Session keine Applikationen von zur Zeit nicht angemeldeten Benutzern durchgeführt werden können
  • ähhh kannst du mir das mal aufmalen? Hört sich irgendwie nach "Wie kann ich den Ast absägen, auf dem ich sitze, wenn ich im Bett liege" an..
Liege ich da evtl. richtig?
  • ich dachte, das script wird auf dem Server gestartet?

Ich bitte euch um Hilfe face-smile Bin am verzweifeln!
  • und ich kriech die Griese, wenn ich Maschiene lesen muß face-sad
Mitglied: AmanoGijn
AmanoGijn 15.02.2012 um 15:17:34 Uhr
Goto Top
Hey TimoBell

Vielen Dank für die Antwort.

Es ist die PDFCreator Version 1.2.0 installiert und läuft auf einem Windows 2008 R2 Server.

Nach dem erstellen des PDF Dokuments, wird folgender Script ausgeführt:

On Error Resume Next

Const WbemAuthenticationLevelPktPrivacy = 6



strUser = "Domain\Administrator"  
strPassword = "*****"  
strNamespace = "root\cimv2"    
strFile = Wscript.Arguments("0")  
strComputer = Wscript.Arguments("1")  
strImport = "\\Server\xxx\xxx\xxx.exe Archive Import Dokument"  


'Wiederholt so lange Host erreichbar ist bzw nicht unbekannter host als Meldung erscheint!  
do

If strComputer = "" Then  
do
strComputer = InputBox("Please enter correct Computername: ")  

loop until strComputer <> "" OR strComputer = False  
End If

'Erreichbarkeit des PC's testen - Ping==================  

Set objShell = CreateObject("WScript.Shell")  
strCommand = "%comspec% /c ping -n 3 -w 1000 " & strComputer & "" 'Ping ausführen  
Set objExecObject = objShell.Exec(strCommand)
'=======================================================  
Do While Not objExecObject.StdOut.AtEndOfStream
strText = objExecObject.StdOut.ReadAll()
If Instr(strText, "Anforderung") > 0 Then  
objshell.popup "Host " & strComputer & " nicht erreichbar!",3  
elseif Instr(strText, "Unbekannter Host " & strComputer & ".") <> 0 then  
objshell.popup "Host " & strComputer & " nicht erreichbar!",3  
end if
loop
loop while Instr(strText, "Unbekannter Host " & strComputer & ".")<>0 OR Instr(strText, "Anforderung") > 0  
'=======================================================  

'Verbindung zum WMI Namespace herstellen================  
Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")  
Set objWMIService = objwbemLocator.ConnectServer (strComputer, strNamespace, strUser, strPassword)
objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy
'=======================================================  

Function GetWMIServices()
Set GetWMIServices = GetObject("winmgmts:" _  
& "{impersonationLevel=impersonate}!\\" & strComputer & strNamespace)  
End Function


Set objWMIService = GetWMIServices()
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem")  

Set objShell = WScript.CreateObject("WScript.Shell")  
retval = objshell.run("C:\PDFCreatorImport\sleep.bat",0,True)  

For Each objItem In colItems
OSBuild = (objItem.BuildNumber)


if OSBuild = "2600" Then  

'Windows XP=============================================  

Set WSHShell = CreateObject("WScript.Shell")  
WSHShell.run ("C:\PDFCreatorImport\PsExec.exe \\"& strComputer &" -u "& strUser &" -p "& strPassword &" -e -i 0 "& strImport & " " & Chr(34) & strFile & Chr(34))  

'Windows 7 RC===========================================  

elseif OSBuild >= "7600" Then  

Set WSHShell = CreateObject("WScript.Shell")  
WSHShell.run ("C:\PDFCreatorImport\PsExec.exe \\"& strComputer &" -u "& strUser &" -p "& strPassword &" -e -i 1 "& strImport & " " & Chr(34) & strFile & Chr(34))  


End if

'Sleep.bat aufrufen=====================================  

Set objShell = WScript.CreateObject("WScript.Shell")  
retval = objshell.run("C:\PDFCreatorImport\sleep.bat",0,True)  

'xxx.pdf löschen========================================  

'Datei löschen  
Set fso = CreateObject("Scripting.FileSystemObject")  
fso.GetFile(strFile).Delete

Next

Die Benutzer melden sich über ein Servergespeichertes Profil an einer virtuellen MASCHINE an. Logisch ist es in dem Moment "lokal" abgespeichert. Doch der Benutzer wurde nicht lokal erstellt sondern im zentralen AD.
Da hast du Recht, das Scrpt wird auf dem Server gestartet. Mithilfe des Scripts jedoch, wird ein xx.exe File auf dem Zielcomputer ausgeführt.

Mit freundlichen Grüssen
Amano
Mitglied: 60730
60730 15.02.2012 um 16:37:12 Uhr
Goto Top
Salve,

  • ähh.. nee leider doch noch nicht...

Nochmal - Client hat einen freigegebenen und als Printserver eingerichteten PDF Creator.
(man kann den entweder /oder installieren - unabhängig davon, ob man den später freigibt oder nicht.)
Man sollte den aber für diesen Zweck als Standalone (wie auch immer der Punkt sich jetzt nennt) installieren.

Soweit so klar?

Nur - wie wird dieses Script aufgerufen?

strFile = Wscript.Arguments("0") 
strComputer = Wscript.Arguments("1") 

Das verstehe ich nicht - null ist klar, das ist die erzeugte pdf, aber was ist 1?
strFile = Wscript.Arguments("0") 
strComputer = Wscript.Arguments("1") 
If strComputer = "" Then do  strComputer = InputBox("Please enter correct Computername: ") 

Der Server? - kanns ja nicht sein - auf dem läuft ja das script
Der Client? - Auch eher unwahrscheinlich, denn Zeile 25...
'Erreichbarkeit des PC's testen - Ping
Der rechner, der den Druckjob erzeugt hat, muß doch an sein - wozu diese Abfragerei?

Nochmal zum mitdenken...

  • Ich hab ne simple Batch, die der PDF Creator nach jedem Drucken ausführt.
  • Die Datei liegt / wird auf - einem Server erzeugt und liegt da.
  • Wenn die datei vorhanden ist - ein paar kleine Spielechen und tests, ob die PDF "sauber" ist - schiebt der die in ein Archivsystem und das Archivsystem erkennt anhan einer Ordnerüberwachung, das es reagieren muß.

So mache ich das - war zwar auch "etwas" aufwändiger - aber im vergleich zu dem Scriptteil ein kurzes husten über die Tastatur.
(Und eine plausiblitätsprüfung hab ich auf die schnelle gar nicht gefunden)

Und eine Nachfrage hab ich noch:
Was macht denn die sleep.bat?

PS:
Logisch ist es in dem Moment "lokal" abgespeichert.

Nein - die Kiste, die der Benutzer bedient steht "lokal" das ist etwas ganz anderes.
Du merkst ich bin kleinlich, das kommt davon, wenn man sich öfters bücken muß face-wink
Mitglied: bastla
bastla 15.02.2012 um 21:43:45 Uhr
Goto Top
... bzw
Was macht denn die sleep.bat
... was ein
WScript.Sleep
nicht kann?

BTW: In
Wscript.Arguments("0")
sind ziemlich genau 2 Anführungszeichen entbehrlich (was das vergleichsweise "gutmütige" VBS aber kommentarlos durchgehen lässt) ...

Grüße
bastla
Mitglied: AmanoGijn
AmanoGijn 16.02.2012 um 09:09:17 Uhr
Goto Top
Guten Morgen Zusammen

Anhand folgender Grafik ist der Ablauf evtl. besser Verstänndlich:

http://www.picfront.org/d/8wwJ

Die xxx.exe benötigt den Filenamen und den Computernamen, desshalb die zwei Argumente.
Dem PDFCreator kann angegeben werden, was für Parameter übergeben werden sollen. Filename wird als erstes übergeben deshalb Wert 0. Computername wird als zweites übergeben deshalb Wert 1.

strFile = Wscript.Arguments("0")
strComputer = Wscript.Arguments("1")

Werden die Zwei Variabeln per MsgBox ausgegeben steht der erwartete und korrekte Wert darin.

Die sleep.bat Datei ist dafür da, den Löschvorgang nach dem Importvorgang um 7 Sekunden zu verzögern, so das dass File nicht vor dem Importvorgang gelöscht wird.

Vielen Dank und freundliche Grüsse
Amano
Mitglied: 60730
60730 16.02.2012 um 12:04:34 Uhr
Goto Top
Salve,

also nochmal...

  • angenommen die virtuellen Kisten sind W7 und haben "normale" Einstellungen, dann greift dein VBS daneben, weil ein Ping in die Hose geht.
Kannst du vom Server aus einen W7 Rechner anpingen?

Und dann - dieses obere Beispiel mit "mein PDFCreator" das ist keine Fantasie, sondern real hier am laufen.

Von daher - ich verstehs nicht wirklich...

Client erzeugt PDF und die soll in einem anderen System importiert werden.
Nur die PDF und sonst nix?

Wenn ja - dann hab ich da echt ein Problem mit der logik dahinter, denn das geht viel einfacher, wenn der Job, den der PDF Creator nach dem "Ausdruck" anwirft das alles steuert.
Kein PSexec vom Client aus an den DSM Server, sondern alles vom Printserver, wo das PDF auch liegt(erzeugt wird)
Mitglied: AmanoGijn
AmanoGijn 16.02.2012 um 12:43:47 Uhr
Goto Top
Hey

Also, die W7 Rechner sind vom Server pingbar. Wieso soll es also in die Hosen gehen?

Ich muss es vielleicht anderst definieren. Auf dem Server auf welchem der PDFCreator läuft, befindet sich ein VBS Script. Dieses VBS Script prüft das OS und ruft anschliessend die xxx.exe auf, welche sich auf dem DMS Server befindet.
Diese xxx.exe wird anschliessend mithilfe von PsExec mit Administratorenrechte auf dem Virtuellen W7 Rechner ausgeführt. Diese xxx.exe wurde von dem Hersteller des DMS mitgeliefert und ist für den Import von Dokumenten zuständig.

Ich weis ja nicht mit welchem DMS System ihr arbeitet. Fakt ist, dass es bei den internen Windows 7 Rechnern, welche exakt des externen entsprechen, einwandfrei funktioniert. (Windows 7 Build 7601).
Der einzige Unterschied ist, dass auf die virtuellen Rechner per RDP zugegriffen wird. Selbst ein Zugriff auf Session 0 bringt kein Erfolg. (mstsc /v:*Hostname* /console)

Ich habe heute morgen einen Vergleich zwischen einem internen und externen Client gemacht. Drucke ich von dem internen Client ein Dokument auf dem PDFCreator aus, vergehen keine 5 Sekunden und es erscheint die gewünschte xxx.exe im Taskmanager und der Importvergang wird durchgeführt.
Beim exterenen virtuellen Client wird das PDF Dokument zwar erstellt und auf dem Filer abgelegt jedoch wird es nicht importiert. Im Taskmanager erscheint auch kein Prozess welcher das ausführen der xxx.exe bestätigen würde.
Interessant ist, dass wenn ich mich direkt über die vSphere Konsole auf den Client einlogge, mit dem selben Benutzer, welcher keine Administratorenrechte besitze, funktioniert es.

Meiner Meinung nach kann es deshalb nur etwas mit RDP oder PsExec zu tun haben.

Wie seht ihr das?

Gruss und einen schönen Mittag
Amano
Mitglied: AmanoGijn
AmanoGijn 16.02.2012 um 14:20:07 Uhr
Goto Top
Hallo Miteinander

Die Lösung wurde gefunden. Die xxx.exe welche mit Psexec gestartet wird, wurde in der Session ID 1 gestartet, das ist falsch!
Bei einem RDP Zugriff wird jedoch Session ID 2 verwendet. Aus diesem Grund konnte ich den Prozess als Administrator auch erkennen.

Vielen Dank für eure manchmal auch "kleinlichen" Antworten ;D

Gruss
Amano
Mitglied: bastla
bastla 16.02.2012 um 14:39:51 Uhr
Goto Top
Hallo AmanoGijn!
Vielen Dank für eure manchmal auch "kleinlichen" Antworten ;D
Da ich mich angesprochen fühle: Gerne face-smile - war nach dem Motto "Jeder so gut, wie er kann" face-wink (und zumindest den Aufruf der "Sleep.bat" könntest Du wirklich durch ein einfaches
WScript.Sleep 7000
ersetzen) ...

Grüße
bastla