Ошибка вызова метода при использовании PSCredential в Powershell - PullRequest
0 голосов
/ 10 июня 2019

Начну с того, что я успешно протестировал этот скрипт при локальном запуске на моем ноутбуке с удаленным сервером разработки.

Однако, когда я перенес сценарий на наш сервер TFS, я теперь вижу следующее (очищенное) сообщение об ошибке.

2019-06-10T18:46:05.8256626Z Generating script.
2019-06-10T18:46:05.8257313Z Formatted command: . 'E:\***.ps1' -username "***" -password "***" -servername "***" -ScriptPath "***" -SourcePath "***" -DestinationPath "***" -CleanupFlag "***"
2019-06-10T18:46:06.0290179Z ##[command]"C:\windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'E:\***.ps1'"
2019-06-10T18:46:06.7520864Z Method invocation failed because [System.Management.Automation.PSCredential] does not contain a method named 'new'.
2019-06-10T18:46:06.7521292Z At E:\***.ps1:5 char:1
2019-06-10T18:46:06.7521480Z + $CredentialSec = [System.Management.Automation.PSCredential]::new($username,$PWsec)
2019-06-10T18:46:06.7523016Z + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2019-06-10T18:46:06.7523588Z     + CategoryInfo          : InvalidOperation: (:) [], ParentContainsErrorRecordException
2019-06-10T18:46:06.7524614Z     + FullyQualifiedErrorId : MethodNotFound
2019-06-10T18:46:06.7525361Z  
2019-06-10T18:46:06.8602349Z ##[error]PowerShell exited with code '1'.

Сценарий пытается выполнить Invoke-Command (запустить другой сценарий) в удаленной системе. Похоже, что портится в разделе, где он создает учетные данные из имени пользователя и зашифрованного пароля.

Это код, который я пытаюсь выполнить:

param($username, $password, $servername, $ScriptPath, $SourcePath, $DestinationPath, $CleanupFlag)


$PWsec = ConvertTo-SecureString -String $password -AsPlainText -Force
$CredentialSec = [System.Management.Automation.PSCredential]::new($username,$PWsec)

Invoke-Command -ComputerName $servername -Credential $CredentialSec -FilePath $ScriptPath -ArgumentList $SourcePath, $DestinationPath, $CleanupFlag

1 Ответ

0 голосов
/ 10 июня 2019

Согласно предложению МакКлейтона в комментариях ... поскольку на новом сервере установлена ​​более старая версия Powershell, он работал, когда я изменил этот формат:

$CredentialSec = [System.Management.Automation.PSCredential]::new($username,$PWsec)

В этом формате:

$CredentialSec = New-Object System.Management.Automation.PSCredential($username,$PWsec)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...