5

行を含む .ps1 スクリプトがあります

Invoke-Expression -Command "C:\Builds\$BuildName /s /v`"/l*v c:\build_install.txt /qn`""<br/>

これは、製品のサイレント インストールを実行しています。

ここで、ssh を介して Linux ボックスからこのコマンドを実行しようとすると、次のエラーが発生します。

Invoke-Expression : A positional parameter cannot be found that accepts argument '/s'.
At line:1 char:1
+ Invoke-Expression C:\NWTBuilds\Setup-NimbleNWT-x64.2.0.4.117.exe /s /v`/l*v c:\n ...
+ CategoryInfo          : InvalidArgument: (:) [Invoke-Expression], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeExpressionCommand

これについて何か提案はありますか?資格情報を提供する必要がありますか?

そのため、次のオプションも試しました。

  1. ssh または telnet 経由でコマンドを送信しますpowershell.exe -Command ...
  2. ssh または telnet から powershell スクリプトを呼び出すpowershell.exe -File C:\Sample.ps1

ただしSample.ps1、Windows Powershell から同じものを実行した場合、サイレント インストールは行われますか?

4

2 に答える 2

1

エラー メッセージは、PowerShell が-Commandに指定された引数の一部としてではなく、 Invoke-Expression/sのパラメーターの名前として解析しようとしていることを示しています。これは、文字列がその直前で終了していることを意味します。$BuildNameの値を確認してください。文字列を終了する何かが含まれている可能性があります。変数値内の二重引用符のペアはその効果を持たないはずなので、それが何であるかはよくわかりません。少なくとも、PowerShell プロンプトではそうではありません。たぶん、ssh クライアントは、文字列を前に終了する何らかの方法で入力しているものを解釈していますか?/s/s

いずれにせよ、私は答えが$BuildNameの値にあることに賭けても構わないと思います。論理的には、エラーは-Commandへの文字列引数がその時点で終了することを示しているからです。

于 2013-09-06T21:59:03.680 に答える