Мне вчера на почту пришёл комментарий на пост: Смена владельца папки или файла в PowerShell (часть 2), в котором сообщалось об ошибке, которую генерирует скрипт, если в пути есть служебные мета-символы, как апостроф (одиночкая кавычка). А дело было в том, что этот мета-символ нужно дополнительно эскейпить (помимо обратных слешей в пути). То же касается и квадратных скобок. Одиночные кавычки эскейпятся очень просто – одним обратным слешем:

[↓] [vPodans] $path = "C:\Users\vPodans\text'text.txt" [↓] [vPodans] $path = $path -replace "\\|'", '\$0' [↓] [vPodans] $path C:\\Users\\vPodans\\text\'text.txt [↓] [vPodans] gwmi Win32_LogicalFileSecuritySetting -filter "path='$path'" __GENUS : 2 __CLASS : Win32_LogicalFileSecuritySetting __SUPERCLASS : Win32_SecuritySetting __DYNASTY : CIM_Setting __RELPATH : Win32_LogicalFileSecuritySetting.Path="C:\\Users\\vPodans\\text'text.txt" <...>

Но с квадратными скобками такой фокус не прошёл:

[↓] [vPodans] $path = "C:\Users\vPodans\text[text.txt" [↓] [vPodans] $path = $path -replace "\\|\[", '\$0' [↓] [vPodans] $path C:\\Users\\vPodans\\text\[text.txt [↓] [vPodans] gwmi Win32_LogicalFileSecuritySetting -filter "path='$path'" Get-WmiObject : Invalid query At line:1 char:5 + gwmi <<<< Win32_LogicalFileSecuritySetting -filter "path='$path'" + CategoryInfo : InvalidOperation: (:) [Get-WmiObject], ManagementException + FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand [↓] [vPodans]

попытка заэскейпить квадратные скобки при помощи бэктика (`) успехом не увенчалась:

[↓] [vPodans] $path = "C:\Users\vPodans\text[text.txt" [↓] [vPodans] $path = $path -replace "\\", '\$0' [↓] [vPodans] $path = $path -replace "\[", '`$0' [↓] [vPodans] gwmi Win32_LogicalFileSecuritySetting -filter "path='$path'" [↓] [vPodans]

он вообще файл не нашёл так. На удачу решил опробовать хитрый вариант – не эскейпить символ, а вписать его char номер из таблицы ASCII. И вот что у меня вышло:

[↓] [vPodans] $path = "C:\Users\vPodans\text[text.txt" [↓] [vPodans] $path = $path -replace "\\", '\$0' [↓] [vPodans] [int][char]"[" 91 [↓] [vPodans] $path = $path -replace "\[", "$([char]91)" [↓] [vPodans] $path C:\\Users\\vPodans\\text[text.txt [↓] [vPodans] gwmi Win32_LogicalFileSecuritySetting -filter "path='$path'" __GENUS : 2 __CLASS : Win32_LogicalFileSecuritySetting __SUPERCLASS : Win32_SecuritySetting __DYNASTY : CIM_Setting __RELPATH : Win32_LogicalFileSecuritySetting.Path="C:\\Users\\vPodans\\text[text.txt" <...>

И этот финт сработал! Тот же самый манёвр делается и для второй квадратной скобки:

[↓] [vPodans] $path = "C:\Users\vPodans\text[text].txt" [↓] [vPodans] $path = $path -replace "\\", '\$0' [↓] [vPodans] $path = $path -replace "\[", "$([char]91)" [↓] [vPodans] [int][char]"]" 93 [↓] [vPodans] $path = $path -replace "\]", "$([char]93)" [↓] [vPodans] $path C:\\Users\\vPodans\\text[text].txt [↓] [vPodans] gwmi Win32_LogicalFileSecuritySetting -filter "path='$path'" __GENUS : 2 __CLASS : Win32_LogicalFileSecuritySetting __SUPERCLASS : Win32_SecuritySetting __DYNASTY : CIM_Setting __RELPATH : Win32_LogicalFileSecuritySetting.Path="C:\\Users\\vPodans\\text[text].txt" <...>

Но в именах файлов и папок может содержаться один коварный символ – backtick (`). Его заэскейпить не представляется возможным, поэтому единственный выход с ним – прописывать путь в одинарных кавычках, чтобы этот мета-символ использовался в качестве литерала. В связи с чем я немного подрихтовал пост, ссылка на который приведена в начале этого поста.

Friday, July 24, 2009 11:32:55 PM (FLE Daylight Time, UTC+03:00)   Comments [0]    

 

OpenID
Please login with either your OpenID above, or your details below.
Name
E-mail
(will show your gravatar icon)
Home page

Comment (HTML not allowed)  

Enter the code shown (prevents robots):

Live Comment Preview
 · 

All content © 2008 - 2012, Vadims Podāns
"Spaces" Theme provided by: Vadims Podāns
About


E-mail - Send mail to the author(s)
Live Messenger -
For english language visitors
Библиотека
Календарик
<February 2012>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

Карта расположения посетителей
Favorites





Fan list



Disclaimer
Вся информация на сайте предоставляется на условиях «как есть», без предоставления каких-либо гарантий и прав.

При использовании материалов c данного сайта ссылка на оригинальный источник обязательна.
Protected by Copyscape Online Plagiarism Scanner