Мне нужно сохранить вывод команды, чтобы передать его как переменную в функции позже
#This works
[scriptblock]$command = {Get-EventLog system -newest 1 | Format-List}
$command.Invoke()
Но когда я пытаюсь написать-хост, он терпит неудачу
#This works
[scriptblock]$command = {Get-EventLog system -newest 1 | Format-List}
Write-Host $command.Invoke()
с выходом
Microsoft.PowerShell.Commands.Internal.Format.FormatStartData Microsoft.PowerShell.Commands.Internal.Format.GroupStartData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.GroupEndData Microsoft.PowerShell.Commands.Internal.Format.FormatEndData
Строка скрипта, в котором я пытаюсь его использовать,
$SMTPMessage = New-Object System.Net.Mail.MailMessage('UserName user@my.domain','user2@my.domain','subjectText',($command.Invoke()) )
Спасибо
{ScriptBlock}.Invoke()
возвращает System.Collections.ObjectModel.Collection<PSObject>
который изуродован Write-Host
команда.
Если вы используете InvokeReturnAsIs()
вы получите правильные результаты:
PS C:\> [scriptblock]$command = {Get-EventLog system -newest 1 | Format-List}
$command.InvokeReturnAsIs()
Index : 141723
EntryType : Information
InstanceId : 1073748860
Message : The Application Experience service entered the stopped state.
Category : (0)
CategoryNumber : 0
ReplacementStrings : {Application Experience, stopped}
Source : Service Control Manager
TimeGenerated : 9/8/2016 9:32:02 AM
TimeWritten : 9/8/2016 9:32:02 AM
UserName :
Format-List
вернуть объекты форматирования. Тебе нужно Out-String
командлет для преобразования их в строку:
$OutputAsString = $command.Invoke() | Out-String
Затем вы можете передать эту строку в методы, которые ожидают строку в качестве входных данных.