Windows 为什么不执行此powershell脚本

Windows 为什么不执行此powershell脚本,windows,powershell,Windows,Powershell,我正在尝试制作一个脚本,该脚本执行以下操作: 打印文件 删除所有空行 过滤掉所有不包含“重新分配”一词的行 删除每行开头的所有空格和“>” 在我为第4步添加函数之前,一切正常,之后powershell会抛出一系列错误。我做错了什么 PS C:\Users\pzsr7z.000\Desktop\incidentoutput> cat .\csvtest.txt | ? {$_.trim() -ne "" } | sls "^Reassignment$" -Context 1,2 | fore

我正在尝试制作一个脚本,该脚本执行以下操作:

  • 打印文件
  • 删除所有空行
  • 过滤掉所有不包含“重新分配”一词的行
  • 删除每行开头的所有空格和“>”
  • 在我为第4步添加函数之前,一切正常,之后powershell会抛出一系列错误。我做错了什么

    PS C:\Users\pzsr7z.000\Desktop\incidentoutput> cat .\csvtest.txt | ? {$_.trim() -ne "" } | sls "^Reassignment$" -Context 1,2 | foreach{ $_.TrimStart(">"," ")}
    Method invocation failed because [Microsoft.PowerShell.Commands.MatchInfo] does not contain a method named 'TrimStart'.
    At line:1 char:90
    + ... 1,2 | foreach{ $_.TrimStart(">"," ")}
    +                    ~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : MethodNotFound
    
    Method invocation failed because [Microsoft.PowerShell.Commands.MatchInfo] does not contain a method named 'TrimStart'.
    At line:1 char:90
    + ... 1,2 | foreach{ $_.TrimStart(">"," ")}
    +                    ~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : MethodNotFound
    
    Method invocation failed because [Microsoft.PowerShell.Commands.MatchInfo] does not contain a method named 'TrimStart'.
    At line:1 char:90
    + ... 1,2 | foreach{ $_.TrimStart(">"," ")}
    +                    ~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : MethodNotFound
    
    Method invocation failed because [Microsoft.PowerShell.Commands.MatchInfo] does not contain a method named 'TrimStart'.
    At line:1 char:90
    + ... 1,2 | foreach{ $_.TrimStart(">"," ")}
    +                    ~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : MethodNotFound
    

    所有的函数都各自独立工作,当我尝试添加最后一部分时,事情就搞砸了

    我的灵能告诉我,您正试图对cmdlet返回的对象使用
    String
    的方法

    首先尝试将其强制转换为字符串:

    ... | sls "^Reassignment$" -Context 1,2 | foreach{ $_.ToString().TrimStart(">"," ")
    

    此正则表达式模式:
    ^Reassignment$
    将只匹配具有确切值的行
    Reassignment
    ——并非所有包含
    Reassignment

    当您已经在使用
    Get Content
    cat
    )读取文件中的行时,您也可以在所有行上使用
    -match
    操作符(
    -cmatch
    区分大小写):

    -match
    运算符只返回匹配的字符串,因此您可以直接对以下字符串调用
    TrimStart()

    $ReassignmentLines = (cat .\csvtest.txt) -cmatch 'Reassignment' |ForEach-Object {
        $_.TrimStart(">"," ")
    }
    

    不包含???什么?您好,当我尝试使用这个函数时,trim函数似乎只处理匹配输出的第一行(请参见屏幕截图链接),而不是所有的行。是什么导致它这样做的?@lacrosse1991嗯,我不知道为什么它对你有用。您正在将内容读取到数组(每行都是数组的一个元素),然后将每个元素与
    选择字符串匹配。但这意味着
    selectstring
    没有返回的上下文,因为它一次只能看到一行。能否提供一个
    csvtest.txt
    文件的示例?与您的邮件中的内容相同吗?您好,很抱歉回复时间太长。虽然我走了另一条路,但最终还是让它工作了。你觉得这个剧本怎么样?我是powershell的新手(昨天刚开始,之前只做过perl、bash和一些python,bash是我的最爱),所以如果您有任何意见,我将不胜感激。我只是拍了一些截图,因为网络上的pastebin/文本共享网站被屏蔽了。脚本:输入:(一个大文本文件中的文本样本,我正在同时处理几个文件)输出:@lacrosse1991有一个专门的SE站点,用于解决此类问题:,在那里讨论代码会容易得多。快速浏览一下,您不需要临时文件,老实说,您的解决方案应该可以很好地工作,您只需要扩展它以去除空白和
    。就我个人而言,我只需要使用(用
    \r\n
    替换
    \n
    )获取所有数据,并在使用
    导出CSV
    保存到CSV之前对其进行修剪。
    $ReassignmentLines = (cat .\csvtest.txt) -cmatch 'Reassignment' |ForEach-Object {
        $_.TrimStart(">"," ")
    }