HiveBrain v1.2.0
Get Started
← Back to all entries
snippetpythonMinor

How to automate Powershell's interactive Get-Credential method?

Submitted by: @import:stackexchange-devops··
0
Viewed 0 times
interactivemethodcredentialpowershellautomategethow

Problem

I am trying to write a python script which automates the powershell's Get-Credential method. Here is something i wrote:

import subprocess
COMMAND_LINE = 'powershell'
powershell = subprocess.Popen(COMMAND_LINE, shell=True,
                                   stdin=subprocess.PIPE,
                                   stderr=subprocess.STDOUT,
                                   stdout=subprocess.PIPE)
output = powershell.stdout.readline()
print output.rstrip()
powershell.stdin.write('$cred = Get-Credential\n')
powershell.stdin.write('Administrator\n')
powershell.stdin.write('Password')
output = powershell.stdout.readline()
print output.rstrip()
out = powershell.communicate()[0]
print(out)


But i am unable to pass the password as above, i am getting following exception:

> PS /root> $cred = Get-Credential
> 
> Windows PowerShell credential request Enter your credentials. User:
> Administrator Password for user Administrator: PS /root>
> PasswordPassword : The term 'Password' is not recognized as the name
> of a cmdlet, function, script file, or operable program. Check the
> spelling of the name, or if a path was included, verify that the path
> is correct and try again. At line:1 char:1
> + Password
> + ~~~~~~~~
>     + CategoryInfo          : ObjectNotFound: (Password:String) [], CommandNot    FoundException
>     + FullyQualifiedErrorId : CommandNotFoundException


As i am new to python, Can anyone help me here?

Solution

Your python problem is the \n after the commands, write already append a newline, so your script does the following:

$cred = Get-Credential # Start the command
# This line is ignored as extraneous after Get-Credential, but you can see it in your output.
Administrator # Send proprely to the User: prompt
# Sent to the Password: prompt
Password # Send to the shell input, causing the error at end of your log.


Now that's a quite hard way to automate the credential object in powershell, usually the object is build by other way like described in this blog post (quoting here for completeness):

$password = "mypassword" | ConvertTo-SecureString -asPlainText -Force
$username = "nwtraders\administrator" 
$credential = New-ObjectSystem.Management.Automation.PSCredential($username,$password)


And used as such:

Get-WMIObject win32_logicaldisk -ComputerName Server1 -Credential $credential

Code Snippets

$cred = Get-Credential # Start the command
# This line is ignored as extraneous after Get-Credential, but you can see it in your output.
Administrator # Send proprely to the User: prompt
# Sent to the Password: prompt
Password # Send to the shell input, causing the error at end of your log.
$password = "mypassword" | ConvertTo-SecureString -asPlainText -Force
$username = "nwtraders\administrator" 
$credential = New-ObjectSystem.Management.Automation.PSCredential($username,$password)
Get-WMIObject win32_logicaldisk -ComputerName Server1 -Credential $credential

Context

StackExchange DevOps Q#1575, answer score: 5

Revisions (0)

No revisions yet.