首页 > 解决方案 > 在 PowerShell 中,您可以写入托管外部命令的调用和参数吗?

问题描述

在我的 PowerShell (v5) 中,我调用了许多外部命令,例如 msbuild、dotnet 等(我正在制作 PowerShell 构建脚本)。

我想记录正在运行的命令。我怎么做?

这是一个示例,但我不想将该命令复制为 Write-Host 语句。

Write-Host "dotnet restore --source $MyNuGet --source $NuGet"
dotnet restore --source $MyNuGet --source $NuGet

我希望我的日志中的输出是:

dotnet restore --source https://blah --source https://blah2

有没有办法做到这一点?我可以创建某种命令执行包装器吗?或者我可以将命令构建为字符串,然后我可以将其传递给 Write-Host 并将其传递给 Run-Command 或类似的东西?也许我会回答我自己的问题。我想知道我是否可以将字符串传递给“&”。

标签: powershell

解决方案


我承认,一种更暴力的方法是:

Start-Transcript <path to output file>
... run your commands ...
Stop-Transcript

并且您将有一个非常详细的日志来梳理(特别是如果您以交互方式运行并且有自定义提示代码)。请注意,这是通过注册表项启用的,但在 Windows 10 中,它似乎默认启用。

或者,更符合您的原始示例:

function Invoke-Wrapper {
    param(
        [Parameter(Mandatory=$true)][scriptblock]$ScriptBlock
    )
    Write-Host "$ScriptBlock"
    
    Invoke-Command -ScriptBlock $ScriptBlock
    $rc = Invoke-Command -ScriptBlock { $lastExitCode } 

    Write-Host "{ $ScriptBlock } returned: $rc"
    if ($rc -ne 0){
        exit $rc
    }
}

Invoke-Wrapper { my command(s) }


推荐阅读