【问题标题】:Update Status Field on CSV and Export again更新 CSV 上的状态字段并再次导出
【发布时间】:2020-07-28 00:06:27
【问题描述】:

我正在开发一个脚本,用于在 SharePoint 中使用 PnP 创建导航。为此,我使用我的 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

我使用以下命令导入 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

如果我运行带有分隔符的命令,它看起来像这样:

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_Navigation 看起来像这样

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} 

【问题讨论】:

    标签: powershell csv export-to-csv


    【解决方案1】:

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

    你需要定义你的输入 objetc 是什么。像这样:

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

    编辑:您需要使用Select-Object -Property YourPropeerties 来获得正确的输出或将您的数组传递给命令:

    $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 Object 进行管道传输,我会得到正确的 csv,但所有示例都有 "" 围绕它们 $CSV_Navigation | Select-Object -Property Name,ParentName,Level,URL,Status,Order | Export-Csv -Path $CURRENT_DIRECTORY\UrlsNavigation.csv -NoTypeInformation 就像 "Tool Box","Tools","2","@ 987654321@"
    • 尝试:$CSV_Navigation | Export-Csv -Path $CURRENT_DIRECTORY\UrlsNavigation.csv -NoTypeInformation
    • 和Select-Object一样。我有这个"Tool Development","Tools","2","https://linkless.header/","Remove","1"
    • 您可以在 SO 如何删除双重配额方面找到类似问题:stackoverflow.com/questions/24074205/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多