Невозможно преобразовать System.Объект [] в тип {System.Строка, Система.Управление.Автоматизация.ScriptBlock}

#powershell #remote-access #invoke-command

#powershell #удаленный доступ #вызов-команда

Вопрос:

Когда я использую Invoke-command в Powershell, Select-object выдает ошибку в программе.

 $pc='server1','server2'

$csv = "\mypcc$UsersmeDesktopScriptPC2Length.csv"
$command=Get-ChildItem -Path C:Users -Exclude C:Users*AppData -Recurse -Force -File | 
where Length -gt 300mb | Sort-Object -Property Length -descending | 
Out-String -stream | Select-Object -Property $pc,Directory,Name,$properties | 
Export-Csv -Path $csv -Delimiter ';' -Encoding UTF8 -NoTypeInformation

Invoke-Command -Computername $pc -ScriptBlock {$command}
 

Вот код ошибки :

 Select-Object : Impossible de convertir System.Object[] dans l’un des types suivants {System.String, System.Management.Automation.ScriptBlock}.
Au caractère C:UsersmeDesktopScriptScanPC.ps1:40 : 22
  ... ng -stream | Select-Object -Property $pc,Directory,Name,$properties |
 

Комментарии:

1. $command = { ... }; ... Invoke-Command -ScriptBlock $command . Вам понадобятся дополнительные $using ссылки для передачи удаленных переменных таким образом.

2. Хотя в этом коде есть и другие недостатки, позвольте мне начать с того, что Select-Object -Property $pc,Directory,Name,$properties сначала следует исправить эту строку. $pc является массивом, а не именем свойства. Кроме того, вы не определили, что $properties такое переменная. If $properties — это строка, содержащая имя свойства, это единственный способ, которым, я думаю, ваш код будет иметь смысл.

Ответ №1:

Наконец я нашел свою ошибку, моя переменная не была объявлена в «Invoke-Command».

Однако, когда я запускаю команду на удаленном сервере с помощью Invoke-Command, я получаю эту ошибку на нескольких серверах :

 Impossible de trouver un paramètre correspondant au nom « File ».
  CategoryInfo          : InvalidArgument : (:) [Get-ChildItem], ParameterBindingException
  FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
  PSComputerName        : Server1
 

Команда, которую я отправляю, :

 Get-ChildItem -Path C:Users -Recurse -Force -File | 
Sort-Object -Property Length -descending | 
Select-Object -Property Directory,Name,$properties | 
Export-Csv -Path \Server2c$scriptLogERfile.csv -Delimiter ';' -Encoding UTF8 - 
NoTypeInformation
 

Когда я запускаю команду Get-Child item в Server2 и сохраняю вывод в файл Server2, он работает, но с Server1 на Server2 не работает