7

这是我遇到的问题:

# 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 路径?

4

2 回答 2

6

您将在Microsoft 网站上找到有关PowerShell 表达式中“方括号”的奇怪行为的解释。

当我只写以下内容(不带括号)时,它对我不起作用:

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

但是(根据微软文章)以下作品

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使用 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()

我认为解释是在-literalpathUNC 中得到的支持很差

于 2011-06-25T04:01:50.243 回答
0

方括号的通配符似乎只在 cmdlet 的 -path 参数中实现。fileinfo 对象的默认方法仍然认为它们是文字:

 $fic = [io.directoryinfo]"\\server\share\temp\[test].txt"
于 2011-06-25T08:33:36.640 回答