commodorec64
Goto Top

Usereinträge (z.B. Name, Abteilung) im AD zum kopieren von Files nutzen per Batch auf TS Session

Hallo, ich möchte gerne aus den Einträgen die im AD zu jedem User gemacht werden können diese Werte zum kopieren/verschieben von Dateien nutzen.
Also wie z.B. in per Powershell
Get-ADUser .......

Hintergrund ist der, das eine Anwendung PDF Dateien erzeugt die nur den Namen von ID Nummern enthält.
Also wenn ein Mandant die ID 3412 hat heißt das File 3412_1.pdf
Das nächste heißt dann 3412_2.pdf usw.
Den Speicherort wo die Anwendung die Files abspeichert kann ich zentral einmalig bestimmen.
Danach müssen diese Files in ein anderes privates Verzeichnis kopiert werden das den Namen des Anwenders hat da die Anwendung keine Wildcards im Verzeichnispfad erlaubt.
Alles soll auf einem TS laufen und dann natürlich je nach eingeloggten User in ein anderes Verzeichnis kopieren.
Jeder User hat eine Laufwerksumleitung M: die auf seinen eigenen Bereich leitet

Also hier ein Beispiel, der User heisst KARL und es gibt ein zentrales eigenständiges Verzeichnis \\server\karl

1. Jeder User bekommt ein Verzeichnis M:\work (somit hat die zentrale Anwendung einen gültigen Pfad der aber bei Jedem TS User an einen anderen privaten Ort verweist.
2. Ein Batch wird erstellt in dem ein Copy (Movebefehl) alle Dateien aus dem Ordner m:\work in seinen Ordner \\server\karl verschiebt
3. Der Batch wird per Taskplaner bei jedem User alle 5 Minuten ausgeführt

Mir fehlt also der Befehl für den Batch der aus dem AD Einträgen von jedem User der auf seiner Session auf dem TS angemeldet ist den Ordner \\server\karl als Platzhalter verwenden kann. Also der Batch soll gleich sein und bei einem angemeldeten User SUSI in das Verzeichnis \\server\susi kopieren.

Ich hoffe ich habe mich verständlich ausgedrückt.
Natürlich bin ich für andere Vorschläge offen und wäre sehr froh wenn Ihr mir Hilfestellung geben könntet.

LG
Chris

Content-Key: 3125225772

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

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

Member: erikro
erikro Jun 20, 2022 at 13:45:16 (UTC)
Goto Top
Moin,

das steht in der Umgebungsvariablen USERNAME.

Powershell:

\\server\$env:username

Batch:

\\server\%username%

hth

Erik
Member: CommodoreC64
CommodoreC64 Jun 20, 2022 at 13:56:53 (UTC)
Goto Top
Danke für die Antwort, gibt es denn eine Auflistung welche Platzhalter verfügbar sind ?

Ich würde gerne eventuell auch das Feld Pager (als Nummernfeld) missbrauchen und dort die MitarbeiterID eintragen falls es doch mal zwei Karl´s oder zwei Susi´s gibt. Dann es auf jeden Fall eindeutig und einmalig.

Funktioniert die Powershell den in einer Usersession auf einem TS ?

LG
Chris
2022-06-20 15_50_37-172.16.14.11 - remotedesktopverbindung
Member: erikro
erikro Jun 20, 2022 at 14:13:11 (UTC)
Goto Top
Moin,

Zitat von @CommodoreC64:
Ich würde gerne eventuell auch das Feld Pager (als Nummernfeld) missbrauchen und dort die MitarbeiterID eintragen falls es doch mal zwei Karl´s oder zwei Susi´s gibt. Dann es auf jeden Fall eindeutig und einmalig.

Der Username ist eindeutig. Den gibt es mit Sicherheit nur einmal in einem System. Ansonsten kannst Du die Liste der Umgebungsvariablen in der PS anzeigen lassen mit:

cd env:\
ls

Funktioniert die Powershell den in einer Usersession auf einem TS ?

Ja. Evtl. musst Du noch das Ausführen der Skripte in irgend einer Weise (am Besten nur signierte mit entsprechender Infrastruktur dahinter) erlauben.

Liebe Grüße

Erik
Member: CH3COOH
CH3COOH Jun 20, 2022 at 14:33:32 (UTC)
Goto Top
Hallo,
es gibt Extension Attribute im Active Directory. Sowie die Felder EmployeeID und EmployeeNumber.

Das zweckentfremdete Nutzen von Attributen kann nach hinten los gehen face-wink

Gruß
Member: colinardo
colinardo Jun 20, 2022 updated at 18:01:39 (UTC)
Goto Top
Servus.
Zitat von @CommodoreC64:
Danke für die Antwort, gibt es denn eine Auflistung welche Platzhalter verfügbar sind ?

Über Powershell alle AD-Eigenschaften des aktuellen Users auflisten
[adsisearcher]::new("(samAccountName=$env:Username)",'*').findOne().Properties  
https://docs.microsoft.com/en-us/windows/win32/adschema/attributes-all

Per Batch bestimmte Eigenschaften abfragen
@echo off
set "var="  
for /f "skip=1" %%a in ('dsquery user -samid %username% ^| dsget user -pager') do if not defined var set "var=%%a"  
echo %var%
Liste der möglichen Eigenschaften (Parmetern) von dsget
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/window ...

Grüße Uwe
Member: Crusher79
Crusher79 Jun 20, 2022 updated at 20:26:39 (UTC)
Goto Top
Hallo,

geht mit PowerShell. Scripte kann man ausührbar machen. Wahlweise auch selbstsignieren. Da sollte es keine großen Probleme geben.

Task alle x-Minuten ist möglich. Alternativ kann man auch engmaschiger mit Art "Hotfolder" überwachen. Im Prinzip kann man sowas aus der Sicht des Users (vom Client) oder vom Server aus aufziehen. Bei letzteren müsste der aber wissen, woher das PDF kommt. Wer es initiert hat. PDFCreator im Netzwerk (die alte 1.3.x ist noch kostenlos) kann sowas. Im vollständigen Druckerauftrag steht der Rechner und er User (als Author) mit drin. Damit hätte man alles beisammen.

pdf2text

Wenn man aus ERP Systemen wie o.ä. druckt kommt es auch oft vor, dass nur der Formularname.pdf o.ä. dort steht. Metadaten fehlen..

Mit pdf2text kann man als Zwischenschritt aus den PDF Dateien die Infos herausziehen. Je nach Dokumentenaufbau steht Sachbearbeiter, Vorgang etc. ja mit drin. Ist der Aufbau also immer gleich, kann man auch mit regulären Ausdrücken die Infos herausziehen und in den Copy String einbauen.

Es sind relativ wenig Zeilen Code und dauert nur vlt. 1-2 Sekunden länger in der Verarbeitung.

Erstellt man selber die PDF via PDFCreator oder z.B. Mfilemon so kann man wie gesagt im Vorfeld noch mehr Einfluß drauf nehmen.

Ist das PDF schon da, kann man versuchen einfach die erforderlichen Parameter zu extrahieren.

Problem: Nicht immer stehen Legenden und Werte neben/ direkt untereinander


Sachbearbeiter: Max Mustermann
oder 
Sachbearbeiter
Max Mustermann 

Je nach Formulargenerator, den die Software verwendet. können die Zeilen unterschiedlich interpretiert werden.

pdf2text ist nur ein Einzeiler. Vorteil wäre hier, dass du die ID durch Vorgang/ Kunden/ Mandantenbezeichung ersetzen kannst und gleich einen aussagekräftigen Namen hast. Ist es mal nicht eindeutig, kann man auchgenerischen Namen - die ID oder "manuell_zuordnen.pdf" als Namen einfügen lassen. .

Da die extrahierten Texte temp. auf den Server liegen, kommt auch hier keiner an die Infos so einfach dran. Das Copy Traget ist auch flexibel. Irgendwas, wo nur der User drauf Zugriff hat.

TXT lässt sich in Raw Format oder als Array einlesen. Je nachdem, wie der Aufbau des PDFs ist mit Reg. Ausdrücken und einfach sturr nach Line X suchen.

Beispiel für TXT Import im Raw Format!

Function FindBelegNr($PDFToTextFile)
    {
		#PDF in durchsuchbaren Text umwandeln. simple2 und clip zum "normalisieren" 
        Start-Process -NoNewWindow -Wait $pdftotext -ArgumentList "-simple2", "-clip", "-f 1", "-l 1", $PDFToTextFile, $TempTextFile  

        $texttest = Get-Content -Path $TempTextFile -Raw

        #$patternBelegRe = "Rech.-Nr. " 
        #$patternBelegAb = "Auf.-Nr. " 
        [string] $DokBelegAbRe =""  
                
        #Angebot Nr in einer Zeile
        $regex_An = "(ANGEBOT )(Kunden-Nr\. )(Angebot-Nr\. )(Datum )(Seite)\r\n([\d]+)\s([\d]+)"                  
        #Auf ODER Rech übermehrere Zeilen
        $regex_AbRe = "(.*)\r\n(Ihr Ansprechpartner: )(Kunden-Nr\. )((Auf|Rech)\.-Nr\. )(Datum )(Seite)\r\n(.*)\s([\d]+)\s([\d]+)"  
                
        $texttest | select-string -Pattern $regex_AbRe -AllMatches | % { $DokBelegAbRe = $_.Matches.Groups[1].Value + "_" + $_.Matches.Groups[10].Value }  

        IF ($DokBelegAbRe.length -gt 0) { $Script:Belegnr = $DokBelegAbRe }
}

mfg Crusher
Member: CommodoreC64
CommodoreC64 Jun 21, 2022 at 05:49:41 (UTC)
Goto Top
Absolut super.
Vielen lieben Dank für Eure ausführlichen Antworten.
Werde mich damit mal ans Werk machen und schauen was ich umsetzen kann.
Powershell ist (noch) nicht so meins und schon garnicht in einer TS Session, aber mal sehen was ich zustande bringe.

Melde mich dann natürlich nochmal wenn es etwas brauchbares gibt.

LG
Chris
Member: Crusher79
Crusher79 Jun 21, 2022 updated at 06:45:10 (UTC)
Goto Top
Wie gesagt die Idee dahinter ist die, das wir kein OCR haben. Nicht Feld A, B und dann zieht es dir Strings raus. ABER der Aufbau im Stream der PDF sieht meist immer gleich aus. Damit kann man arbeiten.

Wenn man den Namen der PDF statt mit ID mit einer Vorgangsart, Auftragsnummer etc. bildet, kann man das ggf. auch ins DMS integrieren o.ä. In manchen Fällen gibt es sowas und man die vorhandene Schnittstelle nutzen.

Darum kann es sich durchaus lohnen aus den PDF versch. Werte zu extrahieren.