[英]Trying to Run Powershell from SQL Query Result
我想看看我们是否可以在 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 进行了尝试。
我不确定您在 $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())"
对您的脚本进行更改,然后再试一次。
如果这对您有用,请不要忘记将此标记为已回答。
最终执行以下操作并使其工作。
$Converted = "[DateTime]::ParseExact('"+$date+"', 'yyyy-MM-ddTHH:mm:sszzz', [CultureInfo]::GetCultureInfo('en-US')).tostring('yyyy-MM-dd HH:mm:ss')"
$dateConverted = Invoke-Expression $Converted
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.