gpt4 book ai didi

powershell - 如何将字符串变量与反斜杠连接起来以在 Powershell 中创建 UNC 路径

转载 作者:行者123 更新时间:2023-12-03 00:28:25 26 4
gpt4 key购买 nike

这看起来应该是一件微不足道的事情。

我正在使用 Powershell v5.1,我正在尝试从代表服务器和共享的 2 个字符串构建 UNC 路径。假设 $Server 持有“Distribution”而 $Share 持有“Publish”...

 $Path = "\\" + $Server + "\" + $Share

我为 $Path 得到的输出是..

\\Distribution Publish\

我试着把它改成...

$Path = "//" + $Server + "/" + $Share

...作为一个测试,认为特殊字符“\”导致了问题,但后来我仍然得到奇怪的序列,其中服务器和共享之间有一个空格,第二个斜杠在末尾。

//Distribution Publish/

我错过了什么?

最佳答案

如评论中所述,如果您的 $Server$Share 变量确实包含 just Distribution,则无法解释您的症状Publish没有隐藏的控制字符

这是一个确实会产生您的症状的变量值的人为示例:

> $Server = 'Distribution', 'Publish'; $Share = "`r"; "\\" + $Server + "\" + $Share
\\Distribution Publish\

正如 James C. 指出的,构建字符串的更简洁的替代方法是:"\\$Server\$Share"
正如 TheIncorrigible1 指出的那样,最好使用 Join-Path 构建路径。

  • 'Distribution', 'Publish' 是字符串的数组,其元素 PowerShell 用空格连接(默认情况下) 将其转换为字符串时,在本例中会生成 Distribution Publish

  • "`r" 创建控制字符 CR (0xD),打印到控制台时,它会重置光标位置到第一列并在那里打印字符串的其余部分(在本例中为空)。
    但是请注意,CR 仍然是字符串的一部分,尽管它是不可见的。
    如果您想要一种简单的方法来检查给定字符串中的隐藏控制字符,请参阅 this answer我的。


更新:

OP 报告说原来是 $Server$Share 变量是如何通过参数,通过绑定(bind)的错误使用 (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 .

关于powershell - 如何将字符串变量与反斜杠连接起来以在 Powershell 中创建 UNC 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45351227/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com