【发布时间】:2013-11-26 06:58:47
【问题描述】:
更新:修改脚本以在 SQLPS 要求的 PS1 范围内工作。
改变:
IF($property.Value -match $regex){
$currentBadLine = (ConvertTo-Csv $_ -NoTypeInformation -Delimiter $delimiter);
$badLines += $currentBadLine[1,2]
};
收件人:
IF($property.Value -match $regex){
$badLines += $_ | Select-Object | ft -autoSize;
};
为每个坏行打印一个新的标题,但这不是世界末日,也不值得努力防止。
我有一个 Powershell 脚本,它可以在 CSV 文件有机会破坏我的数据导入之前对其进行预处理。
现在我已经连续在两台服务器上确认 PS 主要版本至少为 2,并且以下代码 sn-p 在 Powershell ISE 中运行良好。代码的目的是读取 CSV 的每一行,然后遍历列以查找 $regex 变量中的正则表达式模式。当它找到一个错误时,我希望它在修复它之前跟踪错误,以便稍后在输出准备好导入的清理文件之前编写错误日志。
%{
Foreach($Property in $_.PSObject.Properties){
IF($property.Value -match $regex){
$currentBadLine = (ConvertTo-Csv $_ -NoTypeInformation -Delimiter $delimiter);
$badLines += $currentBadLine[1,2]
};
$property.Value = $property.Value -replace $regex;
}
$_
}
但是,一旦我将该代码放入代理工作中,代理就会抱怨:
'术语 'ConvertTo-Csv' 未被识别为 cmdlet 的名称, 函数、脚本文件或可运行的程序。检查拼写 名称,或者如果包含路径,请验证路径是否正确并 再试一次。 '
那么问题是:Agents Powershell 子系统使用的 Powershell 版本是否与系统的其余部分不同?如果是这样,我如何找出子系统正在使用的版本,如果可能的话,升级它以便我可以解决这个问题。
服务器正在运行:
Windows Server 2008 R2 企业版
PS 主要版本 2,次要 0 构建 -1 修订版 -1
SQL Server 2008 R2 SP1 10.5.2500.0 64 位
谢谢!
【问题讨论】:
标签: sql-server powershell sql-server-2008-r2 powershell-2.0 sql-agent-job