无法让我的 powershell 复制任务工作

Can't get my powershell copy task to work

我在使用 PS 时遇到了一些问题。我正在尝试将文件夹从我的计算机复制到同一网络上的其他计算机列表。如果我 运行 通过键入机器名称(目标)针对机器名称的命令,PS 将复制该文件夹。如果我使用以下命令,产生的错误是“找不到网络路径”

如果我一次用一台电脑执行命令,复制成功。像这样:

Copy-Item -Path $FileLocation -Destination \computername\C$

但是如果我这样做,我会得到错误:

$pc | % {copy-item -path $filelocation -destination "\$_.assetname\C$\"}

以下是到达上面一行所采取的步骤:

$pc = import-csv desktop5list.csv

csv 中的 header 列是 AssetName。 然后我定义文件夹的文件路径

$FileLocation = c:\users\<username>\desktop\odt 

“odt”是我要复制到 csv 计算机列表中的文件夹的名称

$pc | % {copy-item -path $filelocation -destination "\$_.assetname\C$\"}

我也试过不带引号:

$pc | % {copy-item -path $filelocation -destination \$_.assetname\C$\}

我得到了同样的错误。这个简单的复制任务我做错了什么?

您需要将其包含在子表达式中。

$pc | Foreach-Object {copy-item -path $filelocation -destination "\$($_.assetname)\C$\"}

只有基本变量可以在字符串中没有它的情况下展开。如果脚本块中没有字符串,它将出错。排除故障的一个好方法是简单地输出并查看它是否是您所期望的

$pc | Foreach-Object {"\$($_.assetname)\C$\"}

查看此测试

$pc = @'
assetname
test
'@ | ConvertFrom-Csv

$pc | ForEach-Object {"\$_.assetname\c$"}

\@{assetname=test}.assetname\c$

没有引号

$pc | ForEach-Object {\$_.assetname\c$}

The network path was not found
At line:1 char:23
+ $pc | ForEach-Object {\$_.assetname\c$}

终于有了子表达式

$pc | ForEach-Object {"\$($_.assetname)\c$"}

\test\c$