powershell - 在 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 或类似的东西?也许我会回答我自己的问题。我想知道我是否可以将字符串传递给“&”。
解决方案
我承认,一种更暴力的方法是:
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) }
推荐阅读
- jquery - 如何使用ajax将多个数据从控制器发送到页面html
- amazon-web-services - 如何将 AWS Secret Manager 与 Spring Boot 应用程序集成
- java - 如何创建使用另一个通用 Java 接口键入的通用 Java 接口?
- google-custom-search - 我如何搜索这个?如果我付费可以访问超过 100 个 JSON api 搜索结果吗?
- c - 向我的 shell 中正在运行的子进程发送信号的最佳方式是什么?
- python - Pandas:根据包含特定值的列子集选择行和列
- azure-ad-b2c - 为什么在我的自定义政策中将声明标记为不支持?
- python - 旧版本的 Telethon
- docusignapi - DocuSign API 获取信封状态:轮询限制是否适用于开发人员沙箱?
- python - 无法在模块中定义变量