Задача TFS Release Powershell для развертывания в Sharepoint: "Невозможно связать аргумент с параметром" String ", потому что он равен нулю".

77
9

Редактировать:

Мне удалось заставить его принять 1 параметр. По-видимому, он ненавидит принятие 2. Теперь у меня есть еще одно исключение: удаленный сервер возвращает 401 неавторизованных. Я думаю, решение для этого состоит в том, чтобы не использовать более одного параметра, но это не совсем решение. Звучит как ошибка.

Оригинальный вопрос:

Я нахожусь на своем конце.

У меня есть сценарий powershell, который я хотел бы выполнить во время выпуска, который загружает архивированную копию сборки в библиотеку документов в SharePoint. Сервер сборки, на котором размещен TFS 2017, запускает Powershell 4. Когда я RDP запускаю и запускаю сценарий ниже в ISE на том же сервере (именно там, где TFS, похоже, выполняет задачи в задачах), он работает, при условии, что я добавляю среду где они прокомментированы в приведенном ниже скрипте.

Когда я запускаю тот же самый точный скрипт (я запускаю его из папки с переходом) через TFS, он выдает ошибку:

2017-10-17T13:48:52.5561597Z D:\BuildAgentWorkFolder\f00869677\Git\drop\publish_to_sharepoint.ps1 D:\Integration_20171017.2.zip Integration_20171017.2
2017-10-17T13:48:53.0241597Z Connecting to http://sharepoint_server/sites/TFS_DefaultCollection/NET as srv_promote...
2017-10-17T13:48:53.2737597Z ##[error]D:\BuildAgentWorkFolder\f00869677\Git\drop\publish_to_sharepoin
2017-10-17T13:48:53.2737597Z ##[error]t.ps1 : Cannot bind argument to parameter 'String' because it is null.

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

Я попытался указать тип в разделе param, например [string]$filePathToUpload. Я попытался указать параметры в списке аргументов командной строки, например .\publish_to_sharepoint.ps1 -filePathToUpload "..." -fileName "...", как с кавычками, так и без них.

Стоит отметить, что когда я пытаюсь запустить задачу с помощью командной строки script-- из-за лимита символов, я могу вставить только первый "Write-Host" line--, который передает шаг параметра без ошибок и релиз проходит.

Это ошибка с задачей TFS Powershell? Я не могу обернуть голову вокруг этой ошибки.

Заранее спасибо. Ниже приведены соответствующие сведения.

Скрипт Powershell:

param(
$filePathToUpload,
$fileName
)

#$Env:SharePointDomain = "..."
#$Env:SharePointBaseUrl = "http://sharepoint_server"
#$Env:SharePointSite = "/sites/TFS_DefaultCollection/NET/"
#$Env:SharePointUsername = "username"
#$Env:SharePointPassword = "password"
#$Env:SharePointLibrary = "library_name"

Add-Type -AssemblyName "Microsoft.SharePoint.Client, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL"
Add-Type -AssemblyName "Microsoft.SharePoint.Client.Runtime, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL"

Write-Host 'Connecting to'$Env:SharePointBaseUrl$Env:SharePointSite' as '$Env:SharePointUsername'...'

try{
$sharepointFullUrl = $Env:SharePointBaseUrl + $Env:SharePointSite

$clientContext = New-Object Microsoft.SharePoint.Client.ClientContext $sharepointFullUrl
$clientContext.Credentials = New-Object System.Net.NetworkCredential $Env:SharePointUsername, (ConvertTo-SecureString $Env:SharePointPassword -AsPlainText -Force)
$web = $clientContext.Web
$clientContext.Load($web)
$clientContext.ExecuteQuery();

$relDestFilePath = $Env:SharePointSite + $Env:SharePointLibrary + "/" + $fileName

$fStream = New-Object IO.FileStream $filePathToUpload ,'Open','Read','Read'
[Microsoft.SharePoint.Client.File]::SaveBinaryDirect($clientContext, $relDestFilePath, $fStream, $true)

Write-Host 'Successfully uploaded'$fileName' to SharePoint document library '$Env:SharePointLibrary'.'
}
catch {
Write-Error $_
}

Сведения о выпуске Release:

enter image description here

Переменные среды замены:

enter image description here

Журнал задач Powershell

2017-10-17T13:48:52.5405597Z . 'D:\BuildAgentWorkFolder\f00869677\Git\drop\publish_to_sharepoint.ps1' D:\Integration_20171017.2.zip Integration_20171017.2
2017-10-17T13:48:52.5561597Z C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command "$env:PSModulePath= $env:PSModulePath + ';' + $([system.io.path]::combine($env:AGENT_HOMEDIRECTORY, 'agent\worker\modules')); try { [System.Security.Cryptography.ProtectedData] | Out-Null } catch { Write-Verbose 'Adding assemly: System.Security' ; Add-Type -AssemblyName 'System.Security' ; [System.Security.Cryptography.ProtectedData] | Out-Null } ; Invoke-Expression -Command ([System.Text.Encoding]::UTF8.GetString([System.Security.Cryptography.ProtectedData]::Unprotect([System.Convert]::FromBase64String('AQAAANCMnd8BFdERjHoAwE/Cl+sAmMDwyguygfTgNLUK3BteusFUlUwAAAAACAAAAAAADZgAAwAAAABAAAACMb/7FzkttmPEf8rMCA10mAAAAAASAAACgAAAAEAAAAN7Pqk+I01BNW4lONiyiuhArrpBqYAAiGrvCfLy/fPm3YiAEuhiuhKwcUEIZFza2IcrqjhKCe4Qn8qRcPMfDEiw82ZUKdNYCrzUjayfThC97Vm3/lNgP15sgTr0NpJwsfvs7fz6zG3zwqwNeu4ivYzcYI/bYd+y608v+jh3d+8vzeQgyIGhto+9WcJlIaCnYv5qymVD7nTME8pnYz+DfNkP02s50jkCySimKgVHGIUAAAAkXCoQxu5+9njKHMCkhB2FSpdivg='), [System.Convert]::FromBase64String('McDlBBSayxJHIwJ35ERNNQ=='), [System.Security.Cryptography.DataProtectionScope]::CurrentUser))) ; if (!(Test-Path -LiteralPath variable:\LastExitCode)) { Write-Verbose 'Last exit code is not set.' } else { Write-Verbose ('$LastExitCode: {0}' -f $LastExitCode) ; exit $LastExitCode }"
2017-10-17T13:48:52.5561597Z Executing the following powershell script. (workingFolder = D:\BuildAgentWorkFolder\f00869677)
2017-10-17T13:48:52.5561597Z D:\BuildAgentWorkFolder\f00869677\Git\drop\publish_to_sharepoint.ps1 D:\Integration_20171017.2.zip Integration_20171017.2
2017-10-17T13:48:53.0241597Z Connecting to http://sharepoint_server/sites/TFS_DefaultCollection/NET as srv_promote...
2017-10-17T13:48:53.2737597Z ##[error]D:\BuildAgentWorkFolder\f00869677\Git\drop\publish_to_sharepoin
2017-10-17T13:48:53.2737597Z ##[error]t.ps1 : Cannot bind argument to parameter 'String' because it is null.
2017-10-17T13:48:53.2737597Z ##[error]At line:1 char:1
2017-10-17T13:48:53.2737597Z ##[error]+ .
2017-10-17T13:48:53.2737597Z ##[error]'D:\BuildAgentWorkFolder\f00869677\Git\drop\publish_to_sharepo
2017-10-17T13:48:53.2737597Z ##[error]...
2017-10-17T13:48:53.2737597Z ##[error]+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2017-10-17T13:48:53.2737597Z ##[error]~~~
2017-10-17T13:48:53.2737597Z ##[error] + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorExcep
2017-10-17T13:48:53.2737597Z ##[error] tion
2017-10-17T13:48:53.2737597Z ##[error] + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorExceptio
2017-10-17T13:48:53.2737597Z ##[error] n,publish_to_sharepoint.ps1
2017-10-17T13:48:53.2737597Z ##[error]
2017-10-17T13:48:53.2737597Z ##[error]Process completed with exit code 0 and had 1 error(s) written to the error stream.

спросил(а) 2021-01-27T18:12:03+03:00 4 месяца, 3 недели назад
1
Решение
90

Это проблема: $Env:SharePointPassword. Секреты не сохраняются как переменные среды. Измените свой сценарий и введите пароль в качестве параметра.

ответил(а) 2021-01-27T18:12:03+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема