如何将输出从命令重定向到变量?

Cat*_*ter 3 powershell

如何将此命令的输出重定向到变量?

Restore-ASDatabase -Server $Server -RestoreFile $File -Name $CINPUT -Security:$Choice -AllowOverwrite -ErrorAction Stop
Run Code Online (Sandbox Code Playgroud)

我试过这个:

Restore-ASDatabase -Server $Server -RestoreFile $File -Name $CINPUT -Security:$Choice -AllowOverwrite -ErrorAction Stop >$output

$output
Run Code Online (Sandbox Code Playgroud)

没有显示任何东西。命令iteslf确实输出了一些东西。但我想将此输出存储到变量中

数据库恢复操作成功完成。

D.J*_*.J. 5

您可以将命令的输出保存为变量,如下所示:

$commandOutput = Restore-ASDatabase -Server $Server -RestoreFile $File -Name $CINPUT -Security:$Choice -AllowOverwrite -ErrorAction Stop
Run Code Online (Sandbox Code Playgroud)


mkl*_*nt0 5

DJ 的有用答案显示了在变量中捕获任何命令(成功)输出的最直接方法 - 通过直接赋值。


至于你尝试过的

>$output

>,输出重定向运算符仅支持重定向到 由名称/路径指定的文件(它还支持使用抑制输出>$null) - 您不能使用它来将输出保存在变量中。

因此, 的值$output将被解释为目标文件名/路径;如果变量$output从未被创建,这相当于> $null,即输出抑制

另请注意,创建的文件>始终是纯文本文件,反映与您在控制台(终端)中看到的相同输出格式,因此它们不适合编程处理。


相比之下,您在注释中提到的通用-OutVariable( ) 参数确实允许您在变量中捕获命令的输出对象,同时不会干扰命令的输出。-ov

也就是说,命令的输出仍然(也)写入输出流,并且如果该输出没有被消耗(通过另一个命令、变量赋值或重定向),它仍然打印到控制台。

例如,-OutVariable output将 cmdlet/高级函数的输出保存在变量中$output-请注意参数缺少$-OutVariable

PS> Get-Date -OutVariable output; $output

Thursday, June 27, 2019 10:17:07 PM  # direct Get-Date output
Thursday, June 27, 2019 10:17:07 PM  # output from $output

Run Code Online (Sandbox Code Playgroud)

因此,-OutVariable( -ov) 是有用的:

  • 如果您想在控制台中查看命令的输出,同时还要在变量中捕获该输出以供以后分析。

  • 如果您想捕获管道内中间命令的输出而不干扰管道。


需要注意的是()-OutVariable-ov

  • 不创建常规 PowerShell 数组 ( [object[]]),而是创建[System.Collections.ArrayList].

  • 创建一个 - 单元素 -[System.Collections.ArrayList]即使该命令仅输出一个对象Get-Date例如)。

这些令人惊讶的行为在GitHub 问题 #3154中进行了讨论。

然而,考虑到 PowerShell 灵活的集合处理及其成员访问枚举功能,这些行为在实践中可能并不总是存在问题。


归档时间:

查看次数:

6207 次

最近记录:

2 年 前