Powershell导出CSV
我只是在尝试将以下内容导出到CSV时遇到问题,我尝试将Powershell导出CSV,powershell,export-to-csv,Powershell,Export To Csv,我只是在尝试将以下内容导出到CSV时遇到问题,我尝试将导出CSV放在Foreach对象循环中,但没有效果 我想把服务器名$server放在第一列,把描述$description放在第二列 在早期版本中,我可以使用Out file-append.\outa.txt-InputObject$\uuName.$description创建文本文件,但格式设置不太好 $server = Get-ADComputer -Filter {OperatingSystem -Like "*Server*" -an
导出CSV
放在Foreach对象
循环中,但没有效果
我想把服务器名$server
放在第一列,把描述$description
放在第二列
在早期版本中,我可以使用Out file-append.\outa.txt-InputObject$\uuName.$description
创建文本文件,但格式设置不太好
$server = Get-ADComputer -Filter {OperatingSystem -Like "*Server*" -and Name -Notlike "*DOM*"}
$server | ForEach-Object {
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$_.Name)
$RegKey = $Reg.OpenSubKey("SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters")
$description = $RegKey.GetValue("srvcomment")
} | Export-Csv .\out1.csv
与
ForEach对象相对的ForEach
:
$server = Get-ADComputer -Filter {OperatingSystem -Like "*Server*" -and Name -Notlike "*DOM*"}
foreach($s in $server){
# replaced $_ with $s
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$s.Name)
$RegKey= $Reg.OpenSubKey("SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters")
$description = $RegKey.GetValue("srvcomment")
# casting as array is required to use +=
# disclaimer: the array is destroyed and rebuilt on each run.
[array]$myData += New-Object psobject -Property @{
Server = $s.Name
Description = $description
}
}
# If you want a CSV without the top info line, use the notypeinfo switch
# Select-Object gives you the column order you want.
$myData | Select-Object Server,Description | Export-Csv .\out1.csv -NoTypeInformation
编辑-评论回答
不需要创建数组,也可以从循环内部执行,但是Export Csv
AFAIK需要一个对象
ForEach对象
:
$server = Get-ADComputer -Filter {OperatingSystem -Like "*Server*" -and Name -Notlike "*DOM*"}
$server | ForEach-Object {
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$_.Name)
$RegKey = $Reg.OpenSubKey("SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters")
New-object psobject -Property @{Server=$_.Name;Description=$RegKey.GetValue("srvcomment")} | Export-Csv .\out1.csv -NoTypeInformation
}
ForEach的
:
$server = Get-ADComputer -Filter {OperatingSystem -Like "*Server*" -and Name -Notlike "*DOM*"}
foreach($s in $server){
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$s.Name)
$RegKey= $Reg.OpenSubKey("SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters")
New-object psobject -Property @{Server=$s.Name;Description=$RegKey.GetValue("srvcomment")} | Export-Csv .\out1.csv -NoTypeInformation
}
如果您对值有问题,括号/子表达式可以帮助您:
New-object psobject -Property @{Server=($_.Name);Description=($RegKey.GetValue("srvcomment"))} | Export-Csv .\out1.csv -NoTypeInformation
New-object psobject -Property @{Server=$($_.Name);Description=$($RegKey.GetValue("srvcomment"))} | Export-Csv .\out1.csv -NoTypeInformation
ForEach对象仅包含语句(变量赋值)。它没有归还任何东西。您需要返回一些内容,否则将传递一个空管道到
导出CSV
我猜,与其设置名为$Reg
、$RegKey
和$description
(并且永远不要使用它们的值)的变量,您实际上要做的是在CSV中创建名为Reg
、RegKey
和description
的列。在这种情况下,您希望每次通过循环生成一个[PSCustomObject]
(将这些属性添加到其中)
$server = Get-ADComputer -Filter {OperatingSystem -Like "*Server*" -and Name -Notlike "*DOM*"}
$server | ForEach-Object {
[PSCustomObject] @{
Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$_.Name)
RegKey = $Reg.OpenSubKey("SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters")
description = $RegKey.GetValue("srvcomment")
}
} | Export-Csv .\out1.csv
那对我有用,谢谢。在不创建数组的情况下是否可以执行此操作?似乎是一个额外的步骤-必须有一种方法在循环中放置输出。@请参见编辑。最后,我也在处理
ForEach对象