【问题标题】:How to Invoke-Expression to call a function or script with variables?如何调用表达式来调用带有变量的函数或脚本?
【发布时间】:2017-08-21 18:22:38
【问题描述】:

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

$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"

我得到的错误:

压缩存档:路径“L:\Gopi_Prod_App”要么不存在,要么不是 有效的文件系统路径。 在 \\XXXXXXXXXXXX\L$\Gopi_Prod_App\ToZipNew.ps1:13 char:45 + ... t-ChildItem "$S" |压缩存档 -DestinationPath "$D" -Verbose + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (L:\Gopi_Prod_App:String) [Compress-Archive], InvalidOperationException + FullyQualifiedErrorId : ArchiveCmdletPathNotFound,Compress-Archive

【问题讨论】:

    标签: powershell powershell-remoting


    【解决方案1】:

    Invoke-Expressionalmost always the wrong tool,无论你手头有什么工作。此外,在我看来,您实际上想在 remote 主机上运行脚本。但是,您的 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'
    

    【讨论】:

      猜你喜欢
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      相关资源
      最近更新 更多