如何调用表达式来调用带有变量的函数或脚本?

How to Invoke-Expression to call a function or script with variables?

我收到此脚本的无效路径错误:

$buildZIP= 'starmatic'
echo $buildZIP
$command = ”\XXXXXXXXXX\L$\Gopi_Prod_App\ToZipNew.ps1 $buildZIP”
Invoke-Expression -Command $command

这是ToZipNew.ps1:

Param(
    [Parameter(Position=1, Mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [string]$build
)
echo "$build"
$S = "L:\Gopi_Prod_App$build\App_Data\*"
$D = "\Gopi_Prod_App\Starmatic_UI.zip"

echo $S
echo $D

Get-ChildItem "$S" | Compress-Archive -DestinationPath "$D" -Verbose
#Compress-Archive -Path "$S" -CompressionLevel Fastest -DestinationPath "$D"

我得到的错误:

Compress-Archive : The path 'L:\Gopi_Prod_App' either does not exist or is not a
valid file system path.  
At \XXXXXXXXXXX\L$\Gopi_Prod_App\ToZipNew.ps1:13 char:45 
+ ... t-ChildItem "$S" | Compress-Archive -DestinationPath "$D" -Verbose
+                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
    + CategoryInfo          : InvalidArgument: (L:\Gopi_Prod_App:String) [Compress-Archive], InvalidOperationException  
    + FullyQualifiedErrorId : ArchiveCmdletPathNotFound,Compress-Archive

Invoke-Expressionalmost always the wrong tool,无论您手头有什么工作。此外,在我看来,您实际上想要 运行 远程 主机上的脚本。但是,您的 Invoke-Expression 语句正在从远程共享读取脚本并在 本地 .

执行它

改变

$command = ”\XXXXXXXXXX\L$\Gopi_Prod_App\ToZipNew.ps1 $buildZIP”
Invoke-Expression -Command $command

进入

Invoke-Command -Computer 'XXXXXXXXXX' -ScriptBlock {
    & 'L:\Gopi_Prod_App\ToZipNew.ps1' $using:buildZIP
}

到运行 远程主机 XXXXXXXXXX 上的脚本。

如果您确实想要 运行 脚本本地连接共享 \XXXXXXXXXX\L$ 作为网络驱动器 L: 并从该驱动器调用脚本:

New-PSDrive -Name 'L' -PSProvider FileSystem -Root '\XXXXXXXXXX\L$' -Persist
& 'L:\Gopi_Prod_App\ToZipNew.ps1' $buildZIP
Remove-PSDrive -Name 'L'