如何调用表达式来调用带有变量的函数或脚本?
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-Expression
是 almost 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'
我收到此脚本的无效路径错误:
$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-Expression
是 almost 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'