更新:根据 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,并且以下代码片段在 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 位
谢谢!