代码之家  ›  专栏  ›  技术社区  ›  Philip

ForEach对象在命令管道位置的问题

  •  -1
  • Philip  · 技术社区  · 4 年前

    我有下面的Powershell脚本,我正在努力完成它。

    Get-ChildItem -Path 'C:\temp\xml' -Include '*.xml' |
        ForEach-Object 
        {
            $FileName = $_.Fullname
        $Pattern = "</Date>"  
        $FileOriginal = Get-Content $FileName
        $date = Get-Date
        $DateStr = $date.ToString("yyyyMMdd")
    
        [String[]] $FileModified = @() 
        Foreach ($Line in $FileOriginal)
        {   
            $FileModified += $Line
            if ($Line -match $pattern) 
            {
            $FileModified += "<CDate>$DateStr</CDate>"
    
            } 
        }
        $FileModified = $FileModified -replace "CUR","PIT"
        $FileModified = $FileModified -replace "Current","Time"
        Set-Content $fileName $FileModified   
        }
    

    当我尝试运行它时,会收到以下消息:

    cmdlet ForEach-Object at command pipeline position 2
    Supply values for the following parameters:
    Process[0]:
    

    有人能看出我做错了什么吗?

    1 回复  |  直到 4 年前
        1
  •  1
  •   js2010    4 年前

    echo hi | foreach-object {
      $_
    }
    

    即使在脚本中,这也会失败。它是一个cmdlet,而不是像“if”这样的语句,因此它需要在同一行中使用-Process参数。

    echo hi | foreach-object 
    {
      $_
    }
    
    推荐文章