【发布时间】:2017-10-11 14:54:43
【问题描述】:
我制作了以下 PowerShell 脚本:
Set-Location D:\folder1\folder2\folder3\folder4;
Get-ChildItem | Rename-Item -NewName {$_.BaseName.insert(19,'loadtime') + (Get-Date -Format HHmm) + $_.Extension};
目标是通过在位置 19 处添加加载时间和时间戳来重命名文件。运行脚本的结果返回以下错误消息:
Rename-Item : The input to the script block for parameter 'NewName' failed.
Exception calling "Insert" with "2" argument(s): "Specified argument was out
of the range of valid values.
Parameter name: startIndex"
At D:\folder1\folder2\folder3\folder4\folder5\RenameFile.ps1:2
char:38
+ Get-ChildItem | Rename-Item -NewName {$_.BaseName.insert(19,'loadtime') +
(Get-D ...
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (Archive:PSObject) [Rename-
Item], ParameterBindingException
+ FullyQualifiedErrorId :
ScriptBlockArgumentInvocationFailed,
Microsoft.PowerShell.Commands.RenameItemCommand
当我从我的 SSIS 包运行脚本时,我收到以下错误:
[Execute Process Task] Error: In Executing "PowerShell.exe" "-F D:\folder1\folder2\folder3\folder4\folder5\exec RenameFile.ps1" at "", The process exit code was "-196608" while the expected was "0".
我已尝试搜索此错误消息,但找不到有关此特定退出代码的页面。
问题是,虽然从 PowerShell 窗口运行脚本命令时,我仍然会收到错误消息,但文件名确实按预期更改。但是,由于返回错误,SSIS 中的执行流程任务将失败。
我的问题是,这个错误的原因是什么?我认为它与:
{$_.BaseName.insert(19,'loadtime') + (Get-Date -Format HHmm) + $_.Extension};
其中 $.BaseName.insert(19,'loadtime') 和 (Get-Date -Format HHmm) 和 + $.Extension 被视为单独的参数。 我对 PowerShell 的了解不是太多,所以这只是我的猜测。
什么可以帮助我摆脱错误?
提前致谢!
【问题讨论】:
-
该错误声称您正在尝试将数据插入到不存在的位置。你确定你有足够长的文件名吗?为什么要索引 19 呢?为什么不只是在末尾连接时间戳?
-
问得好,说实话这是因为我不知道怎么做。我可以这样做:$_.BaseName + 'Loadtime' + (Get-Date -Format HHmm) + $_.Extension};?
-
@vonPryz 成功了!我应该更清楚并立即尝试...如果您将此添加为答案,我将对其进行投票并关闭问题。
-
@vonPryz 但是......虽然从 powershell 窗口运行脚本时,我仍然在 SSIS 中收到错误代码。我可以通过添加退出代码来解决这个问题吗?所以它总是以 0 退出?
标签: sql-server powershell ssis scripting script-task