正如在評論中提到,你的症狀是無法解釋的,如果你的$Server
和$Share
變量真正包含只是Distribution
和Publish
,分別與沒有隱藏的控制字符。
這裏的變量值的一個人爲的例子那些出示你的症狀:
> $Server = 'Distribution', 'Publish'; $Share = "`r"; "\\" + $Server + "\" + $Share
\\Distribution Publish\
正如詹姆斯C.指出,建設字符串更簡明的方法是:"\\$Server\$Share"
。正如TheIncorrigible1指出的那樣,最好使用Join-Path
構建路徑。
'Distribution', 'Publish'
是一個字符串數組,其元素的PowerShell 符連接用空間(默認)中Distribution Publish
它轉換爲字符串,在這種情況下的結果時。
"`r"
創建控制字符CR(0xD
),其打印到控制檯時,重置光標位置到第一列並打印字符串的其餘部分存在(在這種情況下是空的) 。
但是,請注意,CR仍然是字符串的一部分,儘管是不可見的字符串。
如果你想要一個簡單的方法來檢查一個給定的字符串的隱藏控制字符,請參閱我的this answer。
更新:
的OP報告說,它竟然是$Server
和$Share
變量是如何通過參數約束,通過誤用的(C#)方法 - 調用語法:
# Correct invocation: $Server binds to 1st parameter, $Share to 2nd.
./script $Server $Share
# INCORRECT: Binds *both* values to the *first* parameter, as an *array*
# and assigns nothing to the second.
# In PowerShell, "," constructs an array.
./script($Server, $Share)
棘手的是./script($Server, $Share)
碰巧也是有效的PowerShell語法,只有不同的語義:$Server, $Share
構造了一個2元素數組,其元素分別爲$Server
和$Share
的值。
爲了避免這個缺陷,PowerShell提供了嚴格模式設置Set-StrictMode -Version 2
,當嘗試方法式調用時會報告錯誤。但是請注意,此設置始終會啓用其他檢查,特別是在引用不存在的屬性時會導致錯誤 - 請參閱Get-Help Set-StrictMode
。
您確定'$ server'和'$ share'包含您的想法,而且它們實際上並不是例如'$ server ==「發佈發佈」'和'$ share ==「」' ?你有什麼[應該沒問題](https://i.stack.imgur.com/Oi6lk.png)。 –
無法在PowerShell 5中重現,它確實很奇怪。檢查'$ Server.Length'和'$ Share.Length'是否包含可能影響結果的有趣的不可見字符(如RTL標記)。 –
作爲雙引號內的替換函數,'$ Path =「\\ $ Server \ $ Share」'會做你想做的事。 –