【问题标题】:How to capture output in a variable rather than a logfile?如何在变量而不是日志文件中捕获输出?
【发布时间】:2019-06-01 07:48:57
【问题描述】:

这会将输出写入日志文件:

& $Env:WinDir\system32\inetsrv\appcmd.exe >test.log

但是如果我想将输出保存在一个字符串变量中以在电子邮件正文中使用它呢?

我试过这个没有任何运气..

$test = ""
& $Env:WinDir\system32\inetsrv\appcmd.exe >$test

Write-Host $test

【问题讨论】:

    标签: powershell


    【解决方案1】:

    你必须这样做:

    $test = & $Env:WinDir\system32\inetsrv\appcmd.exe
    

    如果您也想重定向错误,请在最后添加2>&1

    【讨论】:

    • 还有一件事,$test 可以是一个数组或列表吗?在执行命令时添加到集合中会很棒,最后我可以遍历集合并将它们添加到电子邮件正文?
    • 我认为您可以将其转换为数组: [string[]] $test = & $Env:WinDir\system32\inetsrv\appcmd.exe
    【解决方案2】:

    捕获可执行文件的输出很简单,

    $cmdOutput = &"Application.exe" 2>&1
    

    2>&1 - 在输出中包含错误流

    PowerShell 中可执行文件的返回类型是字符串数组。如果记录此类输出,

    Write-Host $cmdOutput
    

    将数组中的字符串输出到以空格分隔的输出流中

    要以每行字符串的方式打印它们,请选择

    Write-Output $cmdOutput
    

    $cmdOutput = &"Application.exe" | Out-String
    Write-Host $cmdOutput
    

    【讨论】:

    • 我需要 Out-String 的情况是多行输出转到一个大字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2020-02-28
    • 2014-05-23
    • 1970-01-01
    • 2020-05-20
    相关资源
    最近更新 更多