2015-07-06 12 views
2

Я хочу, чтобы иметь возможность входа в VIServers с помощью PowerShell и попросить учетные данные при первом запуске скрипта, а затем сохранить эти учетные данные в файле password.txt и заставить VIServer использовать этот файл password.txt, хранящийся локально на компьютере пользователя, если пользователь снова запускает сценарий. Больной момент заключается в том, что подсказка учетных данных продолжает появляться снова и снова, когда пользователь хочет запустить скрипт несколько раз.Для VIServer и PowerCLI, как запрашивать учетные данные только в первый раз в PowerShell, затем хранить учетные данные и использовать их для запуска следующего сценария?

Я могу использовать следующий код из другого ответа размещен здесь на Stackoverflow (Ссылка: http://www.adminarsenal.com/admin-arsenal-blog/secure-password-with-powershell-encrypting-credentials-part-1)

и она работает:

Read-Host "Enter Password" -AsSecureString | ConvertFrom-SecureString | 
       Out-File "G:\dev\Password.txt" 

    $pass = Get-Content "G:\dev\Password.txt" | ConvertTo-SecureString 

    $User = "MyUserName" 
    $File = "G:\dev\Password.txt" 
    $MyCredential = New-Object -TypeName System.Management.Automation.PSCredential 
        -ArgumentList $User, (Get-Content $File | ConvertTo-SecureString) 

я нашел следующее из VMWare блога (ссылка: http://blogs.vmware.com/PowerCLI/2011/11/have-you-seen-powerclis-credential-store-feature.html)

А вот код из VMWare блога (с некоторыми пояснениями):

Для использования учетных данных магазин, я следующее:

New-VICredentialStoreItem -Host 192.168.10.10 -User "Andrey" -Password "my favorite password" 

Теперь я могу ввести только:

Connect-VIServer 192.168.10.10 

Когда я не указываю пользователя и/или пароль, Connect-VIServer проверяет удостоверении магазин, находит мой вновь хранит учетные данные и использует его.

По умолчанию файл хранилища учетных данных хранится в каталоге профиля пользователя. Он зашифрован. Если вам интересно, проверьте «help» VICredentialStoreItem ».

-Andrey Анастасов, PowerCLI архитектор

============= И ТЕПЕРЬ МОЯ ОБНОВЛЕНО версия кода VIServer ========== $ Hostname = 192.168.10.10

New-VICredentialStoreItem -Host $Hostname -User $User -Password $pass 

Есть ли я на правильном пути?

Что нужно сделать, чтобы ввести учетные данные только 1 раз, а затем просто вызвать вызов сценария $ creds вместо того, чтобы вводить учетные данные каждый раз?

+0

Вы можете решить, чтобы проверить, есть ли результат в 'Get-VICredentialStoreItem' с вашим именем пользователя, если нет ни одного, получить учетные данные из' Read-Host' и сохранить там, иначе пропустите. ("Get-VICredentialStoreItem" должен быть там, в связи с Powershell именования для функций управления типа) – Vesper

ответ

0

Простейший подход, который я могу видеть, основываясь на том, что вы предоставили, заключается в том, чтобы обернуть эту команду в другой скрипт. Тот, который проверяет хранилище учетных данных, и THEN запрашивает ваши кредиты, если запись, которую вы ищете, не существует.

Можете ли вы дать мне информацию о том, как выглядит ваш рабочий процесс?

+0

Sure: 1) Open Script в PS ISE 2) Перейдите к каталогу, в котором скрипт находится 3) Выполнить скрипт в ISE 4) Я получаю приглашение для ввода учетных данных -> Я введите имя пользователя и пароль (Password скрыт) 5) скрипт переходит в VIServer, извлекает имена всех виртуальных машин внутри указанного VIServer в сценарии 6) На данный момент цель состоит в том, чтобы этот сценарий работал ежедневно и сравнивал список VM с другим списком, сгенерированным внутри (для работы). 7) Автоматизация была бы идеальной, пока она запускается вручную - все еще находится на этапе тестирования Благодарим за помощь! – user4833159

1

Сначала Сохранить учетные данные на диск, например:

$credential = Get-Credential 
$credential.Password | ConvertFrom-SecureString | Set-Content c:\temp\Cred.txt 

Затем загрузите его с диска и создать $ Credential переменную так:

$username = "Domain\UserName" 
$encrypted = Get-Content C:\Temp\Cred.txt | ConvertTo-SecureString 
$credential = New-Object System.Management.Automation.PsCredential($username, $encrypted) 

Тогда Вы можете использовать функцию, которая получить $ удостоверение ввода:

function Connect-vCenter 
{ 
    Param (

    [Parameter(Mandatory = $True)] 
    $vCenterServer, 
    [System.Management.Automation.PSCredential]$Credential 
    ) 

    if ($Credential) 
    { 
     Add-PSSnapin VMware.VimAutomation.Core 
     Connect-VIServer $vCenterServer -Credential $Credential 
    } 
    else 
    { 
     Add-PSSnapin VMware.VimAutomation.Core 
     Connect-VIServer $vCenterServer 
    } 

} 

Чтобы запустить его:

Connect-vCenter -vCenterServer vCenter -Credential $Credential 

конечно, только пользователь, который шифрует учетные данные можно использовать, если вы хотите, однако, чтобы зашифровать его с разные ключи (менее безопасно), вы можете добавить параметр -key так:

$Key = [Byte]1..16 
$credential.Password | ConvertFrom-SecureString -Key $Key | Set-Content c:\temp\Cred.txt 

Для Decrpyt:

$encrypted = Get-Content C:\Temp\Cred.txt | ConvertTo-SecureString -Key $Key 
$credential = New-Object System.Management.Automation.PsCredential($username, $encrypted)