在Powershell中合并输出

时间:2019-12-05 12:53:51

标签: powershell

我目前有一个用于检查注册表的脚本,如果该注册表项存在,则它将向控制台输出一个值。 如何修改此脚本,以便将每个输出保存到变量,然后将该变量导出到text / csv文件?

if ((Get-ItemPropertyValue -Path "HKLM:\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE" -Name HelpPane.exe) -eq '1')
{
    Write-Output 'Yes'
} 
else 
{
    Write-Output 'No'
}

if ((Get-ItemPropertyValue -Path "HKLM:\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_DISABLE_SQM_UPLOAD_FOR_APP" -Name iexplore.exe) -eq '1')
{
    Write-Output 'Yes'
} 
else 
{
    Write-Output 'No'
}

if ($Host.Name -eq "ConsoleHost")
{
    Write-Host "Press any key to continue..."
    $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyUp") > $null

2 个答案:

答案 0 :(得分:3)

为此使用Tee-Object,它会通过管道移动数据并将其保存到文件中。

$content | Tee-Object -FilePath C:\some\path\on\disk.txt

这将获取变量$content,将其通过管道传输到Tee-Object,后者将输出写入文件,然后获取相同的输出并通过管道将其推送。在这种情况下,您应该看到$content也被写入输出流,但是如果您选择这样做,也可以将其传递到管道中的另一个cmdlet。

答案 1 :(得分:0)

您有选择。

  

同时存储和显示PowerShell变量的3种方法

     

https://ridicurious.com/2017/06/30/3-ways-to-store-display-results-infrom-a-powershell-variable-at-the-same-time

# Using -OutVariable parameter
Get-Process a* -OutVariable process

# PowerShell Variable squeezing
($process = Get-Process a*)

# Using Tee-Object Cmdlet
Tee-Object Cmdlet T’s results to o/p stream and Variable $process at the same time

要点: 除非使用屏幕文本着色,否则避免使用Write-Host / echo。几乎没有理由将其用作屏幕输出是PowerShell的默认设置。

此外,如果您打算在线路/管道等处使用数据,则Write-Host清空缓冲区,然后数据就消失了。好吧,这取决于您所使用的PowerShell版本。

资源:

来自Powershell的创建者。

  

写主机被认为有害

     

http://www.jsnover.com/blog/2013/12/07/write-host-considered-harmful

     

...截至2016年5月,Jeffrey Snover改变了立场。

     

使用PowerShell v5 Write-Host不再“杀死幼犬”。数据是   捕获到信息流中...

     

https://twitter.com/jsnover/status/727902887183966208

     

https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Utility/Write-Information?view=powershell-5.1

您的代码中没有Write-Host内容。

if ((Get-ItemPropertyValue -Path 'HKLM:\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE' -Name HelpPane.exe) -eq '1')
{'Yes'} 
else {'No'}

if ((Get-ItemPropertyValue -Path 'HKLM:\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_DISABLE_SQM_UPLOAD_FOR_APP' -Name iexplore.exe) -eq '1')
{'Yes'} 
else { 'No'}

if ($Host.Name -eq "ConsoleHost")
{
    'Press any key to continue...'
    $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyUp') > $null
}

最后,请注意报价。简单字符串的单引号,变量扩展或其他特定字符串处理的双引号。

如帮助文件和其他资源中所定义:

  

about_Quoting_Rules-PowerShell |微软文档

     

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules

     

PowerShell报价规则的故事

     

https://trevorsullivan.net/2016/07/20/powershell-quoting

     

Windows PowerShell报价

     

https://www.computerperformance.co.uk/powershell/quotes