通过我的脚本,我得到了我电脑上所有已安装应用程序的列表,包括它们的版本。当我将其保存到csv文件中并用Excel打开时,它不会按行列出它们,而是在一行(单元格)中列出所有它们。我如何重新排列我的数组,应用程序列表,以便将它们单独排序到列的每一行(单元格)。
$currentUsername = $env:USERNAME
$computerName = $env:COMPUTERNAME
$timeStamp = Get-Date -Format "ss-mm-HH-dd/MM/yyyy"
$desktopPath = [System.IO.Path]::Combine($env:USERPROFILE, 'Desktop')
$outputFileName = "${timeStamp}_${currentUsername}_${computerName}.csv"
$outputFile = [System.IO.Path]::Combine($desktopPath, $outputFileName)
$installedApps = Get-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*" | Where-Object { $_.DisplayName -ne $null }
$installedAppsList = $installedApps | ForEach-Object {"$($_.DisplayName) ($($_.DisplayVersion))"}
$data = [PSCustomObject]@{
"Installierte Anwendungen" = $installedAppsList -join ", "
}
$data | Export-Csv -Path $outputFile -NoTypeInformation -Delimiter ";" -Encoding UTF8
2条答案
按热度按时间kmbjn2e31#
我觉得这个可以
h9vpoimq2#
在单个单元格中获取所有值的原因是,您正在创建一个具有1属性的PSCustomObject,并且将该属性设置为包含变量
$installedAppsList
的全部内容的字符串。这发生在你的代码的这一部分:
你可以这样做:
在Excel中打开生成的文件,您将看到现在有一个名为“Installierte Anwendungen”的列,该列中的每个值都在其自己的单元格中。
或者你可以跳过使用
ConvertFrom-Csv
的需要,这样做:在第二个示例中,我们将
$installedAppsList
创建为psobject数组,其中psobject具有名为Installierte Anwendungen
的属性。以下是关于这里发生的事情的更多信息:请务必记住,各种CSV相关cmdlet都是为处理对象及其属性而设计的。例如,当创建psobject
$data
时,它有一个名为“Installlierte Anwendungen”的属性,该属性的值是包含所有数据的字符串。当传递给Export-Csv
时,该cmdlet会看到命名属性及其字符串值。ConvertTo-Csv
cmdlet也是如此。如果将$installedAppsList
传递给ConvertTo-Csv
,您将看到输出是变量中包含的每个字符串的长度。这是因为cmdlet发现变量包含字符串对象,而这些字符串对象只有一个名为length的属性。若要亲自查看,请向Get-Member
cmdlet传递一个字符串。关键是将数据转换为一种格式,其中数据由具有命名属性的对象组成,这些属性的值是您希望在输出中显示的数据。convertFrom-Csv可以为您做到这一点。在这种特殊情况下,必须包含
-header
参数。如果不包括,则数组中的第一个值将被视为头。完成此操作后,您将拥有一个psobjects数组,其中每个对象都有一个名为'Installlierte Anwendungen'的属性,其值为字符串。此时,您可以将该psobject数组发送到Export-Csv cmdlet,它将正确地看到您需要一个名为“Installlierte Anwendungen”的列,该数组的每个索引都将成为输出中的一个单元格。