2

はじめに

そのため、ディレクトリから zip ファイルを読み込んで、それを tmp の場所に解凍しようとしています。問題は、powershell が引用符を誤って解釈し、$copyLocation 変数の値を書き出していないように見えることです。代わりに、ファイルを [currentDirectory]\$copyLocation にコピーしています。皆さんが助けてくれることを願っています。私は Powershell を初めて使用します。これは、ビルドの自動化を引き継ぐために作成する必要があるスクリプトの一部にすぎません。前もって感謝します。

ところで、hosts は反復処理中の XmlElement です。そのため、この zip ファイルを、xml 構成ファイルで指定された多数のホスト上の場所にデプロイしています。

function copyWebappToDestination($copyWebappFrom,$to,$hosts){
foreach( $it in $hosts ){
    Write-Host "Deploying webapp" $webapps.webappName "to" $it.hostIp "at" $it.to

    setUpDirectories

    foreach($file in $filelocation){
        if($file.name.ToString() -eq "Web.Main.zip"){
            $filename = $file.name.ToString()
            $hostIp = $it.hostIp
            $fileDest = $file.FullName
            #unzip the files
            & '7z' x ""$fileDest"" -o""$copyLocation"" -y -r
            break
        }
    }
}

編集

最も奇妙な部分は、コマンドを書き出したことです

& '7z' x "C:\MoveToProduction\SM\PROD\Web.Main.zip" -o"C:\MoveToProduction\SM\PROD\tmp" -y -r"

それを Powershell コンソールから実行したところ、問題なく動作しました。スクリプトのコンテキスト内からは機能しません。

最終編集

そのため、呼び出し演算子を機能させることをあきらめました。基本的に、私が落ち着いたのは次のコマンドでした:

Invoke-Expression -command  "cmd /C '7z x `"$fileDest`" -o`"$copyLocation`" -y -r'"
4

3 に答える 3

1

-o を引用符で囲む

$tz = "c:\program files\7-zip\7z.exe"
set-alias sz $tz
$source="c:\users\user\test\*.tar
$dest="c:\users\user\test2be"

sz x "$source" "-o$dest" -y
于 2014-01-29T20:51:20.943 に答える
1

そのため、呼び出し演算子を機能させることをあきらめました。基本的に、私が落ち着いたのは次のコマンドでした:

Invoke-Expression -command  "cmd /C '7z x `"$fileDest`" -o`"$copyLocation`" -y -r'"
于 2013-05-10T19:34:15.717 に答える
0

コメントの後に編集:

もう 1 つ試す必要があるのは、1 組の二重引用符を使用してすべての 7z 引数をラップすることです。

最初の答え

$($copylocation.FullName) を使用して、宛先ディレクトリのフルパスを取得してみてください

DirectoryInfo である $copylocation を使用すると、Powershell はオブジェクトの ToString メソッドを使用して、フル パスではなくディレクトリ名のみを指定します。

于 2013-05-10T16:44:03.490 に答える