2016-12-08 3 views
0

Этот вопрос задан here, но «comma trick», упомянутый @Andy Arismendi, не работает для меня.Возврат [System.Management.Automation.PSCredential] из функции

Короче у меня есть функция, которая считывает текстовый файл, содержащий защищенную строку:

function Get-StoredCredential 
{ 
    param([string]$username) 
    <snip>..</snip> 
    $Password = $credFile | ConvertTo-SecureString -Key $key 
    $oCred = New-Object -TypeName System.Management.Automation.PSCredential($UserName, $Password) 

    $oCred.GetType() 
    $oCred  
} 

Внутри функции $ oCred.GetType() возвращает:

IsPublic IsSerial Name          BaseType                                                
-------- -------- ----          --------                                                
True  True  PSCredential        System.Object  

Однако, вне функция вызова его следующим образом:

$a = Get-StoredCredential -UserName "john" -Verbose 
$a.gettype() 

Возвращает тип объекта:

IsPublic IsSerial Name          BaseType                                                
-------- -------- ----          --------                                                
True  True  Object[]         System.Array 

В функции, где я хочу, чтобы использовать объект учетного данных, нужно вызвать .GetNetworkCredential(). Пароль зачищенный из объекта из-за этого очевидного изменение типа.

Любые предложения?

TIA.

P.S. PowerShell 5.0

Update

PS C:\> $a.Length 
2 

PS C:\> $a[0] 

MYDOMAIN\john 

PS C:\> $a[1] 

UserName       Password 
--------       -------- 
MYDOMAIN\john System.Security.SecureString 

PS C:\> $a[2] 
PS C:\> 
+1

Что такое '$ a.Length' после запуска функции? IMHO, проблема в ' ..' часть вашего кода. – PetSerAl

+0

$ a.Length возвращается 2. .. просто показывает, что в функции больше вещей. Не имеет отношения к вопросу. – woter324

+0

Если '$ a.Length' возвращает 2, значит, ваша функция возвращает 2 элемента. Объект 'PSCredential' будет последним:' $ a [1] ', но' $ a [0] ', скорее всего, возвращен * нерелевантным * кодом. – PetSerAl

ответ

2

Это ваш призыв к $oCred.GetType() который является первым объектом возвращается. Учетные данные являются вторыми. Просто прекратите делать $oCred.GetType(), потому что это не нужно. Если вы хотите получить информацию, отправьте ее в подробный поток:

$oCred.GetType() | Write-Verbose 

# or 

$oCred.GetType() | Out-String | Write-Verbose 
+0

... да, точно, как я упомянул в своем комментарии. :) –

+0

@Bill_Stewart да, мы отправили их прямо в одно и то же время – briantist

+0

@PetSerAl, вы были правы, это была ошибка в нерелевантном коде. Неодобренная переменная. Спасибо и извините за то, что ... – woter324