l.jablonski
Goto Top

Powershell UNC +Credentials Hilfe

Hallo Zusammen,

Erstmal Hintergrundwissen:
Mit der Hilfe von anderen Usern konnten wir ein Skript ausarbeiten, was die Zeitstempel von Dateien überwacht.
Der Kunde scannt Dokumente in einen Hotfolder und deswegen dürfen die da nicht länger als 10 min drin sein.
Sollte eine Datei länger als 10 min drin sein, startet das Skript automatisch den jeweiligen Dienst neu.

Das Skript sieht wie folgt aus (Powershell):
#Variablen ausfüllen
$watchfolder = '\\dcsrv\public\Scanner-Eingang'#UNC Pfade funktionieren  
$CurTimeStamp = Get-Date
$FileAge = 10 #in Minuten

#Er prüft die Zeit der Dokumente
$Files = Get-ChildItem -Path $watchfolder  | Where-Object{($_.LastWriteTime -le $CurTimeStamp.AddMinutes(-1 * $FileAge))}

#Für jedes Dokument
ForEach ($File in $Files) {
    Write-Host " " $File " - " $File.LastWriteTime  
    ## Damit wir der Dienst neugestartet
    Restart-Service -Name Spooler
    
    ## Sobald er eine Datei gefunden hat stopt er
    break
    }

Zum Verständnis, der Server ist nicht in der Domain auf dem der Dienst läuft und die Hotfolder sind auf einem Domaincontroller.
Deswegen brauche ich die Credentials, das Powershell den UNC Pfad finden kann.

Meine folgende Versuche sind gescheitert:

#Variablen ausfüllen
$watchfolder = '\\dcsrv\public\Scanner-Eingang'#UNC Pfade funktionieren  
$CurTimeStamp = Get-Date
$username = 'user'  
$password = '1234'  
$FileAge = 10 #in Minuten

#Er prüft die Zeit der Dokumente
$Files = Get-ChildItem -Path $watchfolder $username $password | Where-Object{($_.LastWriteTime -le $CurTimeStamp.AddMinutes(-1 * $FileAge))}

#Für jedes Dokument
ForEach ($File in $Files) {
    Write-Host " " $File " - " $File.LastWriteTime  
    ## Damit wir der Dienst neugestartet
    Restart-Service -Name Spooler
    
    ## Sobald er eine Datei gefunden hat stopt er
    break
    }

Ich habe probiert nach meinem Pfad die Credentials anzuhängen leider ohne Erfolg.

#Variablen ausfüllen
$watchfolder = '\\dcsrv\public\Scanner-Eingang'#UNC Pfade funktionieren  
$CurTimeStamp = Get-Date
$FileAge = 10 #in Minuten

#Er prüft die Zeit der Dokumente
$Files = Get-ChildItem -Path $watchfolder /user:user password:1234 | Where-Object{($_.LastWriteTime -le $CurTimeStamp.AddMinutes(-1 * $FileAge))}

#Für jedes Dokument
ForEach ($File in $Files) {
    Write-Host " " $File " - " $File.LastWriteTime  
    ## Damit wir der Dienst neugestartet
    Restart-Service -Name Spooler
    
    ## Sobald er eine Datei gefunden hat stopt er
    break
    }
Dieser Versuch war leider auch ohne Erfolg.

Nun hoffe ich jemand kann mir helfen.

Danke für de Rückmeldung!

Grüße

L.J

Content-ID: 666588

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

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

em-pie
em-pie 10.05.2021 um 13:18:13 Uhr
Goto Top
Moin,

arbeitet ein New-PS-Drive ein:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...


Ferner:
beschäftige dich auch damit, wie du Zugangsdaten übermittelst, ohne die Kennwörter im Klartext im Script zu verweigen.
Get-Credential ist dein Freund

https://docs.microsoft.com/de-de/powershell/scripting/learn/deep-dives/a ...

Gruß
em-pie
148121
Lösung 148121 10.05.2021 aktualisiert um 13:36:04 Uhr
Goto Top
Am einfachsten starte das Skript direkt mit dem Taskplaner und den richtigen Credentials. Alternativ hinterlege die Credentials für den Server in der Anmeldeinformationsverwaltung des entsprechenden Accounts dann sind auch im Skript keine unsicheren Klartext Credential-Angaben mehr nötig weil der Zugriff dann so schon klappt.

Gruß w.
l.jablonski
l.jablonski 11.05.2021 um 17:57:19 Uhr
Goto Top
#warranty

Das war auch meine erster Gedanke mit dem Taskplaner aber leider geht das nicht, weil wenn du die Credentials eingibst mit oder ohne Domain, sagt er es wäre ungültig, weil er es nicht kennt.

Das zweite probiere ich mal geschwind aus, danke dir :D

Grüße

L.J
l.jablonski
l.jablonski 11.05.2021 um 18:15:22 Uhr
Goto Top
Hat bestens mit den Windows Anmelde Credentials funktioniert danke dir, schnelle und einfache Lösung!

Grüße