这里有一个脚本,我需要导出到文本文件的结果也显示在底部的输出窗格中。有人可以帮忙吗?
我目前得到的结果是它只显示了机器的Make和型号,但没有显示其他从Domain一直到GB中的内存。我希望它全部显示在底部的输出窗格上,并保存在一个文本文件中,该文件可以立即保存和打开。
请注意:文件打开时会显示数据,但主要问题是它不会显示在输出窗格中。这是脚本:
Clear-Host
Write-Host "Setting Execution Policy to Remote Signed..." -ForegroundColor Yellow
Set-ExecutionPolicy RemoteSigned -Force
Write-Host "Your execution policy is set to:" -ForegroundColor Cyan
Get-ExecutionPolicy
Start-Sleep -s 3
Clear-Host
Write-Host "Generating computer statistics..." -ForegroundColor Yellow
Write-Host " "
Start-Sleep -s 2
function systemstats {
Write-Host "Manufacturer:" -ForegroundColor Cyan
Write-Host "$($m.Manufacturer)" -ForegroundColor Yellow
Write-Host "Model:" -ForegroundColor Cyan
Write-Host "$($m.Model)" -ForegroundColor Yellow
Write-Host "Domain:" -ForegroundColor Cyan
$env:USERDOMAIN
Write-Host "Computer Name:" -ForegroundColor Cyan
$env:COMPUTERNAME
Write-Host "Operating System & Location:" -ForegroundColor Cyan
(Get-WmiObject Win32_OperatingSystem).name
Write-Host "OS Architecture:" -ForegroundColor Cyan
if ((Get-WmiObject win32_operatingsystem | select osarchitecture).osarchitecture -eq "64-bit")
{
Write "64-bit OS"
}
else
{
Write "32-bit OS"
}
Write-Host "OS Build:" -ForegroundColor Cyan
(Get-CimInstance Win32_OperatingSystem).version
Write-Host "Version:" -ForegroundColor Cyan
(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseID).ReleaseID
Write-Host "Current IP Address:" -ForegroundColor Cyan
Ipconfig | Select-String IPv4
Write-Host "Calculating RAM installed in MB:" -ForegroundColor Cyan
(systeminfo | Select-String 'Total Physical Memory:').ToString().Split(':')[1].Trim()
$m = (Get-WmiObject -Class Win32_ComputerSystem -Property * |
Select-Object -Property Manufacturer, Model)
Write-Host "Disk Space in GB:" -ForegroundColor Cyan
gwmi win32_logicaldisk | Format-Table DeviceId, MediaType, @{n="Size";e={[math]::Round($_.Size/1GB,2)}},@{n="FreeSpace";e={[math]::Round($_.FreeSpace/1GB,2)}}
}
$result=(systemstats)
$result | Out-File "C:\Users\brendan.hargate\Desktop\test.txt"
Invoke-Item "C:\Users\brendan.hargate\Desktop\test.txt"
答案 0 :(得分:1)
使用Tee-Object
代替Out-File
:
$result | Tee-Object -FilePath "C:\Users\brendan.hargate\Desktop\test.txt"
Tee-Object
(受tee
启发)将复制输入流 - 一个副本在管道下传递(在您的情况下将在命令窗格中结束),另一个写入变量或文件(如上例所示)
答案 1 :(得分:0)
部分中的systemstats
函数使用Write-Host
,它在PowerShell的(成功)输出流之外运行。
Write-Host
输出(PSv4)/默认情况下未在变量或输出文件中捕获(PSv5 +)。顾名思义, Write-Host
写入主机UI(控制台),并且不意味着输出数据 - 那& #39; s Write-Output
及其别名Write
以及隐式输出(例如,$env:USERDOMAIN
本身)适用于。
诸如$result = ...
之类的变量赋值仅捕获(成功)输出流输出,即隐式输出和Write
(a.k.a。Write-Output
)命令的输出。相比之下,您的Write-Host
命令直接打印到控制台。
鉴于您已将$result
发送到文件 - 而不是将其打印到控制台 - 净效果是仅 Write-Host
输出出现在控制台中。< / p>
因此,解决方案有两个组成部分:
将您的功能修改为仅使用隐式输出(Write-Output
输出)以产生数据输出。
然后使用Tee-Object
打印到两个控制台(通过成功输出流)和一个文件,如{{3 }}
顺便说一句,在PSv5 +中,你可以躲过以下(虽然这是不明智的),基于捕获Write-Host
输出的能力 - 现在是虚拟别名Write-Information
- 通过新引入的输出流编号6
:
systemstats 6>&1 | # PSv5+: redirect the information stream to the (success) output stream.
Tee-Object -FilePath "$([Environment]::GetFolderPath('Desktop'))\text.txt"