我正在尝试从数组中提取一些文件路径并使用它们来测试文件夹是否位于serval机器上。 我似乎从2维数组中拉出值并将其放入变量中时出错。
这是我的脚本的条带化,非常基本的版本。
$PCS = "PC1","PC2","PC3"
$locations= @("System32","Windows\System32"),
("Public","Users\Public")
ForEach($PC in $PCS){
$i=0
Do
{
$fullpath = "\\" + $PC + "\C$\" + "$locations[$i][1]"
test-path $fullpath
$i++
}
While ($i -le ($locations.length-1) )
}
但是当我使用$ fullpath来测试文件夹是否存在时,我得到了错误,经过进一步调查,$ fullpath的实际值是:
\\PC1\C$\System.Object[] System.Object[] System.Object[] System.Object[]
如何从数组中获取值,以便将其用作文件路径位置?
答案 0 :(得分:1)
$fullpath = "\\" + $PC + "\C$\" + "$($locations[$i][1])"
或
$fullpath = "\\" + $PC + "\C$\" + $locations[$i][1]
正如arco444指出的那样,您发布的代码似乎不完整,但我认为您的问题将在上面修复。
当您使用"$locations[$i][1]"
时,它只会将$locations
解释为字符串中的变量。使用.
访问属性或[]
访问元素将被解释为文字字符。
因此,在这种情况下,如果查找结果已经是字符串或者可以强制转换成一个字符串,则可以使用第二个选项(不要用引号括起来)。
在一般意义上,第一个选项使用$(...)
这是一个子表达式。 ...
可以是任何代码,包括整个管道和函数调用等。