powershell无法绑定参数' NewPassword'

时间:2017-09-20 21:55:02

标签: python powershell powershell-v3.0

我正在尝试使用Python中的PowerShell命令编写一个更改用户Windows密码的程序。

我试过了。

import subprocess

password = input('Enter New Password: ')

c1 = "C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe"
c2 = "Set-ADAccountPassword john -NewPassword " + password + " –Reset".format(password)

c = subprocess.call([c1, c2])

print (c)

但它给出了错误

Set-ADAccountPassword : Cannot bind parameter 'NewPassword'.  Cannot convert the "mynewpass1" value of type "System.String" to type "System.Security.SecureString".

我在https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/convertto-securestring?view=powershell-5.1上读到你已经使用这样的命令将普通字符串转换为安全字符串。

PS C:\> $Secure_String_Pwd = ConvertTo-SecureString "P@ssW0rD!" -AsPlainText -Force

我尝试重写我的程序但是语法错误无效。甚至可以这样做吗? 以下是我现在正在使用的内容。

import subprocess

password = input('Enter New Password: ')


a1, a2 = "C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe", "$PwdVar = ConvertTo-SecureString "{0}" -AsPlainText -Force; Set-ADAccountPassword jm09580 -NewPassword $PwdVar –Reset"
c = subprocess.call([a1, a2.format(password)])

print (c)

1 个答案:

答案 0 :(得分:0)

您遇到的问题是您的报价未正确转义。您需要在命令行参数的正确位置使用引号,然后在变量中使用引号。它变得非常混乱。

PowerShell有一个功能可以帮助解决这个问题,您可以将脚本作为Base64编码的字符串传递给它。它不包含任何特殊字符可以逃脱。

我接下来没有Python技能,我还没有测试过这个例子,它只是为了帮助你走上正轨:

import base64
a1, a2 = "C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe", "$PwdVar = ConvertTo-SecureString "{0}" -AsPlainText -Force; Set-ADAccountPassword jm09580 -NewPassword $PwdVar –Reset"
data = base64.b64encode(a2.format(password))
c = subprocess.call([a1, '-EncodedCommand ' + data])

你的命令看起来应该是这样的:

PowerShell -EncodedCommand MQAuAC4AMQAwACAAfAAgACUAIAB7ACAAIgBQAG8AdwBlAHIAUwBoAGUAbABsACAAUgBvAGMAawBzACIAIAB9AA==

Powershell将对字符串进行解码并运行命令。