0

我是powershell的新手,知道为什么会出现错误吗?

Yesterday_Date = (get-date).AddDays(-1).ToString("yyyMMdd")

 $jsb={
  $file = 'C:\Users\d1\Documents\Batch\path\$Yesterday_Date1\page.log'
  Get-Content $file -Wait | ForEach-Object -Begin {
   $counter = 1
  $lines = @(Get-Content $file).Count
   } -Process {
        if ($counter++ -gt $lines) {
    write-host $_ 
   }
  }
    }

开始工作 $jsb -name Dum

do{
Receive-Job -Name Dum | out-file C:\Users\path\pager.txt -append
}while(1)
4

1 回答 1

0

一些语法错误。

第一个:变量 Yesterday_Date 缺失$。此外,您稍后指的是 variable $Yesterday_Date1,而不是$Yesterday_Date。始终使用Set-PSDebug -Strict来捕获此类错误。正确的形式是

$Yesterday_Date = (get-date).AddDays(-1).ToString("yyyMMdd")

第二:单引号不评估字符串中的变量。双引号可以。考虑:

$file = 'C:\Users\d1\Documents\Batch\path\$Yesterday_Date\page.log'
$file
# Output
C:\Users\d1\Documents\Batch\path\$Yesterday_Date1page.log

$file2 = "C:\Users\d1\Documents\Batch\path\$Yesterday_Date1\page.log"
$file2 
# Output
C:\Users\d1\Documents\Batch\path\20130520\page.log

编辑:

为了解决评论中的问题,问题是作业需要特殊的参数处理。用于-Arg将日期变量作为参数传递。像这样,

$Yesterday_Date = (get-date).AddDays(-1).ToString("yyyMMdd") 
$jsb={
  param($date) 
  $file = "C:\Users\d1\Documents\Batch\path\$date\page.log" 
  write-host $file
}

Start-Job $jsb -name Dummy -arg $Yesterday_Date
Wait-Job -name Dummy
Receive-Job -Name Dummy
# Output
C:\Users\d1\Documents\Batch\path\20130521\page.log
于 2013-05-21T04:57:54.700 回答