2016-10-28 2 views
1

Это не мой код, и я действительно не очень разбираюсь в powershell, но у меня есть сценарий для получения доступа к файлам (или что-то еще). Есть ошибка со специальными символами, такими как апострофы, и я знаю об escape-последовательностях, но я разбираюсь в папке, и для каждой папки (и более позднего файла) я использую setaccesscontrol для каждой папки/файла. Я не могу использовать escape-последовательности для каждого из них, поскольку он хранится в переменной $ fol, и каждый цикл будет отличаться. Я полный новичок и не получаю powershell вообще, но я получаю Java, поэтому я основываю свое понимание на этом. Любая помощь приветствуется.Ошибка сценария Powershell с апострофами

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)} 

Ошибка:

Исключение вызова "SetAccessControl" с "2" аргумент (ы): "C: \ акции \ Операции ... что-то с апострофом"

В C : \ ф \ PermissionFixer.ps1: 28 голец: 5

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

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

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

+ CategoryInfo: FileNotFoundException

Edit: я обнаружил, что эти длинные черточки ввинчивается это вверх. Я использую robocopy на этом скрипте, чтобы преодолеть 255 или любой мировой лимит, и я думаю, что это может неправильно читать длинные тире? Есть ли способ обойти это иначе, чем просто разбираться в каждой строке, ища его?

+1

Вам не нужны escape-последовательности - не используется синтаксический анализ строк. Какое сообщение об ошибке _full_ вы получаете? – mklement0

+1

'static void SetAccessControl (строковый путь, System.Security.AccessControl.FileSecurity fileSecurity)' .. вы проверяете, существует ли $ fol path? – Hackerman

+0

@Хакерман Я сделал, и я уверен, что он там. Я думаю, что он получает $ fol от разбора этой папки, поэтому я не уверен, как это испортится. Другие папки и файлы полностью работают, кроме этого. Единственное, что я заметил, это(). –

ответ

0

Вам не нужны escape-последовательности, потому что нет синтаксического анализа строк.

Hackerman обеспечивает то, что я считаю самым важным указателем в комментарии по этому вопросу: $fol может просто указывать на несуществующего пути.

Это также поддерживается значением CategoryInfo, содержащимся в сообщении об ошибке, которое вы сообщаете: FileNotFoundException.

Что касается ссылки на «апостроф»: моя лучшая догадка заключается в том, что путь, содержащийся в $fol, может буквально содержать это слово.

Апоптопы (') являются законными символами имени NTFS, поэтому они не должны быть проблемой.

Смежные вопросы