2016-11-28 8 views
1

Я пытаюсь скопировать некоторые файлы журнала с удаленного сеанса с помощью параметра -FromSession командлета Copy-Item. На вызывающей машине установлена ​​PS версия 5. При выполнении сценария я получаю следующее сообщение об ошибке:Powershell version 5 Copy-Item -FromSession не найден

Copy-Item : A parameter cannot be found that matches parameter name 'FromSession'. 

Когда я звоню $PSVersionTable на исходной машине я получаю следующий вывод:

PSVersion      5.0.10586.672 
PSCompatibleVersions   {1.0, 2.0, 3.0, 4.0...} 
BuildVersion     10.0.10586.672 
CLRVersion      4.0.30319.42000 
WSManStackVersion    3.0 
PSRemotingProtocolVersion  2.3 
SerializationVersion   1.1.0.1 

Я также проверить состояние сеанса, он открыт:

$session | select State 

State 
----- 
Opened 

Сценарий:

$globalTargets = @("machine1.domain", "machine2.domain") 

function Copy-LogsFromRemotes { 
    param (
     [Parameter(Mandatory=$true)] 
     $Destination 
    ) 

    $password = "xxxxx" | ConvertTo-SecureString -AsPlainText -Force 
    $credentials = new-object -typename  System.Management.Automation.PSCredential -argumentlist "domain\user",$password 

    foreach ($target in $globalTargets) { 

    $session = New-PSSession -ComputerName $target -Credential $credentials 
    if (!(Test-Path $Destination)){ 
     New-Item -Path $Destination -ItemType Directory 
    } 
    $copyDestination = ("{0}\{1}" -f $Destination, $session.ComputerName) 

    if (!(Test-Path $copyDestination)){ 
     New-Item -Path $copyDestination -ItemType Directory 
    } 

    Invoke-Command -Session $session -ScriptBlock { Test-Path "D:\Logs"} 
    Copy-Item -LiteralPath "D:\Logs" -Destination $copyDestination -Verbose -FromSession $session 

    Remove-PSSession -Session $session 
    } 
} 

Мне также нужна версия PS 5 на целевой машине? На самом деле версия PS установлена ​​на цель.

Любые подсказки?

ответ

4

Вы можете столкнуться с этой ошибкой PowerShell 5.0 при попытке скопировать файлы с разных дисков. Если диск не существует в другой системе, эта ошибка возникает.

См: https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11306682-bug-copy-item-fromsession-fails-if-local-machine

В качестве временного решения вы можете:

  1. Скопируйте файлы во временную папку на C: -Драйв (или другой общий диск)
  2. скопировать эти файлы в/с удаленной машины
  3. Переместить файлы в конечный пункт назначения
0

Когда я получаю эта ошибка, я должен указать полный путь источника.

0

Это, кажется, ошибка в PowerShell. Что сработало для меня, так это то, что удаленный файл (например, D: \ remotefolder \ mylog.log), который вы пытаетесь скопировать, уже существует на вашем локальном компьютере (точно такой же диск и путь).

# Workaround PowerShell bug by creating local dummy copy of remote file we want to fetch 
"" | Set-Content "D:\remotefolder\mylog.log" 
# Copy down remote file, overwriting dummy copy with -Force 
Copy-Item -FromSession $app01 -Path "D:\remotefolder\mylog.log" -Destination "D:\localfolder\" -Force 

Конечно, вы должны создать D:\remotefolderлокально заранее, а также.

Если у вас нет одинаковой буквы диска локально и удаленно, это не сработает. Вам нужно будет убедиться, что вы только что сделали.