我正在尝试查看是否可以在SQL db中存储Powershell命令或行并在检索时运行它。下面是我的代码示例:
$fields = "SELECT fieldName,exception,syntax FROM import_Fields WHERE HRISid='$srcID'"
$results = Invoke-Sqlcmd -Query $fields -ServerInstance $Global:sqlHost -Database $Global:sqlDB
$fvalues = ""
$values = ""
$ct = $results.count
Write-Host $ct
$i = 1
foreach($field in $results){
if($i -lt $ct){
$fvalues += $field.fieldName+","
#Write-Host $field.exception
if($field.exception -eq "0"){
$name = $field.fieldName
$values += "'"+$row.$name+"'"
}else{
$name = $field.fieldName
$exception = $field.syntax
$values += "'"+$exception+"'"
}
}else{
$fvalues += $field.fieldName
$values += "''"
}
$i++
}
在$ values + =“'” + $ exception +“'”中,我需要日期转换为[[DateTime] :: ParseExact(“ + $ row.LastHireDate +”。Substring(0,10), 'yyyy-MM-dd',[CultureInfo] :: GetCultureInfo('en-US'))“,该操作我想完成并存储在SQL数据库中。可以运行此命令吗?我已经通过Invoke-Command和Invoke-Expression尝试过。
答案 0 :(得分:0)
我不确定您在$ row.LastHireDate中传递了什么值,但是在调用[DateTime]::ParseExact
函数时,
字符串表示形式的格式必须与指定的格式完全匹配,否则将引发异常。
以下代码段均可正常运行。调整您的脚本,使其与ParseExact
函数中第二个参数(即yyyy-MM-ddHH:mm:ss
$Command = "[DateTime]::ParseExact('2020-01-0210:10:38', 'yyyy-MM-ddHH:mm:ss', [CultureInfo]::GetCultureInfo('en-US')).tostring('yyyy-MM-dd HH:mm:ss')"
$dt = Invoke-Expression $Command
Write-Host "Output: $($dt.ToString())"
更改脚本,然后重试。
如果这对您有用,请不要忘记将其标记为已回答。
答案 1 :(得分:0)
最终完成了以下操作,并使它起作用。
$Converted = "[DateTime]::ParseExact('"+$date+"', 'yyyy-MM-ddTHH:mm:sszzz', [CultureInfo]::GetCultureInfo('en-US')).tostring('yyyy-MM-dd HH:mm:ss')"
$dateConverted = Invoke-Expression $Converted