2017-03-14 4 views
1

"アンインストール"プログラムごとにPublisher、DisplayName、およびDisplayVersionを取得し、製品ごとに1行のファイルに入れ、各エントリ間にコンマをつけて、アンインストールプログラムの出力フォーマット - Poweshell

Publisher, DisplayName, DisplayVersion 

が、私は、各エントリの内容全体を維持する必要があります(つまりFormat-Tableが行うよう、切り捨てられません)。

私は、後でアクセスするために、それぞれの希望のアイテムを配列に配置しています。

$Publisher = Get-ItemProperty 'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' | Select Publisher 

$DisplayName = Get-ItemProperty 'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' | Select DisplayName 

$DisplayVersion = Get-ItemProperty 'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' | Select DisplayVersion 

エントリをループして書き出すことができるようにします。

for ($i=0; $i -lt $DisplayName.Count; $i++) 
{ 
    $MyOutput = (([string]::Concat($Publisher[$i].getValue, ",", $DisplayName[$i], ",", $DisplayVersion[$i]) | Out-String)) 
    Add-Content D:\InstalledPrograms.txt $MyOutput 
} 

私はこれを行うと、私の出力はそれでアレイ名を持っているだけでなく同様:

@{Publisher=Adobe Systems Incorporated},@{DisplayName=Adobe AIR},@{DisplayVersion=3.1.0.4880} 
(i.e. @{ArrayName ArrayContent}) 

にはどうすれば@{ArrayName }を取り除くことができ、コンテンツのみを残しますか?

答えて

1

これは、プロパティ付きのオブジェクトを文字列に変換するためです。例を使用してください。 [string]::Concatメソッドの$DisplayName[$i].DisplayNameを使用してプロパティから値を取得します。

for ($i=0; $i -lt $DisplayName.Count; $i++) 
{ 
    ([string]::Concat($Publisher[$i].Publisher, ",", $DisplayName[$i].DisplayName, ",", $DisplayVersion[$i].DisplayVersion) | Out-String) 
} 

出力:

Microsoft Corporation,Microsoft Visual Studio Code,1.10.2 

それともSelect-Object -ExpandProperty DisplayNameコレクションしばらくの値を使用することができます。それだけの価値を保持します。 Atm。 Select-Object DisplayNameなどは、上記のように値を取得するためにプロパティにアクセスする必要があるため、冗長です。 Ex。

$Publisher = Get-ItemProperty 'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' | Select -ExpandProperty Publisher 

ただし、これを書き換えます。 1つのオブジェクトにインストールするすべてのプロパティを取得して、その値が同じソフトウェアに属することを100%保証する必要があります。試してください:

#Get all software in uninstall-key 
Get-ItemProperty 'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' | 
#Remove empty lines 
Where-Object { $_.DisplayName } | 
#Arranging the properties in the order you want 
Select-Object Publisher, DisplayName, DisplayVersion | 
#Export to CSV 
Export-Csv -Path "D:\InstalledPrograms.txt" -NoTypeInformation -Append 

Ex。 CSV出力

"Publisher","DisplayName","DisplayVersion" 
"Adobe Systems Incorporated","Adobe Flash Player 24 NPAPI","24.0.0.221" 
"Tim Kosse","FileZilla Client 3.14.1","3.14.1" 
"Microsoft Corporation","Microsoft Help Viewer 2.2","2.2.25123" 
"mIRC Co. Ltd.","mIRC","7.43" 
"Mozilla","Mozilla Firefox 51.0.1 (x86 en-US)","51.0.1" 
"Mozilla","Mozilla Maintenance Service","51.0.1.6234" 
"NVIDIA Corporation","NVIDIA Stereoscopic 3D Driver","7.17.13.7500" 
"Valve Corporation","Steam","2.10.91.91" 
"VideoLAN","VLC media player","2.2.4" 

出力ファイルがカスタムファイルである場合は、とExport-CSVを交換することにより行ったように、あなたが追加することができます:

#Export to CSV and skip header 
ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | 
#Append to file. 
Add-Content -Path "D:\InstalledPrograms.txt" 
+0

おかげフローデ。私はデータを1行ずつ書き込む前に少しデータを処理する必要があるので、最初に変数にコピーする必要があります。あなたが私に与えたものはとても役に立ちます。もともと私は1つの変数ですべてを持っていましたが、ファイルに正しく入るようにすることに問題があったときにそれを分割しました。わかった。 – Stett

関連する問題