Schlagen Sie einige kleinere Syntaxkorrekturen vor (diese Änderungen lösen Ihr Problem nicht, es ist nur eine bessere Syntax):
$mysys = 'c:\windows\*' Get-ChildItem -path . -Include *.txt -Exclude $mysys -Recurse
Jedenfalls...
Warum läuft es sogar unter c: \ windows, wenn ich es ausgeschlossen habe
Sie schließen nur Dinge in "C: \ windows" aus den Ergebnissen von Get-ChildItem aus. GCI muss immer noch in den Ordnern nachsehen, von denen Sie den Befehl erhalten haben, zu überprüfen, ob etwas übereinstimmt. Dies verursacht den Fehler "Zugriff verweigert".
Wenn Sie vollständig auf Ordner verzichten möchten, auf die Sie keinen Zugriff haben, müssen Sie eine Liste der Ordner erstellen, die Sie mit GCI abfragen möchten, anstatt nur GCI mitzuteilen, dass alles im aktuellen Pfad überprüft wird.
Die einzige Möglichkeit, dies zu tun, ist im Grunde das gleiche Verfahren: Überprüfen Sie jeden Ordner und führen Sie eine Liste der Ordner, für die Sie keinen Zugriff verweigern, und verwenden Sie diese Liste dann mit GCI. Am Ende versuchen Sie trotzdem immer noch, auf die Ordner zuzugreifen (und den Fehler zu werfen), so dass dies im Prinzip keinen Vorteil bringt (erwarten Sie zusätzliche Komplexität).
Wenn Sie die roten Fehler während der Ausführung des Befehls nicht sehen möchten, können Sie den -ErrorAction
Parameter verwenden und GCI anweisen, den Fehler im Stillen fortzusetzen. Zum Beispiel:
Get-ChildItem -path . -Include *.txt -Exclude $mysys -Recurse -ErrorAction SilentlyContinue