Я пытаюсь выяснить, есть ли проблемы с новым запросом на перемещение. Поэтому я использую переключатель -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 и посмотреть на следующие атрибуты: