2015-03-23 4 views
1

Как я могу вызвать один скрипт из другого скрипта и передать PSCredential в качестве параметра?Передача PSCredential в качестве параметра для скрипта

код у меня есть это преобразование PSCredential в строку с System.Management.Automation.PSCredential как строковое значение, так это не работает:

Ошибка:

Cannot process argument transformation on parameter 'cred'. Cannot convert the 
"System.Management.Automation.PSCredential" value of type "System.String" to type "System.Management.Automation.PSCredential". 

Код:

function getCurrentSequenceNumber([System.Management.Automation.PSCredential]$cred) 
{ 
    $scriptPath = 'D:\Ave\A\Scripts\UploadPasswordToStorageTable\ReadTableEntity\Read-TableEntity.ps1' 
    $argumentList = "-SubscriptionName $SubscriptionName -StorageAccountName $StorageAccountName -TableName $TableName -partitionKey $partitionKey -rowKey $rowKey -Key $Key -CredentialName $CredentialName -cred $cred" 
    $currentSequenceNumber = Invoke-Expression "$scriptPath $argumentList" 
    return $currentSequenceNumber 
} 

$cred = Get-Credential 
$currentSequenceNumber = getCurrentSequenceNumber $cred 

ответ

2

Это сработало:

& D:\Ave\A\Scripts\UploadPasswordToStorageTable\ReadTableEntity\Read-TableEntity.ps1 -SubscriptionName $SubscriptionName -StorageAccountName $StorageAccountName -TableName $TableName -partitionKey $partitionKey -rowKey $rowKey -Key $Key -CredentialName $CredentialName -cred $cred 

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

0

Invoke-Expression берет строку и запускает ее как скриптовый блок, поэтому вы фактически превращаете объект PSCredential в строку и вызываете его как объект PSCredential.

Вы пытались использовать &?

function getCurrentSequenceNumber([System.Management.Automation.PSCredential]$cred) 
{ 
$scriptPath = 'D:\Ave\A\Scripts\UploadPasswordToStorageTable\ReadTableEntity\Read-TableEntity.ps1' 
$argumentList = "-SubscriptionName $SubscriptionName -StorageAccountName $StorageAccountName -TableName $TableName -partitionKey $partitionKey -rowKey $rowKey -Key $Key -CredentialName $CredentialName -cred $cred" 
$currentSequenceNumber = & $scriptPath $argumentList 
return $currentSequenceNumber 
} 

$cred = Get-Credential 

$currentSequenceNumber = getCurrentSequenceNumber $cred 
+0

Я думаю, потому что вы кладете $ cred внутри кавычек, он все равно превращает его в строку. –

+0

И это дало мне эту ошибку: &: Термин D: \ Ave \ A \ Scripts \ UploadPasswordToStorageTable \ ReadTableEntity \ Read-TableEntity.ps1 -SubscriptionName $ SubscriptionName -StorageAccountName $ StorageAccountName -TableName $ TableName -partitionKey $ partitionKey -rowKey $ rowKey -Key $ Key -CredentialName $ CredentialName -cred $ cred '- не распознается как имя командлета, функции, файла сценария или исполняемой программы. Проверьте правильность написания имени или, если включен путь, проверьте правильность пути и повторите попытку. –

Смежные вопросы