2017-11-28 9 views
0

ここにはテキストファイルに書き出す結果が必要なスクリプトがあります。誰でも助けてくれますか?Powershellは情報をテキストファイルに出力しますが出力ペインには出力しません

私が現在得ている結果は、マシンのメイクとモデルのみを表示し、他のものはドメインから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

これはローカルで実行されているため、ローカルマシン情報のみが表示されます。 ADに接続してすべてのコンピュータオブジェクトを取得し、foreachループを使用して各コンピュータオブジェクトの情報を取得する必要があります。 –

+0

私はそれを求めていないことを知っています。質問のポイントは、誰かがなぜテキストドキュメントにあるのと同様に下部の出力ペインに表示されていないのかを誰かが助けてくれるかどうかを確認することです。 – Brendan

+0

これを実行する前に、直接test.txtに保存しているので表示されません。$ result firstを呼び出してください。 –

答えて

1

代わりOut-Fileの使用Tee-Object

$result | Tee-Object -FilePath "C:\Users\brendan.hargate\Desktop\test.txt" 

Tee-Objectを(teeに触発さ)、入力ストリームを複製します - 一つのコピーがパイプラインの下に渡されます(これはあなたのケースではコマンドペインに表示されます)、もう1つは変数またはファイルに書き込まれます(上の例のように)

+0

ありがとうございますが、今は書き込みホストが表示されません – Brendan

0

systemstats関数部分には、PowerShell(成功)出力ストリームの外で動作するWrite-Hostを使用します。

Write-Host出力はキャプチャできません(PSv4)/デフォルトでは変数または出力ファイルにキャプチャされません(PSv5 +)。名前が示すように、Write-Hostは、ホストUI(コンソール)への書き込み、およびない出力に意味データである - それは何Write-Outputとその別名、Writeだけでなく、暗黙の出力(例えば、$env:USERDOMAINですそれ自身で)はのためです。

$result = ...のような可変の割り当ては、(成功)出力ストリーム出力、すなわちWrite(a.k.a. Write-Output)コマンドからの暗黙的な出力と出力のみをキャプチャします。対照的に、Write-Hostコマンドはコンソールに直接印刷されます。また、コンソールにそれを印刷せず - - 正味の効果はのみWrite-Host出力がコンソールに登場ということであった

は、ファイルに$resultを送ったことを考えます。

溶液は、従って、二つの成分た:

  • は、データ出力を生成するためにのみ使用暗黙出力(Write-Output出力)にあなたの機能を変更します。

  • そしてMathias R. Jessen's helpful answerに示唆されるように、両方(成功出力ストリームを介して)コンソールファイルに印刷するTee-Objectを使用します。Write-Informationの今仮想エイリアス - さておき、PSV5 +で、あなたWrite-Host出力をキャプチャする機能に基づいて、(無分別であるが)以下で離れて得ることができるよう


- 新しく導入された出力ストリーム番号を使用6

systemstats 6>&1 | # PSv5+: redirect the information stream to the (success) output stream. 
    Tee-Object -FilePath "$([Environment]::GetFolderPath('Desktop'))\text.txt" 
関連する問題