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

Сохранить вывод команды PS в переменную и Invoke-Command

Мне нужно сохранить вывод команды, чтобы передать его как переменную в функции позже

#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

Затем вы можете передать эту строку в методы, которые ожидают строку в качестве входных данных.