Назад | Перейти на главную страницу

New-MoveRequest -Whatif возвращаемый тип

Я пытаюсь выяснить, есть ли проблемы с новым запросом на перемещение. Поэтому я использую переключатель -WhatIf для функции New-MoveRequest. Я заметил, что если с moverequest нет проблем, эта функция выводит что-то вроде What If: Creating New-MoveRequest for 'John Doe'. Проблема в том, что я не могу назначить это сообщение какой-либо переменной. Откуда это сообщение (вывод)?

New-MoveRequest -Remote -Identity $userAddress -RemoteHostName $rhn -RemoteCredential $SourceCredential -WhatIf

В PowerShell вы можете использовать GetType() чтобы получить тип объекта. Так что просто поместите результат вашей команды в переменную и используйте GetType() в теме:

[PS] C:\Users\username\Desktop> $x = New-MoveRequest ... -WhatIf
[PS] C:\Users\username\Desktop> $x.GetType()
You cannot call a method on a null-valued expression.
At line:1 char:11
+ $x.GetType <<<< ()
    + CategoryInfo          : InvalidOperation: (GetType:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Результат: использование -WhatIf paramater в командлете приводит к null.

Чтобы захватить весь вывод команды, включая WhatIf-Выход вы можете использовать Start-Transcript:

[PS] C:\Users\username\Desktop> Start-Transcript tmpfile
[PS] C:\Users\username\Desktop> New-MoveRequest ... -WhatIf
[PS] C:\Users\username\Desktop> Stop-Transcript

Это захватит весь вывод и запишет его в tmpfile, хотя и вместе с большим количеством непреднамеренной дополнительной информации:

[PS] C:\Users\username\Desktop> Get-Content tmpfile
**********************
Windows PowerShell Transcript Start
Start time: 20170510090649
Username  : username
Machine   : hostname (Microsoft Windows NT 6.1.7601 Service Pack 1)
**********************
Transcript started, output file is x
[PS] C:\Users\username\Desktop>$x = New-MoveRequest ... -WhatIf
What if: ...
[PS] C:\Users\username\Desktop>Stop-Transcript
**********************
Windows PowerShell Transcript End
End time: 20170510090701
**********************

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

Ваш ответ заключается в том, что возвращаемый тип недействителен. Он ничего не возвращает, потому что -WhatIf переключатель предназначен для того, чтобы ничего не запускать. Он только проверяет, что команда будет делать, и записывает эту информацию на хост.

Запись-хост

$a = Write-Host "Test string"
# Test String will output to console
# $a will be null because the output will go to the console

$a = Write-Host "Test string" | Write-Output "C:\output.txt"
# Test String will output to console
# $a will be null, and output.txt will be empty because the output will go to the console

Выходные данные Write-Host явно отправляются на консоль. Его нельзя будет сохранить в переменной или передать по конвейеру другой команде, потому что именно для этого предназначен стандартный выходной поток.

Запись-вывод

Write-Output поместит информацию в конвейер. Оттуда его можно передать другой команде. Если выходные данные достигают команды, у которой их выходные данные не переданы в другое место, они будут сохранены в переменной, если вы начали строку с $var = заявление. Если на этом этапе не обрабатываться, вывод будет записан на консоль хоста.

$a = Write-Output "Test string"
# Console will be empty
# $a will contain Test string

$a = Write-Host "Test string" | Out-File "C:\output.txt"
# Console will be empty
# $a will be null, and output.txt will contain "Test String"

Полная ссылка на выходной поток: https://blogs.technet.microsoft.com/heyscriptingguy/2014/03/30/understanding-streams-redirection-and-write-host-in-powershell/

Вы не можете устранить проблему с помощью параметра «-whatif». Как отмечают некоторые комментаторы, это только подтверждает правильность команды с точки зрения переключателей, команд и объектов.

Например, New-MoveRequest testusername -TargetDatabase databasename -WhatIf выдаст ошибку, только если имя пользователя не существует или база данных «databasename» не существует. Отлично подходит для того, чтобы убедиться, что у вас нет орфографических ошибок. Это пройдет -WhatIf, даже если есть серьезные проблемы с почтовым ящиком, которые приведут к сбою.

Если у вас возникла проблема с фактическим запросом на перемещение, опубликуйте сообщение об ошибке.

Одно общее примечание по устранению неполадок заключается в том, что в случае неудачного перемещения вы можете получить более подробную информацию с помощью Get-MoveRequestStatistics и посмотреть на следующие атрибуты:

  • FailureCode
  • FailureType
  • Сторона отказа
  • Сообщение