2011-06-24 33 views
7

Đây là vấn đề tôi đang gặp:PowerShell: Không thể ghi dữ liệu vào một đường dẫn UNC có chứa dấu ngoặc vuông

# 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" 

Tôi đã kiểm tra quyền của tôi và tôi chắc chắn có quyền ghi vào các mạng chia sẻ . Vấn đề chỉ xảy ra khi tôi sử dụng tham số "LiteralPath", thật không may, là bắt buộc đối với những gì tôi đang làm.

Làm cách nào để ghi dữ liệu vào đường dẫn UNC có chứa dấu ngoặc vuông?

+0

Thật kỳ lạ, nó sẽ hoạt động nhưng tôi có thể sao chép vấn đề của bạn cũng như – ProfessionalAmateur

+0

Thú vị. Tôi không thể lặp lại điều này. – zdan

+0

Tôi tò mò - tại sao sử dụng công tắc -LiteralPath yêu cầu? – Goyuix

Trả lời

6

bạn sẽ tìm thấy trên Microsoft web site giải thích về các hành vi lạ của 'dấu ngoặc vuông' trong biểu thức PowerShell.

NHƯNG

Khi tôi chỉ cần viết như sau (không có dấu ngoặc) nó chỉ does't làm việc cho tôi:

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

nhưng (theo như bài báo của Microsoft) sau việc

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

Tôi đã cố giải quyết sự cố này bằng PowerShell Drive

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

Và nó thậm chí còn tồi tệ nhất

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 

Bật arround giải pháp 1: tôi giải quyết nó bằng cách sử:

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

Và sau đó followwing làm việc

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

Bật arround giải pháp 2: using 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() 

Tôi nghĩ rằng lời giải thích là trong -literalpath UNC đang kém hỗ trợ

+0

Cảm ơn bạn rất nhiều. Tôi chắc chắn rằng với mã của bạn tôi có thể nhận được kịch bản của tôi làm việc. Cảm ơn một lần nữa! – Rick

0

Các wildcarding của dấu ngoặc vuông dường như chỉ được thực hiện trong tham số -path của cmdlets. Phương thức mặc định của đối tượng tệpinfo vẫn coi chúng là literals:

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

trong thử nghiệm của tôi ngay cả khi không có tệp có dấu ngoặc vuông, tên UNC không được hỗ trợ trong tham số -literalPath, bạn có thể xem thử không? – JPBlanc

+0

PS C: \ testfiles> get-item -literalpath "\\ localhost \ c $ \ testfiles \ test [4].txt " Thư mục: \\ localhost \ c $ \ testfiles Chế độ LastWriteTime Tên dài ---- ------------- ------ ---- -a --- 5/8/2011 10:35 AM 12 kiểm tra [4] .txt PS C: \ testfiles> – mjolinor

+0

thử đặt nội dung để tạo tệp mới có tên UNC – JPBlanc

Các vấn đề liên quan