2016-10-28 4 views
1

Dies ist nicht mein Code, und ich verstehe wirklich Powershell nicht sehr, aber ich habe ein Skript hier für den Zugriff auf Dateien (oder etwas). Es gibt einen Fehler mit Sonderzeichen wie Apostrophen, und ich kenne Escape-Sequenzen, aber ich analysiere einen Ordner und für jeden Ordner (und später Datei) verwende ich Setaccesscontrol für jeden Ordner/Datei. Ich kann keine Escape-Sequenzen für jedes einzelne verwenden, da es in der Variable $ fol gespeichert ist und jede Schleife anders ist. Ich bin ein absoluter Neuling und bekomme keine Powershell, aber ich bekomme Java, also stütze ich mich darauf. Jede Hilfe wird geschätzt.Powershell-Skript Fehler mit Apostrophen

foreach($Fol in $Folder2){ 
$fol = $fol.fullname 
$NewOwnerACL = New-Object System.Security.AccessControl.FileSecurity 
$Admin = New-Object System.Security.Principal.NTAccount($WhoIsNewOwner) 
write-host ...$Admin to $Fol -Fore Yellow 
$NewOwnerACL.SetOwner($Admin) 
[System.IO.File]::SetAccessControl($fol, $NewOwnerACL)} 

Der Fehler ist:

Exception "SetAccessControl" mit "2" Argumente Aufruf (e): "C: \ Aktien Operationen \ ... etwas mit Apostroph"

Bei C : \ cp \ PermissionFixer.ps1: 28 Zeichen: 5

+ [System.IO.File] :: SetAccessControl ($ fol, $ NewOwnerACL)

+ ~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~

+ CategoryInfo: NotSpecified: (:) [], MethodInvocationException

+ CategoryInfo: FileNotFoundException

Edit: Ich fand, dass diese lange Striche geschraubt es auf. Ich benutze Robocopy für dieses Skript, um die 255 oder was auch immer zu erreichen, und ich denke, es könnte die langen Striche falsch lesen? Gibt es einen anderen Weg, als nur durch jede einzelne Kette zu suchen, die danach sucht?

+1

Sie sollten keine Escape-Sequenzen benötigen - kein String-Parsing. Was ist die _full_ Fehlermeldung, die Sie bekommen? – mklement0

+1

'static void SetAccessControl (Zeichenfolgenpfad, System.Security.AccessControl.FileSecurity fileSecurity)' ..haben Sie überprüft, ob der Pfad $ fol existiert? – Hackerman

+0

@Hackerman Ich tat, und ich bin mir ziemlich sicher, dass es da ist. Ich denke, es wird $ fol aus dem Durchsuchen dieses Ordners, also bin ich mir nicht sicher, wie das verderben würde. Die anderen Ordner und Dateien funktionieren vollständig, außer diesem. Einzig was ich bemerkte, war das ('). –

Antwort

0

Sie sollten keine Escape-Sequenzen benötigen, da kein String-Parsing beteiligt ist.

Hackerman bietet, was ich glaube, der entscheidende Zeiger in einem Kommentar zu der Frage zu sein: $fol einfach auf einen nicht vorhandenen Pfad hinweisen.

Dies wird auch durch den Wert CategoryInfo unterstützt, der in der Fehlermeldung enthalten ist, die Sie melden: FileNotFoundException.

Wie für einen Verweis auf "Apostroph": meine beste Schätzung ist, dass der Pfad enthalten in $fol kann buchstäblich dieses Wort enthalten.

Apostrophe (') sind zulässige NTFS-Dateinamen, daher sollten sie kein Problem darstellen.

Verwandte Themen