如何将此命令的输出重定向到变量?
Restore-ASDatabase -Server $Server -RestoreFile $File -Name $CINPUT -Security:$Choice -AllowOverwrite -ErrorAction Stop
我尝试过:
Restore-ASDatabase -Server $Server -RestoreFile $File -Name $CINPUT -Security:$Choice -AllowOverwrite -ErrorAction Stop >$output
$output
不显示任何内容。命令iteslf实际上确实输出了一些东西。但我想将此输出存储到变量
数据库还原操作成功完成。
答案 0 :(得分:2)
您将命令的输出另存为这样的变量:
$commandOutput = Restore-ASDatabase -Server $Server -RestoreFile $File -Name $CINPUT -Security:$Choice -AllowOverwrite -ErrorAction Stop
答案 1 :(得分:2)
D.J.'s helpful answer显示了通过直接分配来捕获变量中任何命令(成功)输出的最直接方法。
关于您尝试过的事情:
>$output
>
,输出重定向操作符仅支持重定向到由其名称/路径指定的 (还支持<使用>$null
抑制输出(em)-您不能使用它将输出保存在变量中。
因此,$output
的值将被解释为目标文件名/路径;如果从未创建变量$output
,则等于> $null
,即输出抑制。
还请注意,>
创建的文件总是纯文本文件,它们反映的是您在控制台(终端)中看到的相同输出格式,因此不适合程序化处理。
相比之下,您在注释中提到的常见-OutVariable
(-ov
)参数确实允许您在中捕获命令的输出对象变量,而不会干扰命令的输出。
也就是说,命令的输出仍然(也)写入输出流,并且如果该输出没有被其他命令,变量赋值或重定向使用,它仍然会打印到控制台。 / p>
例如,-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
因此,-OutVariable
(-ov
)很有用:
如果您想在控制台中查看命令的输出,同时又将其捕获到变量中以供以后分析。
,如果要在管道内捕获 intermediate 命令的输出而不干扰管道。
轻微警告是-OutVariable
(-ov
),它是:
不会创建常规的PowerShell数组([object[]]
),而是创建[System.Collections.ArrayList]
的实例。
创建一个-单元素-[System.Collections.ArrayList]
,即使该命令仅输出单个对象(例如,Get-Date
也是如此)。
在this GitHub issue中讨论了这些令人惊讶的行为。
但是,考虑到PowerShell具有灵活的集合处理功能和member enumeration功能,在实际操作中行为不一定总是有问题的。