Команда вызова Powershell с PSCredential Не удается обработать преобразование аргумента для параметра Credential

Я пытаюсь запустить вызов командной строки PowerShell с параметром PSCredential as.

Но вызов завершается с ошибкой:

Invoke-Command: невозможно обработать преобразование аргумента для параметра Credential. имя пользователя"

Вот подробный результат, который я получаю:

error 17-Jun-2015 14:33:53 Invoke-Command : Cannot process argument transformation on parameter 'Credential'. userName
error 17-Jun-2015 14:33:53 At C:\Windows\system32\config\systemprofile\AppData\Local\Temp\PRISMA-AMR-JOB1-68-ScriptBuildTask-7900604773745573277.ps1:31 char:71
error 17-Jun-2015 14:33:53 +     Invoke-Command "sqlcmd -E -S "$server" -Q `"$query`" " -Credential <<<<  
error 17-Jun-2015 14:33:53 ($credential)
error 17-Jun-2015 14:33:53     + CategoryInfo          : InvalidData: (:) [Invoke-Command], ParentContain 
error 17-Jun-2015 14:33:53    sErrorRecordException
error 17-Jun-2015 14:33:53     + FullyQualifiedErrorId : ParameterArgumentTransformationError,Microsoft.P 
error 17-Jun-2015 14:33:53    owerShell.Commands.InvokeCommandCommand

В основном я просто пытаюсь запустить sqlcmd с олицетворением через вызов Invoke-Command с PSCredential.

Есть идеи, что здесь происходит?

Изменить: вот код PowerShell:

function GetPSCredential($userId){
    $userIdFileNameWoExt = $userId.Replace("\",".")
    $password = (Get-Content "somefile.pwd" | ConvertTo-SecureString -Key (Get-Content "somefile.key"))
    $psCredential = New-Object `
        -TypeName System.Management.Automation.PSCredential `
        -ArgumentList "$userId", $password
    return $psCredential
}

function ImpersonateSql ($credential, $server, $query) {
    Invoke-Command "sqlcmd -E -S "$server" -Q `"$query`" " -Credential ($credential)
}

...

ImpersonateSql($defaultCredential, $serverInstance, "SOME SQL QUERY HERE")

person John-Philip    schedule 17.06.2015    source источник
comment
Можете ли вы вставить свой реальный код.   -  person Arun    schedule 17.06.2015


Ответы (1)


Вы ошиблись при вызове функции ImpersonateSql. Вы не должны использовать скобки или запятые для указания параметров при вызове функции (если вы намеренно не хотите передать часть выражения или массив в качестве аргумента), это не похоже на C # или функцию javascript, к которой вы привыкли. Взгляните на пример:

function func ($a, $b, $c) {
    "a: {0}, b: {1}, c: {2}" -f $a, $b, $c
}

PS C:\Windows\system32> func(5,6,7)
a: System.Object[], b: , c: 

PS C:\Windows\system32> func 5,6,7
a: System.Object[], b: , c: 

PS C:\Windows\system32> func 5 6 7
a: 5, b: 6, c: 7

В своем сценарии вы передаете функции только один аргумент - и это массив объектов, который, естественно, не будет использоваться в качестве параметра -Credential для командлета Invoke-Command. Итак, прежде всего вам нужно исправить свой скрипт следующим образом

ImpersonateSql $defaultCredential $serverInstance "SOME SQL QUERY HERE"

Я бы даже сказал, что вам лучше определить блок Param() внутри своей функции, это дает вам больше контроля над передачей аргументов функции.

person Varvara Kalinina    schedule 17.06.2015