运算符'-gt'在此PowerShell中不起作用

时间:2014-04-10 16:40:20

标签: powershell

我有一个PowerShell脚本,它根据我的要求读取CSV文件并过滤掉数据,但问题是它只适用于我的Windows 8.1系统,而不是其他任何地方。准确地说-gt运算符,如果我将-gt更改为ltle等,该脚本将在其他系统上运行。

以下是剧本。

$date1 = Date ("{0:MM/dd/yyyy}" -f (get-date).AddDays(-1)) -format G

echo $date1

Import-Csv C:\avaya\2014.04.csv | Where-Object { $_.Party1Name -eq "User_Name" -and $_.'Call Start' -gt ( $date1 ) } | Export-Csv -Path "result.csv" -NoTypeInformation

2 个答案:

答案 0 :(得分:7)

-gt正在按预期工作。问题是您正在尝试将字符串值与-gt进行比较。要比较日期,它们需要是DateTime - 对象。导入CSV文件时,所有值都将作为字符串导入。您需要将日期转换回DateTime - 对象。例如:

$date1=(get-date).AddDays(-1)

echo $date1

Import-Csv C:\avaya\2014.04.csv | Where-Object { $_.Party1Name -eq "User_Name" -and ($_.'Call Start' -as [datetime]) -gt $date1 } | Export-Csv -Path "result.csv" -NoTypeInformation

答案 1 :(得分:2)

它没有按照你期望的方式工作,因为你所做的是字符串比较,而不是日期比较。

CSV文件中包含的是日期字符串。使用比较运算符时,PowerShell将基于左侧的对象类型进行比较,并在必要时将右侧强制转换为相同类型以执行操作。从日期时间对象开始,并将其放在左侧,PowerShell会将右侧的字符串强制转换为日期时间:

$date1 = (get-date).AddDays(-1)

echo $date1

Import-Csv C:\avaya\2014.04.csv |
 Where-Object { $_.Party1Name -eq "User_Name" -and $date1 -lt $_.'Call Start' } |
 Export-Csv -Path "result.csv" -NoTypeInformation