Powershell 其中对象保留空白行

Powershell 其中对象保留空白行,powershell,Powershell,我又一次被困在一件本该如此简单的事情上。我有一个CSV文件,我需要在其中做一些字符串修改并将其导出。数据如下所示: FullName -------- \\server\project\AOI \\server\project\AOI\Folder1 \\server\project\AOI\Folder2 \\server\project\AOI\Folder3\User 这在一定程度上是有效的,只是它删除了我的标题行,而且我还没有找到使用Get Content添加列的方法。为此,我必须使用

我又一次被困在一件本该如此简单的事情上。我有一个CSV文件,我需要在其中做一些字符串修改并将其导出。数据如下所示:

FullName -------- \\server\project\AOI \\server\project\AOI\Folder1 \\server\project\AOI\Folder2 \\server\project\AOI\Folder3\User 这在一定程度上是有效的,只是它删除了我的标题行,而且我还没有找到使用Get Content添加列的方法。为此,我必须使用
导入Csv
,这很好,但不断地重新加载同一个文件似乎效率低下。因此,我尝试使用
Import Csv
而不是
Get Content
重写上述内容:

$Folders=导入Csv C:\Folders.Csv
foreach($文件夹中的文件夹){
$Folder.FullName=$Folder.FullName.Replace(“\\server\AOI\”,“”)|
其中对象{$\匹配'\\'}|
其中对象{$\不匹配“用户文件”}
}
$Folders |导出Csv C:\Folders-mod.Csv-notype信息
我还没有添加用于添加新列的编码,但这会保留标题。但是,我最终得到了一堆空行,其中
where Object
删除了该行,我能找到的唯一方法是通过get Content命令运行输出文件。对于本应简单的事情来说,这一切似乎过于复杂


那么,我遗漏了什么呢?

感谢维修技师指出我做错了什么。这是我的最后一个脚本(添加了其他专栏):


我将使用表数组和pscustomobject来实现这一点

#Create an empty Array
$Table = @()

#Manipulate the data
$Fullname = Get-Content C:\Folders.csv | 
    ForEach-Object {$_.replace('\\server\project\', '')} | 
    Where-Object {$_ -match '\\'} | 
#Removes User Folders rows from CSV
Where-Object {$_ -notmatch 'User'}

#Define custom objects
Foreach ($name in $Fullname) {
    $Table += [pscustomobject]@{'Fullname' = $name; 'T/F' = 'FALSE'}
}

#Export results to new csv
$Table | Export-CSV C:\Folders-mod.csv -NoTypeInformation
这里还有另一种方法。。。[咧嘴笑]

输出

FullName       T/F
--------       ---
\AOI         False
\AOI\Folder1 False
\AOI\Folder2 False
注意

  • 在属性名称中添加斜杠是。。。讨厌的[咧嘴笑]
    这需要在每次需要访问时将属性名称用引号括起来。试试另一个名字——也许是“正确的”
  • 您可以使用
    $单独测试空白数组项[行]
  • [regex]::Escape()
    的东西真的很方便

最后一次尝试时,请将
Where{$\uU-match'\\}
Where{$\uU-notmatch'User Files}
移动到最后一行的一条语句中(并将其修复为包括FullName属性):
$Folders;Where{$\uUUU2.FullName-match'\\\'-和$\uU3.FullName-notmatch'User Files}
谢谢您,TheMadTechnician!这消除了空白线。现在添加我的列。:)哦,当我在打印我的解决方案时,我看到你已经有了一个解决方案。在任何情况下,我都使用了您最初的“获取内容”方法,因此您可以使用稍微不同的方法来读取CSV并获取新的CSV,而无需导入:)
$FileList = @'
FullName

\\server\project\AOI
\\server\project\AOI\Folder1

\\server\project\AOI\Folder2
\\server\project\AOI\Folder3\User
'@ | ConvertFrom-Csv

$ThingToRemove = '\\server\project'

$FileList |
    Where-Object {
        # toss out any blank lines
        $_ -and
        # toss out any lines with "user" in them
        $_ -notmatch 'User'
        } |
    ForEach-Object {
        [PSCustomObject]@{
            FullName = $_.FullName -replace [regex]::Escape($ThingToRemove)
            'T/F' = $False
            }
        }
FullName       T/F
--------       ---
\AOI         False
\AOI\Folder1 False
\AOI\Folder2 False