Что не так с моим скриптом Powershell?

Я не понимаю это сообщение об ошибке, которое я получаю, когда пытаюсь запустить сценарий powershell. Цель состоит в том, чтобы скопировать файл.bat в основную папку автозагрузки win 7 на нескольких компьютерах.

И сценарий, который я запускаю.

$ServerList = Get-Content "C:\ServersList.txt" #Change this to location of servers list
$SourceFileLocation = "C:\firefox_issue.bat" #For example: D:\FoldertoCopy\ or D:\file.txt
$Destination = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup" #Example: C$\temp

foreach ($_ in $ServerList)
 {Copy-Item $SourceFileLocation -Destination \\$_\$Destination -Recurse -PassThru}


Write-Host "Press any key to continue ..."

$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

Write-Host
Write-Host "A"
Write-Host "B"
Write-Host "C"

2 ответа

Потому что ваше местоположение устанавливается на:

\\SERVERNAME\C:\ProgramData...

и это должно быть:

\\SERVERNAME\C$\ProgamData...

Ваш пункт назначения должен быть:

$Destination = 'C$\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup'

И ваш цикл должен быть:

foreach($server in $serverList) {
  Copy-Item $SourceFileLocation -Destination "\\$server\$Destination" -Recurse
}

Вам, вероятно, следует избегать явного использования $_ в качестве имени переменной как $_ это специальная переменная для доступа к объекту в конвейере.

Вы читали комментарий позади $Destination линия? Это UNC путь. \\server1\c:\programdata\ не является допустимым UNC-путем. Пытаться:

$Destination = "C$\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"

Также, $_ является зарезервированной переменной для конвейерного ввода, поэтому вам нужно ее изменить, например:

foreach ($server in $ServerList)
 {Copy-Item $SourceFileLocation -Destination \\$server\$Destination -Recurse -PassThru}
Другие вопросы по тегам