将 PS 命令输出存储到变量并调用命令

将 PS 命令输出存储到变量并调用命令

我需要存储命令输出以便稍后将其作为函数中的变量传递

#This works
[scriptblock]$command = {Get-EventLog system -newest 1  | Format-List}
$command.Invoke()

但是当我尝试 Write-Host 时失败了

#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 [email protected]','[email protected]','subjectText',($command.Invoke()) )

谢谢

答案1

Format-List返回格式化对象。您需要Out-Stringcmdlet 将它们转换为字符串:

$OutputAsString = $command.Invoke() | Out-String

然后,您可以将该字符串传递给方法,这些方法以字符串作为输入。

答案2

{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           : 

相关内容