在Azure运行簿中有以下代码:
$pathToDownloadedBlob = 'C:\depId-20150904032522\SevenZipSharp.dll'
if ((Test-Path $pathToDownloadedBlob) -eq $true)
{
try
{
Remove-Item -Path $pathToDownloadedBlob
}
catch
{
write-error "Could not delete $pathToDownloadedBlob. - $($error[0])"
exit
}
}当我使用Remove-Item时,我会得到以下错误:
4/7/2015 2:14:14 PM, Error: Remove-Item : The converted JSON string is in bad format.
At DavidTest:45 char:45
+
+ CategoryInfo : InvalidOperation: (System.Unauthor... Boolean force):ErrorRecord) [Remove-Item],
InvalidOperationException
+ FullyQualifiedErrorId : JsonStringInBadFormat,Microsoft.PowerShell.Commands.RemoveItemCommand当我使用[System.IO.File]::Delete($using:path)时,我会得到以下错误:
4/7/2015 2:22:48 PM, Error: Exception calling "Delete" with "1" argument(s): "Access to the path 'C:\Deployment\SevenZipSharp.dll' is denied."
At DavidTest:46 char:46
+
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : UnauthorizedAccessException我知道我没有权限删除这个文件。然而,为什么当我使用Remove-Item时它会抱怨JSON字符串
编辑:注意,这只发生在Azure自动化。但是,我无法在本地的Powershell ISE中复制这一点,因为我对希望删除的文件有权限。
更新:我刚刚意识到这只发生在.dll文件上。如果我试图删除一个.7z文件,它可以正常工作。
发布于 2015-04-07 04:46:36
我可以想象,这是由于在PowerShell工作流上下文和默认运行在单独进程中的InlineScript工作流活动之间传递的对象的序列化/反序列化。
您总是传入一个[System.String],还是有时传入一个[System.IO.FileInfo]对象?如果是后者,那么您可能希望引用FullName属性,而不是将对象本身传递给Remove-Item。
我不能百分之百肯定这就是你遇到的,但这是值得讨论的。
顺便说一句,作为一种最佳实践,总是明确地命名您的参数,以便其他人了解您正在做的事情。根据名称,对Remove-Item的调用不包括-Path参数,因为它的位置是0。当然,当你寻求帮助的时候,这并不是一件理所当然的事情。最好长篇大论。
希望这至少有一点帮助。顺便问一下,这个问题是独有的,还是也存在于本地执行的PowerShell工作流中?
编辑:在本地,这段代码似乎运行得很好。
workflow test {
$Path = 'C:\dsc\srv01.xml';
InlineScript { Remove-Item -Path $using:Path; };
}
testhttps://stackoverflow.com/questions/29483729
复制相似问题