从函数返回[System.Management.Automation.PSCredential]

时间:2016-12-08 17:43:00

标签: powershell credentials

这个问题有点被问到here,但是@Andy Arismendi提到的"逗号技巧"对我来说并不起作用。

简而言之,我有一个函数可以读取包含安全字符串的文本文件:

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

更新

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 个答案:

答案 0 :(得分:2)

这是您对$oCred.GetType()的调用,这是第一个被返回的对象。凭证是第二个。暂停$oCred.GetType(),因为这是不必要的。如果您需要该信息,请在详细信息流中发送:

$oCred.GetType() | Write-Verbose

# or

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