Как я могу обработать сообщение удаленного сервера с помощью PowerShell?

#powershell #import #powershell-2.0 #remote-server #powershell-ise

Вопрос:

Я создал короткий скрипт PowerShell для импорта файла .reg (ODBC) в другой сеанс сервера.

Я столкнулся с этим предупреждением/проблемой. Сообщение такое (ниже):

Операция завершилась успешно. CategoryInfo : Не указано: (Операция завершена успешно.:Строка) [], исключение RemoteException полностью квалифицированный идентификатор ошибки : NativeCommandError Имя компьютера : ИМЯ СЕРВЕРА

Не указано: (:) [], исключение RemoteException

Скрипт, устанавливаю без проблем файл .reg, но постоянно получаю сообщение.

Это мой код:

 #PARAMETERS - Variables
$Serverlist = Get-Content C:ServerList.txt

try 
{
     Foreach ($ServerName in $Serverlist)
     {  
         $session = New-PSSession -ComputerName $servername
         Write-Host -Foregroundcolor Green "Copying ODBC Driver for $servername"
         $copy_cmd = "C:MYFILE.reg"            

         Copy-Item $copy_cmd \$servernameC$ -recurse -force;

         Write-Host -Foregroundcolor Green "ODBC Successfully copied on $servername"

         #$session = New-PSSession -ComputerName $servername
         Invoke-Command -Session $session -ScriptBlock { 
        
         #Start-Process

         reg import C:CopiedFile.reg #This line generate the message           
         Write-Host -Foregroundcolor Green "ODBC was installed
}
catch
{
     Write-Host "ERROR" -Foregroundcolour Red 
     exit
}
 

Я попытался вставить оператор Invoke-Command or reg import в оператор try — catch, но сообщение все равно появилось. Вместо этого я использовал другую команду reg import , но ничего не изменилось.

Я могу использовать эту командную строку, но я хотел бы поймать ошибку.

 Write-Host -Foregroundcolor Green "ODBC is installed " } ##-ErrorAction SilentlyContinue 
 

Есть любой способ получить ошибку в конечном итоге или обработать сообщение.

Заранее спасибо.

Ответ №1:

Если блок try не генерирует завершающую ошибку, он не перейдет в блок Catch. Это контролируется -ErrorAction параметром. Таким образом, вы можете установить

Вызов-Командный сеанс $сеанс -Блок сценариев {} -Остановка действия с ошибкой

Это приведет Invoke-Command к тому, что командлет создаст завершающие ошибки(если возникнет какая-либо ошибка), разрешающие выполнение блока catch.

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

1. Спасибо за ваш ответ @Abdul Niyas P M. Я добавил предложенную вами команду, но получаю то же сообщение/предупреждение. (в любом случае файл был импортирован и установлен). Операция завершилась успешно. В C:MyScript.ps1:24 символ:5 Вызов-Команда -Сеанс $сеанс -Блок сценариев { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CategoryInfo : Не указано: (Операция завершена успешно. :Строка) [], исключение RemoteException полностью квалифицированный идентификатор ошибки : NativeCommandError Имя компьютера : MYSERVER

2. @ulisses Можете ли вы попытаться завернуть reg import C:CopiedFile.reg это внутрь Invoke-Expression "reg import C:CopiedFile.reg" -ErrorAction Stop ?

3. Привет @Абдул Нияс П. М. спасибо, что уделили мне время. Я использовал, но я получаю то же самое сообщение.