Powershell で .zip ファイルを解凍するリクエストを受け取りました。インターネットで、次のコードを複数回見つけました。
param( [String]$newlocation, [String]$filepath)
if(($newlocation -and $filepath) -and ((test-path $newlocation) -and (test-path $filepath)))
{
Copy-Item $filepath $newlocation
$shell_app=new-object -com shell.application
$filename = $filepath.split("\")[-1]
if(Test-Path "$newlocation\$filename")
{
$zip_file = $shell_app.namespace("$newlocation\$filename")
$destination = $shell_app.namespace($newlocation)
$destination.Copyhere($zip_file.items())
}
}
スクリプトに実装すると、少し変わりました。上記は変更後のバージョンです。今、私はエラーを持っています:
Exception calling "NameSpace" with "1" argument(s): "The system cannot find the file specified. (Exception from HRESULT
: 0x80070002)"
At Z:\MyScripts\deploy.ps1:34 char:34
+ $zip_file = $shell_app.namespace <<<< ("$newlocation\$filename")
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
そして、もう 1 つ、非常に明確です (最初のエラーが原因です)。
You cannot call a method on a null-valued expression.
At Z:\MyScripts\deploy.ps1:36 char:39
+ $destination.Copyhere($zip_file.items <<<< ())
+ CategoryInfo : InvalidOperation: (items:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
ファイルと宛先パスの両方が存在し、それらにアクセスする権利があります (両方を作成しました)。Windows XP で PowerShell 2.0 を実行しています
Major Minor Build Revision
----- ----- ----- --------
2 0 -1 -1
これは、コンソールで直接実行したときの Powershell からのダンプ全体です。
皆さんが私を助けてくれることを願っています。少なくとも、答えを見つけるためにどこに行けばよいか教えてください.
私はすでにzipファイルを手動で解凍しようとしましたが、うまくいきました。ファイルとファイルパスの両方にアクセスできました(両方を作成したため)。