【问题标题】:Copy-Item Remotely from list of servers in CSV从 CSV 中的服务器列表远程复制项目
【发布时间】:2017-06-07 03:08:23
【问题描述】:

如果这是多余的,请原谅,但我似乎无法让它工作。

    Import-CSV C:\Scripts\VMLIST.csv | ForEach {
$vm = $_.vmname 
Copy-Item -Path C:\PSWindowsUpdate\ -Destination \\$vm\C$\Windows\System32\WindowsPowerShell\v1.0\Modules\PSWindowsUpdate\
Copy-Item -Path C:\PSWindowsUpdate\* -Destination \\$vm\C$\Windows\System32\WindowsPowerShell\v1.0\Modules\PSWindowsUpdate\
}

问题在于 $vm 变量。我只是不知道我在语法上做错了什么。我试过'',“”,括号。我的专栏标题正确,并且我已将 CSV 用于快照,所以我知道这不是问题所在。

输出显示未找到网络路径。那么这是否意味着不可能?

感谢您的帮助。

【问题讨论】:

  • this question 是否有帮助,或者this one?确切的代码不同,但你提到的错误似乎是一个常见的错误。
  • 谢谢,我试图修复这个错误。我想我更关心将 vmname 变量放入我的网络路径。
  • 你确定在使用 ..\C$\.. 时不必转义$ 符号吗?也许 PowerShell 尝试通过变量值替换“$\”。

标签: powershell


【解决方案1】:

您发出的是第二个管道命令$vm = $_.vmname。这是不允许的。

但如果您将其包含在您的 ForEach-Object 语句中,它会起作用:

Import-CSV C:\Scripts\VMLIST.csv | ForEach {
$vm = $_.vmname
Copy-Item -Path C:\PSWindowsUpdate\ -Destination "\\$vm\C$\Windows\System32\WindowsPowerShell\v1.0\Modules\PSWindowsUpdate\"
Copy-Item -Path C:\PSWindowsUpdate\* -Destination "\\$vm\C$\Windows\System32\WindowsPowerShell\v1.0\Modules\PSWindowsUpdate\"
}

如果您在复制语句中也使用开关 -recurse,它的可读性会更高:

Import-CSV C:\Scripts\VMLIST.csv | ForEach {
$vm = $_.vmname
Copy-Item -Path C:\PSWindowsUpdate\ -Destination "\\$vm\C$\Windows\System32\WindowsPowerShell\v1.0\Modules\PSWindowsUpdate\" -rec
}

【讨论】:

  • 好的,我刚刚更改了我的代码以解决我关心的问题。感谢您的帮助。
  • 对不起,如果我现在不清楚,但它仍然说找不到网络路径。
  • 如果您将Destination 括在双引号中,它是否有效? (")
  • 不,很遗憾。它似乎无法识别路径中的变量,在错误输出中将其显示为 \\$vm\C$...
  • 除 CSV 路径外的所有部分都是从您的代码中复制的,这是输出: Copy-Item : The network path was not found。在 line:3 char:1 + Copy-Item -Path C:\PSWindowsUpdate\ -Destination "\\$vm\C$\Windows\System32\Wind ...
猜你喜欢
  • 2022-01-17
  • 1970-01-01
  • 2022-11-18
  • 2019-07-12
  • 2010-09-09
  • 2014-06-09
  • 2010-12-13
  • 2011-10-08
  • 2020-04-15
相关资源
最近更新 更多