我需要存储命令输出以便稍后将其作为函数中的变量传递
#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-String
cmdlet 将它们转换为字符串:
$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 :