Powershell Нужно копировать с удаленных машин на мою машину - PullRequest
0 голосов
/ 12 мая 2018
$Computers = Get-Content "C:\TEMP\MSGLOG\COPY.txt"

ForEach ($computer in $computers)
{
    Invoke-Command -ComputerName $computer -ScriptBlock {
        Copy-Item "C:\\Program Files (x86)\\DST\\messaging*.log" -Destination "MYMACHINE\temp\MSGLOG\$Computer\"
    }
}

Итак, что я пытаюсь сделать, это копировать журналы с ~ 400 компьютеров на мою машину.Каждый компьютер использует формат именования даты для этих журналов, поэтому я хочу скопировать этот файл в папку, названную в честь того компьютера, с которого они пришли, но после многих попыток я не могу понять это.

Ответы [ 3 ]

0 голосов
/ 12 мая 2018

$computer определено на вашем локальном компьютере, но скрипт-блок работает на удаленном компьютере. Когда удаленный компьютер пытается использовать $computer, он получает пустую строку.

Вам либо нужна форма $using:computer, которая будет переносить значение в блок скриптов и на удаленный компьютер:

$Computers = Get-Content "C:\TEMP\MSGLOG\COPY.txt"

ForEach ($computer in $computers)
{
    Invoke-Command -ComputerName $computer -ScriptBlock {
        Copy-Item "C:\Program Files (x86)\DST\messaging*.log" -Destination "\\MYMACHINE\temp\MSGLOG\$using:Computer\"
    }
}

или вам нужна переменная, которая уже есть на удаленном компьютере, например $env:COMPUTERNAME.

0 голосов
/ 12 мая 2018

Если вы используете PowerShell 5.1 на своем хосте и удаленных устройствах, вы можете использовать Copy-Item с его параметрами FromSession или ToSession.Пример из microsoft :

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\PattiFul"
Copy-Item "C:\MyRemoteData\test.log" -Destination "D:\MyLocalData\" -FromSession $Session
0 голосов
/ 12 мая 2018

Я не вижу необходимости в Invoke-Command в этой ситуации. Вы должны быть в состоянии скопировать с \\hostname\C$\.

Ex (не проверено):

$Computers = Get-Content "C:\TEMP\MSGLOG\COPY.txt"
$MyMachine = "myMachine"

foreach($Computer in $Computers)
{
    Copy-Item -Path "\\$Computer\C$\Program Files (x86)\DST\" -Include "messaging*.log" -Destination "\\$MyMachine\temp\MSGLOG\$Computer\" -Verbose -WhatIf
}

Если это дает вам результаты, которые вы ищете, просто удалите -whatif и запустите снова.

Примечание. В вашем примере показано назначение для обмена. Из названия MyMachine я бы предположил, что это локально. Если это так, измените -Destination на локальный путь (просто чтобы избежать ненужного замедления). Также включен -verbose для печати того, что он делает во время Copy-Item процесса

...