2017-01-10 4 views
2

Как вернуть объект SecureString из функции обратно в переменную?Как вернуть объект SecureString из функции

function ReadSecuredFile 
{ 
    [SecureString] $SecuredString; 

    $SecuredString = ConvertTo-SecureString 'Testing123' -asplaintext -force; 

    return $SecuredString; 
} 

$a = ReadSecuredFile; 

$ в не получает $ SecuredString в заявлении возврата $ SecuredString; в функции ReadSecuredFile. Он возвращается как объект System.Object в VS и System.Array в PowerGUI.

+4

Опубликовать краткий пример функции, которая содержит только минимальный объем кода, необходимого для воспроизведения проблемы. –

+0

OK @Bill_Stewart Я создал функцию примера костей медведя. Если вы в состоянии помочь, это будет здорово. –

+0

Первая строка кода в вашей функции является излишней и фактически возвращает нулевой объект. –

ответ

2

Выражение [SecureString] $SecuredString; приводит к $null возвращается до SecureString объекта. Удалить это заявление

function ReadSecuredFile 
{ 
    $SecuredString = ConvertTo-SecureString 'Testing123' -asplaintext -force; 

    return $SecuredString; 
} 

Или проще:

function ReadSecuredFile 
{ 
    return ConvertTo-SecureString Testing123 -AsPlainText -Force 
} 
+1

Операция 'return' не нужна, хотя для нее это не повредит. –

+0

@ mathias-r-jessen. Большое спасибо. Прекрасно работает. Я все еще не понимаю, почему он возвращает нуль вместо того типа, который вы объявили, и последнего значения, которое вы установили? В большей функции я возвращаю его переменной, поскольку иногда мне не важно значение и возвращаю true или false. –

+0

@CostaZachariou Это актерский состав, а не декларация - у powershell нет понятия объявлений переменных, таких как C#, например –

-1

Voila.

# Encrypt. 
[SecureString] $Local:objPassword = Read-Host -Prompt 'Enter Password' -AsSecureString; 

# Decrypt. 
$strPassword = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($objPassword)); 
Write-Host -Object ('Decrypted password is "{0}"...' -f $strPassword); 
+0

Благодарим вас за ответ @ Simon-Catlin, но хотели бы вернуть объект [SecureString] из функции в переменную объекта [SecureString]. –

+0

Ах, неправильно прочитал; «назад» бросил меня. –

+0

Не проблема. :-) –

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