当脚本结果正确时,Powershell 返回负退出代码

2024-01-07

我制作了以下 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,'加载时间') 和 (Get-Date -Format HH mm) 和 + $.Extension 被视为单独的参数。 我对 PowerShell 的了解不是太多,所以这只是我的猜测。

什么可以帮助我消除错误?


根据评论,该问题是由于尝试插入字符串的不存在部分引起的。这会引发异常 https://msdn.microsoft.com/en-us/library/system.string.insert(v=vs.110).aspx.

作为解决方案,请确保索引位置存在,或者只是在末尾连接。就像这样,

$_.basename + 'loadtime' + (get-date -format hhMM) + $_.extension

奇怪的错误代码-196608实际上是表示为十进制(以 10 为基数)整数而不是十六进制值(以 16 为基数)表示的错误代码的结果。考虑一下:

[int]$i = -196608
$i.ToString('x')
fffd0000

这里发生的是,真正的错误代码是十六进制格式,0xFFFD0000。因为补码 https://en.wikipedia.org/wiki/Two%27s_complement,足够大的十六进制值实际上表示负十进制数。

至于这个特定的错误代码,它到处都会弹出,没有适当的文档。如果我大胆猜测的话,这与 Powershell 本身工作正常,但它被告知运行的脚本却不能正常工作有关。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当脚本结果正确时,Powershell 返回负退出代码 的相关文章

随机推荐