New-MoveRequest - que tipo de retorno

1

Estou tentando descobrir se há algum problema com um novo moverequest. Então eu estou usando -WhatIf mudar na função New-MoveRequest. Percebi que, se não houver problemas com o moverequest, essa função gerará algo como What If: Creating New-MoveRequest for 'John Doe' . O problema é que não consigo atribuir essa mensagem a nenhuma variável. De onde vem esta mensagem (saída)?

New-MoveRequest -Remote -Identity $userAddress -RemoteHostName $rhn -RemoteCredential $SourceCredential -WhatIf
    
por Ramana 10.05.2017 / 08:35

3 respostas

0

Sua resposta é que o tipo de retorno é nulo. Ele não retorna nada, porque a opção -WhatIf serve para não executar nada. Ele apenas testa para ver o que o comando faria e grava essa informação para hospedar.

Write-Host

$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

A saída do Write-Host é enviada explicitamente para o console. Ele não poderá ser armazenado em uma variável ou canalizado para outro comando, porque é para isso que serve o fluxo de saída padrão.

Write-Output

Write-Output irá colocar informações no pipeline. De lá, ele pode ser canalizado para outro comando. Se a saída atingir um comando que não tenha sua saída canalizada para algum outro lugar, ela será armazenada em uma variável se você iniciou a linha com uma instrução $var = . Se não for tratado neste momento, a saída será gravada no console do host.

$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"

Referência completa do fluxo de saída: link

    
por 11.05.2017 / 18:26
1

No PowerShell, você pode usar GetType() para obter o tipo de um objeto. Então, basta colocar o resultado do seu comando em uma variável e usar GetType() nele:

[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

Resultado: o uso do parâmetro -WhatIf no cmdlet resulta em null .

Para capturar todas as saídas do comando, incluindo a WhatIf -Output, você pode usar 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

Isto irá capturar toda a saída e gravá-la no arquivo tmp, embora junto com muitas informações adicionais não intencionais:

[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
**********************

Eu não encontrei uma maneira de remover todo o material detalhado, então você teria que analisar este arquivo novamente.

    
por 10.05.2017 / 09:02
0

Você não pode solucionar o problema usando o parâmetro "-whatif". Como observado por alguns comentadores, isso apenas valida que o comando está correto do ponto de vista de opções, comandos e objetos.

Por exemplo, New-MoveRequest testusername -TargetDatabase databasename -WhatIf só fornecerá um erro se o nome de usuário não existir ou se o banco de dados 'databasename' não existir. Ótimo para garantir que você não tenha erros de ortografia. Isso vai passar um -WhatIf mesmo se houver sérios problemas com a caixa de correio que causará uma falha.

Se você tiver um problema com a solicitação de movimentação real, poste o erro que está recebendo.

Uma nota de solução de problemas geral é que, se você tiver uma falha na movimentação, poderá obter mais detalhes usando Get-MoveRequestStatistics e verificar os seguintes atributos:

  • FailureCode
  • FailureType
  • FailureSide
  • Mensagem
por 11.05.2017 / 20:40