1

Azure Runbook に次のコードがあります。

$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

ファイルを削除する権限がないことはわかっています。しかし、使用時に JSON 文字列について不平を言うのはなぜRemove-Itemですか?

編集: これは Azure Automation でのみ発生することに注意してください。ただし、削除したいファイルへのアクセス許可があるため、これを Powershell ISE でローカルに複製することはできませんでした。


更新:これは .dll ファイルでのみ発生していることに気付きました。.7z ファイルを削除しようとすると、正常に動作します。

4

1 に答える 1

1

これは、PowerShell ワークフロー コンテキストと、既定で別のプロセスで実行される InlineScript ワークフロー アクティビティの間で渡されるオブジェクトのシリアル化/逆シリアル化が原因であると想像できます。

いつも を渡していますか[System.String]、それとも時々[System.IO.FileInfo]オブジェクトを渡していますか? 後者の場合はFullName、オブジェクト自体を に渡すのではなく、おそらくプロパティを参照する必要がありますRemove-Item

これがあなたが遭遇しているものであるかどうかは 100% 確信が持てませんが、議論する価値はあります。

ところで、ベスト プラクティスとして、他の人が何をしているのかを理解できるように、常に明示的にパラメーターに名前を付けてください。への呼び出しにRemove-Itemは、パラメーターが名前で含まれていません-Path。これは、位置が 0 であるためです。冗長である方がよい。

これが少なくとも少し役立つことを願っています。ところで、この問題は Azure Automation Runbook に固有のものですか、それともローカルで実行される PowerShell ワークフローにも存在するのでしょうか?

編集:このコードは、ローカルでうまく機能するようです。

workflow test {
    $Path = 'C:\dsc\srv01.xml';
    InlineScript { Remove-Item -Path $using:Path; };
}

test
于 2015-04-07T04:46:36.813 に答える