我是PowerShell的新手,我正在尝试将数据从CSV日志文件导入到SQL数据库中。
我使用foreach格式化表并使用Invoke-sqlcmd将值注入查询,除了需要更改日期和时间格式外,它可以正常工作。
我首先重新格式化日期和时间以匹配SmallDateTime格式。
我已经浏览了各个站点,试图弄清楚如何将文本格式化为原始形式。除了将其重新处理回新的CSV文件并重复该过程之外,我无法想到一种实现这一副手的方法(我什至不知道这是否会按预期工作。(
$CSVImport = Import-CSV $FileBrowser.FileName -Header $FSHeader | Select $_ | ? Time -NotLike 'Time'
$CSVRowCount = $CSVImport.Count
"Inserting $CSVRowCount rows from CSV into SQL Table"
ForEach ($CSVLine in $CSVImport) {
$CSVLine
$CSVLine = $CSVLine -Replace '(d{1,2})/(d{1,2})/(d{4})', '$3/$1/$2'
$CSVLine = $CSVLine -Replace '(d{1,2})/(d{1,2})/(d{4})', '$3/$1/$2'
我的输出$ csvline变量显示:
Date ColumnB ColumnC ColumnD
-------------- ------- ------- ------
2/7/2017 13:28 Second Third Last
之后,格式更改为。
@{Date=2017/2/7 13:28; ColumnB=Second; ColumnC=Third; ColumnD=Last}
我不确定如何利用查询的输出或将其重新格式化回之前存在的表。
关于如何进行此操作的任何建议?
预先感谢您。
- 与您提供的用户导入后
Date,ColumnB,ColumnC,ColumnD
$ csvimport是一个具有属性的对象 - $ csvline也是。
您的命令
$CSVLine = $CSVLine -Replace ...
强制PowerShell用其属性将对象串起,导致输出
@{Date=2017/2/7 13:28; ColumnB=Second; ColumnC=Third; ColumnD=Last}
您只能在$CSVLine.Date
上进行替换
但是,最好像汤姆·舒马赫(Thom-Schumachers(中建议的那样转换为[dateTime]。
根据您的语言环境的不同,可能还不够,然后尝试
[datetime]::ParseExact($CSVLine.Date,"M/d/yyyy HH:mm",$Null)
如果将日期放在DateTime类型
中[datetime]'2017/2/7 13:28'
然后,您将拥有一个可以使用的日期时间对象,以使您的心脏格式化:
[datetime]'2017/2/7 13:28' | gm
TypeName: System.DateTime
Name MemberType Definition
---- ---------- ----------
Add Method datetime Add(timespan value)
......
请参阅过去的文章,以获取有关如何格式化powershell中的日期时间的帮助