Powershell 更新CSV上的状态字段并再次导出

Powershell 更新CSV上的状态字段并再次导出,powershell,csv,export-to-csv,Powershell,Csv,Export To Csv,我正在开发一个脚本,用于使用PnP在SharePoint中创建导航。为此,我用我的URL和一些附加信息创建了一个CSV 我的CSV如下所示: Name,ParentName,Level,URL,Status,Order Tools,Consulting,1,http://linkless.header/,Existing,3 Tool Wiki,Tools,2,http://linkless.header/,Existing,3 Tool Box,Tools,2,http://linkless.

我正在开发一个脚本,用于使用PnP在SharePoint中创建导航。为此,我用我的URL和一些附加信息创建了一个CSV

我的CSV如下所示:

Name,ParentName,Level,URL,Status,Order
Tools,Consulting,1,http://linkless.header/,Existing,3
Tool Wiki,Tools,2,http://linkless.header/,Existing,3
Tool Box,Tools,2,http://linkless.header/,add,2
Tool Development,Tools,2,https://linkless.header/,Remove,1
Export-Csv : A positional parameter cannot be found that accepts argument 'System.Object[]'.
At Path\Navigation\UpdateNavigation.ps1:95 char:5
+     Export-Csv $CSV_Navigation -Path $CURRENT_DIRECTORY\UrlsNavigatio ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Export-Csv], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.ExportCsvCommand
我使用以下命令导入CSV

$CURRENT_DIRECTORY=Get-Location
$CSV_Navigation = Import-Csv $CURRENT_DIRECTORY\UrlsNavigation.csv 
然后我想做一些更改并再次导出它

$STATUS_ADD="Add"
$STATUS_REMOVE="Remove"
$STATUS_EXISTING="Existing"

function setStatusInCSV {
    ForEach($Item in $CSV_Navigation) {
        If ($Item.Status -eq $STATUS_ADD) {
            $Item.Status = $STATUS_EXISTING
        }   
    }
    Export-Csv $CSV_Navigation -Path $CURRENT_DIRECTORY\UrlsNavigation.csv -NoTypeInformation 
}
为此,我得到以下错误

Export-Csv : Cannot convert 'System.Object[]' to the type 'System.Char' required by parameter 'Delimiter'. Specified method is not supported.
At Path\Navigation\UpdateNavigation.ps1:95 char:16
+     Export-Csv $CSV_Navigation -Path $CURRENT_DIRECTORY\UrlsNavigatio ...
+                ~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Export-Csv], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.ExportCsvCommand

如果使用分隔符运行该命令,则如下所示:

Name,ParentName,Level,URL,Status,Order
Tools,Consulting,1,http://linkless.header/,Existing,3
Tool Wiki,Tools,2,http://linkless.header/,Existing,3
Tool Box,Tools,2,http://linkless.header/,add,2
Tool Development,Tools,2,https://linkless.header/,Remove,1
Export-Csv : A positional parameter cannot be found that accepts argument 'System.Object[]'.
At Path\Navigation\UpdateNavigation.ps1:95 char:5
+     Export-Csv $CSV_Navigation -Path $CURRENT_DIRECTORY\UrlsNavigatio ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Export-Csv], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.ExportCsvCommand
我的$CSV\u导航如下所示

Write-Host $CSV_Navigation 
@{Name=Tools; ParentName=Consulting; Level=1; URL=http://linkless.header/; Status=Ex
isting; Order=3} @{Name=Tool Wiki; ParentName=Tools; Level=2; URL=http://linkless.header/; Status=Existing; Order=3} @{Name=Tool Box; ParentName=Tools; Level=2; URL=http://linkless.header/; Status=Existing; Order=2} @{Name=Tool Development; ParentName=Tools; Leve
l=2; URL=https://linkless.header/; Status=Remove; Order=1} 

我认为这里的问题是这个命令的位置参数

您需要定义输入对象是什么。像这样:

Export-Csv -InputObject $CSV_Navigation -Path $CURRENT_DIRECTORY\UrlsNavigation.csv -NoTypeInformation 
编辑:您需要使用
Select Object-Property yourproperties
获得正确的输出或将数组导入命令:

$CSV_Navigation | Export-Csv -Path $CURRENT_DIRECTORY\UrlsNavigation.csv -NoTypeInformation 

我认为这里的问题是这个命令的位置参数

您需要定义输入对象是什么。像这样:

Export-Csv -InputObject $CSV_Navigation -Path $CURRENT_DIRECTORY\UrlsNavigation.csv -NoTypeInformation 
编辑:您需要使用
Select Object-Property yourproperties
获得正确的输出或将数组导入命令:

$CSV_Navigation | Export-Csv -Path $CURRENT_DIRECTORY\UrlsNavigation.csv -NoTypeInformation 

谢谢,如果我像你的例子中那样定义InputObject,我只得到对象的属性,而不是内容<代码>“Count”、“Length”、“LongLength”、“Rank”、“SyncRoot”、“IsReadOnly”、“IsFixedSize”、“IsSynchronized”、“8”、“8”、“8”、“1”、“System.Object[]、“False”、“True”、“False”如果使用Select对象进行管道传输,我会得到正确的csv,但所有示例的周围都有“
$csv\u Navigation”\124; Select对象-属性名称、父项名称、级别、URL、状态,顺序|导出Csv-Path$CURRENT\u DIRECTORY\UrlsNavigation.Csv-NoTypeInformation
如“工具箱”、“工具”、“2”、“尝试:$Csv\u导航|导出Csv-Path$CURRENT\u DIRECTORY\UrlsNavigation.Csv-NoTypeInformation与选择对象相同。我有这个
“工具开发”、“工具”、“2”https://linkless.header/“,”Remove“,”1“
关于如何删除双配额,您会发现类似的问题:谢谢,如果我像您的示例中那样定义InputObject,我只会得到对象的属性,而不会得到内容<代码>“Count”、“Length”、“LongLength”、“Rank”、“SyncRoot”、“IsReadOnly”、“IsFixedSize”、“IsSynchronized”、“8”、“8”、“8”、“1”、“System.Object[]、“False”、“True”、“False”如果使用Select对象进行管道传输,我会得到正确的csv,但所有示例的周围都有“
$csv\u Navigation”\124; Select对象-属性名称、父项名称、级别、URL、状态,顺序|导出Csv-Path$CURRENT\u DIRECTORY\UrlsNavigation.Csv-NoTypeInformation
如“工具箱”、“工具”、“2”、“尝试:$Csv\u导航|导出Csv-Path$CURRENT\u DIRECTORY\UrlsNavigation.Csv-NoTypeInformation与选择对象相同。我有这个
“工具开发”、“工具”、“2”https://linkless.header/“,”删除“,”1“
您会发现关于如何删除双配额的类似问题: