私はこれに頭をぶつけるのにかなりの時間を費やしました。ちょっとした 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 への完全なアクセス許可を付与します。問題が解決しない。