PS1 Skript läuft nicht über Aufgabenplanung

Retsam-Master

Banned
Registriert
Jan. 2019
Beiträge
1.100
Hallo Zusammen

Wen ich mein Skript IN Powershell starte, funktioniert es.
Wen ich es über aufgabenplanung starte, funktioniert es nicht.
Der gesammte Inhalt ist so:

PowerShell:
Get-ChildItem "J:\test\Verzeichnis\*.txt" | forEach {
(Get-Content $_ |
forEach {$_ -replace ' & ', '&' }) |Set-Content $_
}

Weis jemand wieso?
 
Wie wird denn das Powershell Skript in der Aufgabenplanung gestartet?
 
T3Kila schrieb:
Wie wird denn das Powershell Skript in der Aufgabenplanung gestartet?
Ich starte powershell mit dem zusatz -command "pfad der Datei"
Habe so einige Powershell skripts laufen und die funktionieren

Ich finde es hier evt. komisch das so ein kleines kästchen im skript vor kommt wegen der schlaufe das haben die anderen Skripts so nciht
803187
 
Ich bin mir sicher deine Aufgabenplanung, oder das EventLog sagt dir auch wieso.

//edit: -command ist direkt für ein Kommando da. Sprich deinen Einzeiler kannst du direkt in den Aufruf mit packen.
-file ist für das Ausführen eines Files da.

//edit2: Und wieso hast du noch ein zweites ForEach? -replace agiert doch dann eh auf dem gesamtem Content?

//edit3: -ExecutionPolicy Bypass kann helfen.
 
Zuletzt bearbeitet:
Ahhhhh jetzt...
Es darf nicht auf einem Netzlaufwerk liegen.
Habs nun auf ein Lokales Laufwerk geschoben und es funktioniert

//edit2: Und wieso hast du noch ein zweites ForEach? -replace agiert doch dann eh auf dem gesamtem Content?
Wurde mir mal so hier empfohlen :D
 
Doch, es darf auf einem Netzlaufwerk liegen. Wegen etwaiger UAC Rechteanhebung oder dem Laufen des Skripts im Maschinenkontext müssen die Freigaberechte passen und es empfiehlt sich grundsätzlich UNC Pfade in den Skripten zu nutzen. Es gibt aber einen Registryeintrag der Netzlaufwerke trotz UAC erlaubt.
 
Bei mir hat der Code aus dem ersten Beitrag in der PS-Konsole (Mit Adminrechten) nicht funktioniert.
Habe es bei mir eben mal mit angepasstem Pfad probiert. Da wird in den Textdateien nichts ersetzt.
Deshalb wundert mich die Aussage, dass der Code funktionieren soll.
Es liegt an dem Code.

Dieser funktioniert jedoch, auch über die Aufgabenplanung:
PowerShell:
$FilePath = "J:\test\Verzeichnis"
$TextFiles = (Get-ChildItem -Recurse "$FilePath\*.txt").Name
ForEach ($TextFile in $TextFiles)
{
    (Get-Content "$FilePath\$TextFile").Replace(" & ", "&") | Set-Content "$FilePath\$TextFile"
}

UNC-Pfade muss man so verwenden:
$("\\"+$Env:COMPUTERNAME+"\J$\test\Verzeichnis")

PowerShell:
$FilePath = '$("\\"+$Env:COMPUTERNAME+"\J$\test\Verzeichnis")'
$TextFiles = (Get-ChildItem -Recurse "$FilePath\*.txt").Name
ForEach ($TextFile in $TextFiles)
{
    (Get-Content "$FilePath\$TextFile").Replace(" & ", "&") | Set-Content "$FilePath\$TextFile"
}
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben