如何将此命令的输出重定向到变量?
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确实输出了一些东西。但我想将此输出存储到变量中
数据库恢复操作成功完成。
您可以将命令的输出保存为变量,如下所示:
$commandOutput = Restore-ASDatabase -Server $Server -RestoreFile $File -Name $CINPUT -Security:$Choice -AllowOverwrite -ErrorAction Stop
Run Code Online (Sandbox Code Playgroud)
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 次 |
| 最近记录: |