2

私はこれに頭をぶつけるのにかなりの時間を費やしました。ちょっとした StackOverflow のヘルプをお願いします。

シナリオ: TeamCity Powershell ステップを介して、CI サーバーにあるカスタム .bat ファイルを実行しようとしています。

  • PowerShell スクリプトをローカル ボックスで手動で実行すると、.bat ファイルが正しく開始されます。
  • Powershell スクリプトが TeamCity を介して実行されると、.bat ファイルが正常に「認識」されます (予想される .bat ファイルの名前を変更すると、「ファイルが見つかりません」という応答を受信することによって検証されます)。
  • ただし、.bat ファイルが実際に開始されたという兆候は確認されていません。

私たちが試したこと:

  • 診断を試みるために「RedirectStandardOutput」と「RedirectStandardError」を追加しましたが、ログ ファイルは作成されますが、空白が返されます。
  • ファイルパスのアクセス許可を付与し、TC ビルド エージェントの資格情報を含む 2 つの異なる資格情報を試しました。
  • PS に .bat ファイルを待機するように「指示」する必要があるかどうかを確認するために、ある時点で「-wait」を追加しました。

2つの質問...

  • この .bat ファイルの実行を妨げているのは何ですか?
  • このような問題をどのように診断しますか? ATM は私たちにとって「ブラックボックス」です。

TeamCity Powershell 設定:

  • Powershell 実行モード: バージョン 1.0; ビットネス x64 (x86 も試しました)
  • 作業ディレクトリ: 空白、および .bat ファイルの特定のファイルパスとして試行されました (したがって、「D:\folder\folder2\」)
  • スクリプト: ソースコード
  • スクリプトの実行: 外部ファイルから .ps1 を実行 (「"-Command -" 引数を使用してスクリプトを PowerShell stdin に入れる」でも試しました)
  • -NoProfile 引数を追加 (両方を試しました)

Powershell スクリプト:

#Predefine necessary information
$Username = "DOMAIN\username"
$Password = "password"
$ComputerName = "CI Build Server Name"

#Create credential object
$SecurePassWord = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $Username, $SecurePassWord

#Start batch file
Start-Process "testbat.bat" -WorkingDirectory D:\file\path\ -Credential ($Cred)-NoNewWindow -RedirectStandardError stderr.txt -RedirectStandardOutput stdout.txt

Write-Host "Executed powershell."

更新 1 :「-Credential ($Cred)」部分を削除すると、予想どおり、TeamCity から testbat.bat ファイルを開始できます。問題は、どういうわけか、その「-Credential ($Cred)」引数にあるに違いありません。何かご意見は?

更新 2 :「-Credential ($Cred)」部分をビルド エージェント ユーザーの資格情報に設定すると、TeamCity から test.bat ファイルを開始できます。この問題は、ビルド エージェントを実行しているユーザー以外のユーザーに資格情報を設定した場合にのみ発生します。これは、資格情報の構文が適切であることを示しているようです。

更新 3 : PowerShell 実行ポリシーを「RemoteSigned」および「Unrestricted」に設定して実行してみました。問題が解決しない。

更新 4 : BuildAgent ユーザーと、これを実行するユーザーに、「Set-PSSessionConfiguration」を介して powershell への完全なアクセス許可を付与します。問題が解決しない。

4

2 に答える 2

0

エージェントがローカル システム アカウントでサービスとして実行されている場合、指定されたアカウントで PowerShell を実行することはできません。回避策は次のとおりです。

  1. コマンドラインからエージェントを実行します。
  2. 管理者権限を持つ別のアカウント (ローカル システムではない) でエージェント サービスを実行してみてください。おそらく役に立ちます。
  3. RunAs プラグインを試してください。指定したユーザー アカウントでビルドを実行する機能を提供します。
于 2016-03-22T11:51:54.143 に答える