Powershell Script mit UNC Pfaden

Haraldson

Lt. Junior Grade
Registriert
Nov. 2011
Beiträge
260
Hallo Community,

bräuchte mal wieder Hilfe^^

Konkret geht es um folgendes: Es soll ein PS Script laufen, welches einen Ordner überwacht und sobald dort eine bestimmte Datei entsteht soll er diese verschieben und als Suffix das Datum + Uhrzeit anhängen. Nett wäre die ganze Geschichte jetzt noch mit UNC Pfaden . . .

Als absoluter Laie habe ich mir jetzt mal folgendes Script zusammengeschrieben:

$folder = ’C:\Testordner’
$timeout = 100
$FileSystemWatcher = New-Object System.IO.FileSystemWatcher $folder
while($true) {

move-item "C:\Testordner\*.txt" ("C:\Testordner2\Test_{0:ddMMyyyy_HHmmss}.txt" -f (get-date))
move-item "C:\Testordner\*.bmp" ("C:\Testordner2\Test_{0:ddMMyyyy_HHmmss}.bmp" -f (get-date))

}
Write-Host ”Press CTRL+C to abort monitoring $folder”
while ($true) {
$result = $FileSystemWatcher.WaitForChanged(‘all’, $timeout)
if ($result.TimedOut -eq $false)
{
Write-Warning (‘File {0} : {1}’ -f $result.ChangeType, $result.name)
}
}
Write-Host ’Monitoring aborted.’

Nun funktioniert das Ganze lokal recht gut bis auf ein paar Ausnahmen . . . nun würde ich das Ganze nur mit UNC Pfaden benötigen und da stecke ich aktuell fest und komme nicht weiter . . . .

Auch würde ich das Ganze gerne als Job anlegen so das dieses Script im Hintergrund läuft . . . da stecke ich auch noch fest^^

Evt. Habt ihr Ideen was ich ändern müsste . . .

Danke schonmal vornweg

LG

Haraldson
 
Verstehe dein Problem nicht, schreib doch statt "C:\Testordner2\Test_{0:ddMMyyyy_HHmmss}.txt" einfach "\\Computername\c$\Testordner2\Test_{0:ddMMyyyy_HHmmss}.txt"
Freigabenberechtigung natürlich beachten, wenn du es über die Aufgabenplanung laufen lässt kannst du auch einen Benutzer für die Ausführung angeben.
 
  • Gefällt mir
Reaktionen: Micha45
Ergänzend zu dem was @burglar225 bereits schrieb, gibt es noch eine weitere Möglichkeit Netzlaufwerke statt UNC-Pfade zu nutzen. Damit diese in einer Powershell mit erhöhten Rechten verfügbar sind, kann man folgenden Registryeintrag hinzufügen:
  1. In Registry Editor, locate and then click the following registry subkey:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
  2. Right-click Configuration, click New, and then click DWORD (32-bit) Value.
  3. Name the new registry entry as EnableLinkedConnections.
  4. Double-click the EnableLinkedConnections registry entry.
  5. In the Edit DWORD Value dialog box, type 1 in the Value data field, and then click OK.
  6. Exit Registry Editor, and then restart the computer.
 
burglar225 schrieb:
eine Kommandozeile als SYSTEM-User zu starten und per "net use"-Befehl ein Netzlaufwerk anzulegen, auf das das Skript dann auch Zugriff hat.
Das kann man aber auch im PS script selber lösen
PowerShell:
(Get-Credential).password | ConvertFrom-SecureString > ".\<textdatei>" # Anlegen der Passwortdatei für Benutzerautentifzierung
$pw = Get-Content '.\<textdatei>' | ConvertTo-SecureString # holt sich das Passwort aus der verschlüsselten Datei und speichert es als Securestring, ist erforderlich
$cred = New-Object System.Management.Automation.PSCredential "<Domain\User>", $pw # Erzeugen der Anmeldungsdaten für die Freigabe
New-PSDrive -Name "<Freigabename>" -PSProvider "FileSystem" -Root "<Freigabepfad>" -Credential $cred # Erzeugen einer Freigabe in Powershell , diese ist im Explorer nicht sichtbar und ist nur für die PSSession aktiv
#Zugriff auf die Freigabe kann innerhalb des Scripts bei einer Pfadangabe mittels <Alias:\Ordner unterhalb der Freigabe> erfolgen
Remove-PSDrive -Name "<Freigabename>" # Aufheben der Freigabe
Das Script liest dann bei bedarf das Passwort ein, erstellt eine Freigabe auf die man innehalb des Scripts bequem per Alias zugreifen kann und entfernt die Freigabe am Ende auch wieder.
 
  • Gefällt mir
Reaktionen: burglar225 und snaxilian
Wie gesagt bin absoluter Laie was das angeht . . .

Das Script funktioniert soweit so gut jetzt auch mit Netzlaufwerken . . . vielen Dank dafür !

Nun hätte ich gerne, dass dieses Script auf einem Client oder Server automatisch im Hintergrund läuft und falls es mal beendet wird auch wieder startet. Gibt es hier eine Möglichkeit das als Dienst einzustellen? Das mit der Aufgabenplanung funktioniert bei mir nicht auch wenn ich es vom System oder Admin ausführen lasse . . .

Den Trick mit der Verknüpfung der powershell.exe und dem Parameter -windowstyle hidden funktioniert auch nicht.

Habt ihr da evt. noch eine Idee wie ich das Ganze realisieren kann? Grundsätzlich geht es bei dem Script darum, das dieses einen Ordner überwachen soll und wenn dort eine .txt Datei erstellt wird soll er diese mit Datum + Uhrzeit als Suffix an einen anderen ordner verschieben. Und dies sollte halt dauerhaft passieren.
 
Haraldson schrieb:
Das mit der Aufgabenplanung funktioniert bei mir nicht auch wenn ich es vom System oder Admin ausführen lasse . . .

Den Trick mit der Verknüpfung der powershell.exe und dem Parameter -windowstyle hidden funktioniert auch nicht.
Trag bei Argument -File "<Voller Scriptpfad + Dateiname>" mit "" ein und bei Starten in, nur den Pfad in dem das script liegt ohne ""
 
Okay lt google sollte man es so machen:

Bei Programm/Skript:

%systemroot%\system32\windowspowershell\v1.0\powerShell.exe

Bei Argument:

-command "C:\Scripts\Test.ps1"

Muss man es jetzt mit -command oder mit -file machen?
 
Haraldson schrieb:
Muss man es jetzt mit -command oder mit -file machen?
Keine Ahnung, bei mir hatte es am Anfang mit -Command nicht funktioniert aber da fehlte noch der Punkt "starten in". Hab dann beides gleichzietig gesetzt und die Powershellscripte wurden wie gewünscht ausgeführt. Da hab ich es dann nicht nochmal mit -Command probiert.
 
Also bei mir funktioniert es weder mit -file noch mit -command noch wenn ich es ohne Befehl mache . . . .
 
Mittlerweile funktioniert es . . . des Rätsels Lösung war bei Programm/Skript folgendes einzutragen:

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -file "C:\Scripts\Test1.ps1"

Dann kommt eine Abfrage ob man das Programm mit den Argumenten ausführen möchte. Dies mit ja bestätigen, dann trägt Windows die Argumente automatisch ein.
 
Eine Abfrage ist aber ziemlich ungünstig für eine geplante Aufgabe. Normalerweise steht der -noninteractive Parameter mit drin und persönlich hat bei mir immer powershell.exe als Startanwendung genügt.
Ich hatte dort https://www.computerbase.de/forum/t...icht-ausgefuehrt-werden.1875823/post-22738753 mal erklärt wie man sich Modul- und Skriptpfade in seine Powershell Session holt. Denn deine Abfrage kommt ja im Prinzip nur, weil es bei deiner aktuellen ExecutionPolicy nicht zugelassen werden soll, dass Skripte von überall starten.
 
  • Gefällt mir
Reaktionen: Haraldson
Super Danke, das hat mir sehr weitergeholfen und nun geht alles wie ich es mir vorstelle !
 
Zurück
Oben