我需要将String转换为Powershell安全字符串。
目前我打开一个ssh连接并在那里运行我的Powershell命令。问题是,我无法从期望在Powershell中运行变量。
期望中的命令:
send "$SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force\r"
Powershell中的错误:
PS C:\ Users \ Administrator> "" ="密码" | ConvertTo-SecureString -AsPlainText -Force
在线:1个字符:1 +"" ="密码" | ConvertTo-SecureString -AsPlainText -Force
有人知道如何解决这个问题,或者是否有更简单的解决方案。
也许完整的脚本有助于理解我的问题。
#!/bin/sh
Username="benutzer"
Password="passwort"
login_user="Administrator"
ADServer="192.168.x.x"
function CreateADUser()
{
Givenname=$1
Surname=$2
Email=$3
export Givenname
export Surname
export Email
Username="$Givenname.$Surname"
/usr/bin/expect << EOD
spawn ssh -i ~/.ssh/ADServer $login_user@$ADServer
expect "*>"
send "\$SecurePassword = '$Password' | ConvertTo-SecureString -AsPlainText -Force\r"
expect "*>"
send "New-ADUser -Name $Username -GivenName $Givenname -SurName $Surname -SamAccountName $Username -EmailAddress $Email -AccountPassword $SecurePassword\r"
expect "*>"
send "exit\r"
EOD
}
Email=$(dscl /LDAPv3/ldap.example.com -read /Users/$Username EMailAddress)
Email=$(echo "${Email##* }")
FirstName=$(dscl /LDAPv3/ldap.example.com -read /Users/$Username FirstName)
FirstName=$(echo "${FirstName##* }")
LastName=$(dscl /LDAPv3/ldap.example.com -read /Users/$Username LastName)
LastName=$(echo "${LastName##* }")
CreateADUser "$FirstName" "$LastName" "$Email"
答案 0 :(得分:1)
使用Tcl的非插值引号(set str {$vars not substituted}
)可减少所需的转义量。但是你需要替换一个变量。
你可以:
将其分段发送:
send {$SecurePassword = '}
send $Password
send "' | ConvertTo-SecureString -AsPlainText -Force}\r"
使用format
这是Tcl的printf命令
send [format {$SecurePassword = '%s' | ConvertTo-SecureString -AsPlainText -Force\r} $Password]
但如果你可以使用大量的反斜杠,那么常规的双引号就可以了。
答案 1 :(得分:0)
感谢您的帮助。 它现在很棒。我做了一个小改动,我不需要发送这么多的反斜杠或碎片。 现在它只有一个字符串。
send "New-ADUser -Name $Username -GivenName $Givenname -SurName $Surname -SamAccountName $Username -EmailAddress $Email -AccountPassword (ConvertTo-SecureString $Password -AsPlainText -force) -Enabled \\\$true\r"