如何使用 PowerShell 从 csv 中减去一个字符

How can subtract a character from csv using PowerShell

我正在尝试将我的 CSV 插入我的 SQL 服务器数据库,但只是想知道如何从 CSV GID 列中减去最后三个字符,然后将其分配给我的 $CSVHold1 变量。

我的 CSV 文件如下所示

GID       Source               Type   Message   Time
KLEMOE    http://google.com    Od      Hello     12/22/2022
EEINGJ    http://facebook.com    Od     hey      12/22/2022

基本上我只是试图从 GID 中获取前三个字符并将该值传递给我的 $CSVHold1 变量。

       $CSVImport = Import-CSV $Global:ErrorReport
        ForEach ($CSVLine1 in $CSVImport) {
            $CSVHold1 = $CSVLine1.GID | ForEach-Object { $_.$GID = $_.$GID.subString(0, $_.$GID.Length - 3); $_ }
            $CSVGID1 = $CSVLine1.GID 
            $CSVSource1 = $CSVLine1.Source
            $CSVTYPE1 = $CSVLine1.TYPE
            $CSVMessage1 = $CSVLine1.Message
            }

我正尝试按照上面的方法进行操作,但由于某些原因我遇到了错误。

You cannot call a method on a null-valued expression.

您原来的第 3 行 was/is 语法无效,正如 Santiago 指出的那样。

$CSVHold1 = $CSVLine1.GID | ForEach-Object { $_.$GID = $_.$GID.subString(0, $_.$GID.Length - 3); $_ }

您正在呼叫 $_.$GID 但您想要 $_.GID

您也不需要将对象通过管道传送到循环中来实现您所要求的。

#!/usr/bin/env powershell

$csvimport = Import-Csv -Path $env:HOMEDRIVE\Powershell\TestCSVs\test1.csv

##$CSVImport = Import-CSV $Global:ErrorReport

ForEach ($CSVLine1 in $CSVImport) {
    $CSVHold1 = $CSVLine1.GID.SubString(0, $CSVLine1.GID.Length - 3)
    $CSVGID1 = $CSVLine1.GID 
    $CSVSource1 = $CSVLine1.Source
    $CSVTYPE1 = $CSVLine1.TYPE
    $CSVMessage1 = $CSVLine1.Message
    Write-Output -InputObject ('Changing {0} to {1}' -f $CSVLine1.gid, $CSVHold1)

}

使用您的示例数据,以上输出:

C:> . 'C:\Powershell\Scripts\dchero.ps1'
Changing KLEMOE to KLE
Changing EEINGJ to EEI

最后,请注意,如果 $CSVLine1.GID 的长度小于 3,SubString 方法将失败。