无法对空值表达式调用方法-如何解决它



我编写了一个脚本,从特定文件夹中获取zip文件,并将文件解压缩到特定文件夹。

请检查以下代码

$shell_app=new-object -com shell.application
$zip_file = $shell_app.namespace("C:UsersjhnayakViews_Seagatejhnayak_DDTools_Phase14_Devappsddclibuildwin\..\..\..\..sas2_relmptlib2_relmptlib2_rel.zip")
$destination = $shell_app.namespace("C:UsersjhnayakViews_Seagatejhnayak_DDTools_Phase14_Devappsddclibuildwin\..\..\..\..sas2_relmptlib2_rel")
$destination.Copyhere($zip_file.items())
$shell_app=new-object -com shell.application
$zip_file = $shell_app.namespace((Get-Location).Path + "\..\..\..\..\sas2_relmptlib2_rel" + "$filename")
$destination = $shell_app.namespace((Get-Location).Path + "\..\..\..\..\sas2_relmptlib2_rel")
$destination.Copyhere($zip_file.items())

对于这两个代码,我得到了相同的错误,请检查下面的

You cannot call a method on a null-valued expression.
At line:1 char:38
+ $destination.Copyhere($zip_file.items <<<< ())
    + CategoryInfo          : InvalidOperation: (items:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

当我不使用\..\硬编码路径时介于两者之间,效果非常好。

请检查下面的代码

$shell_app=new-object -com shell.application
$zip_file = $shell_app.namespace("C:UsersjhnayakViews_Seagatejhnayak_DDTools_Phase14_Devsas2_relmptlib2_relmptlib2_rel.zip")
$destination = $shell_app.namespace("C:UsersjhnayakViews_Seagatejhnayak_DDTools_Phase14_Devsas2_relmptlib2_rel")
$destination.Copyhere($zip_file.items())

但我想使用前面的一个,这样路径就不应该是硬编码的,它应该适用于所有路径。

导致此错误的原因是什么?我的空值表达式到底是什么?

在将路径传递给$shell_app.namespace()之前,请尝试解析路径。.Net中有一个方便的方法可以做到这一点:System.IO.Path.GetFullPath()。像这样,

$relativeLoc = "...buildwin\..\..\..\..sas2..." # Complex dynamic path
$parsedLoc = [IO.Path]::GetFullPath($relativeLoc) # Get absolute path
$zip_file = $shell_app.namespace($parsedLoc)

作为奖励,您可以使用Test-Path来检查目标$parsedLoc是否存在。

最新更新