我正在使用Ricke-RestMethod从列表中自动收集有关IP地址的信息。虽然这本身就像微风一样工作,但我需要为计算机每次向API端点进行查询时添加时间戳,这就是将整个内容导出到CSV文件时出现问题的地方:
从今天开始,我对PowerShell非常陌生(除了在IT帮助台工作时简单地运行一些预先编写的脚本),但目前存在以下问题:
当将数据附加到输出路径中的CSV文件时,不会发生任何问题-但当然缺少时间戳作为列的要求。
然而,当我尝试使用Add-Member方法将新的hashvalue添加到查询产生的PS对象时(或者当我简单地导入csv,添加带有时间戳的列并将其导出回输出文件时),整个过程都会导致$null。
为什么会发生这种情况?有没有什么方法可以在每次迭代后正确地将这些时间戳添加到CSV中?
代码片段:
try {
$timestamp = Get-Date -Format "dd.MM.yyyy HH:mm"
Invoke-RestMethod @Params
| Select-Object ip, country_code, as, is_proxy
| Add-Member -MemberType NoteProperty -Name "query_date_and_time" -Value $timestamp
| Export-Csv $OutputPath -Append
# $arr += $Result
Write-Host "$Result"
} catch {
Throw $_.Exception
}
1条答案
按热度按时间r3i60tvu1#
Add-Member
小程序有点不寻常,因为它修改了它的输入对象 *,而不是 * 输出 * 修改后的对象,并且默认情况下不产生 * 输出 * -这就是为什么Export-Csv
没有接收到输入。但是,您也可以使用
-PassThru
开关请求输出修改后的对象。因此(管道重新格式化为与Windows PowerShell兼容):
顺便说一句:
-Append
将在每次运行时附加到预先存在的输出文件。相反,如果意图是在每次运行时完整地写入文件(重新),则忽略-Append
。[string]
示例和.NET * 值类型的示例 * 不能 * 就地修改,在这种情况下,您需要将合并-PassThru
与将结果赋值回输入变量(例如,$var = 101; $var = $var | Add-Member -PassThru Foo Bar
)相结合;然而,这些类型的装饰示例是 * 最好避免 *,原因在this answer的底部部分解释。