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
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3125225772
Url: https://administrator.de/forum/usereintraege-z-b-name-abteilung-im-ad-zum-kopieren-von-files-nutzen-per-batch-auf-ts-session-3125225772.html
Ausgedruckt am: 25.12.2024 um 18:12 Uhr
8 Kommentare
Neuester Kommentar
Moin,
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:
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
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.
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
Servus.
Über Powershell alle AD-Eigenschaften des aktuellen Users auflisten
https://docs.microsoft.com/en-us/windows/win32/adschema/attributes-all
Per Batch bestimmte Eigenschaften abfragen
Liste der möglichen Eigenschaften (Parmetern) von
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/window ...
Grüße Uwe
Zitat von @CommodoreC64:
Danke für die Antwort, gibt es denn eine Auflistung welche Platzhalter verfügbar sind ?
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
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%
dsget
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/window ...
Grüße Uwe
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
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!
mfg Crusher
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
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.
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.