PowerShell: невозможно записать данные в UNC-путь, содержащий квадратные скобки - PullRequest
7 голосов
/ 24 июня 2011

У меня проблема:

# The following line works
Add-Content -LiteralPath "$Env:USERPROFILE\Desktop\[Test].txt" -Value "This is a test"

# The following line does not work and does not output an error message
Add-Content -LiteralPath "\\Server\Share\[Test].txt" -Value "This is a test"

Я уже проверил свои разрешения, и у меня определенно есть разрешение на запись в общий сетевой ресурс. Проблема возникает только при использовании параметра «LiteralPath», который, к сожалению, необходим для того, что я делаю.

Как записать данные в UNC-путь, содержащий квадратные скобки?

Ответы [ 2 ]

6 голосов
/ 25 июня 2011

вы найдете на веб-сайте Microsoft объяснение странного поведения ' квадратных скобок ' в выражениях PowerShell.

НО

Когда я просто пишу следующее (без скобок), оно просто не работает для меня:

Set-Content -LiteralPath "\\server\share\temp\test.txt" -Value "coucou"

, но (согласно статье Microsoft) следующие работы

Set-Content -Path "\\server\share\temp\test.txt" -Value "coucou"
set-content -path '\\server\share\temp\`[test`].txt' -Value "coucou"

Я пытался решить эту проблему с помощью PowerShell Drive

New-PSDrive -Name u -PSProvider filesystem -Root "\\server\share"

И это было еще хуже

Set-Content : Impossible de trouver une partie du chemin d'accès '\\server\share\server\share\server\share\temp\test.txt'.
Au niveau de ligne : 1 Caractère : 12
+ set-content <<<<  -literalpath "u:\temp\test.txt" -Value "coucou"
    + CategoryInfo          : ObjectNotFound: (\\server\shar...e\temp\test.txt:String) [Set-Content], DirectoryNotFo
   undException
    + FullyQualifiedErrorId : GetContentWriterDirectoryNotFoundError,Microsoft.PowerShell.Commands.SetContentCommand

Повернуть решение по кругу 1: Я решаю его, используя:

net use u: \\server\share
set-content -literalpath "u:\temp\test.txt" -Value "coucou"

И затем следующие действия

set-content -literalpath "u:\temp\[test].txt" -Value "coucou"

Поверните решение 2 2 : , используя FileInfo

# Create the file
set-content -path '\\server\share\temp\`[test`].txt' -Value "coucou"
# Get a FileInfo
$fic = Get-Item '\\server\share\temp\`[test`].txt'
# Get a stream Writer
$sw = $fic.AppendText()
# Append what I need
$sw.WriteLine("test")
# Don't forget to close the stream writter
$sw.Close()

Я думаю, что объяснение в том, что в -literalpath UNC плохо поддерживаются

0 голосов
/ 25 июня 2011

Подстановочные знаки квадратных скобок, по-видимому, реализованы только в параметре -path командлетов. Метод по умолчанию объекта fileinfo по-прежнему считает их литералами:

 $fic = [io.directoryinfo]"\\server\share\temp\[test].txt"
...