我正在尝试使用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)
答案 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将对字符串进行解码并运行命令。