Агент TFS не имеет разрешений в папке

У меня есть сценарий PowerShell, которому нужно получить доступ к папке и сделать что-то внутри нее (например, удалить или переименовать подпапку). Я думаю, что происходит сбой, потому что моему локальному агенту TFS отказано в доступе к этой папке на этом удаленном компьютере. Сообщение об ошибке:

2017-10-12T12:49:06.6816226Z ##[ошибка]Remove-Item : невозможно удалить элемент \[путь_к_папке_я_хочу_мой_скрипт_к_доступу]\old.1: доступ к пути

2017-10-12T12:49:06.6835446Z ##[ошибка]отказано.

Я погуглил проблему и нашел вероятное решение: предоставить разрешения на чтение/запись в папку, к которой обращается скрипт, для учетной записи службы сборки моей TFS (учетная запись Svc_tfsbuild). Но это не работает.

Так что, если у кого-то есть другое решение, было бы здорово. :D

Огромное спасибо заранее.

Хорошего дня!



person Illan RUL-DA CUNHA    schedule 12.10.2017    source источник
comment
Попробуйте запустить PowerShell от имени администратора, возможно, будет полезно опубликовать свой код. Мы можем заметить то, чего не видите вы.   -  person ShanayL    schedule 12.10.2017
comment
На самом деле код работал с другим агентом, агентом тестирования TFS, но не с тем, который мне нужен.   -  person Illan RUL-DA CUNHA    schedule 12.10.2017


Ответы (1)


Это проблема разрешения, убедитесь, что вы правильно установили разрешение, позволяющее учетной записи службы Build Agent получать доступ к папке.

Вы сказали, что «the code did work with another agent, a TFS test agent», поэтому вы можете сравнить учетную запись службы агента сборки с учетной записью службы агента тестирования, чтобы исправить настройки разрешений.

Другим обходным решением является запуск команды Remove-Item с определенными учетными данными, у которых есть достаточные права для удаления папки/файлов. Если учетная запись работает локально, то она будет работать и в процессе сборки. Я тестировал и работал на моей стороне.

Для этого вы можете использовать приведенный ниже пример скрипта:

Param(
  [string]$computerName = "vtinmo502vm",
  [string]$path ="C:\Software\test.txt"
)
$Username = "domain\user"
$Password = ConvertTo-SecureString "EnterPasswordHere" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($Username,$password) 
Invoke-Command -computername $computerName {Remove-Item -path $args[0] -Recurse} -cred $cred  -ArgumentList $path 
person Andy Li-MSFT    schedule 13.10.2017