我想要从具有所有模块的虚拟机运行Powercli脚本。 该脚本应将其他 VM 插入域。
$ScriptText ="Add-Computer -DomainName foofoo.com -DomainCredential " + $DomainC +" -OUPath 'OU=CACI,OU=Computers,OU=bla,OU=Regions,DC=bla,DC=com'"
echo $Script
Invoke-VMScript -vm $VMName -GuestCredential $AdminC -ScriptText $ScriptText
正确插入所有变量。
润色Add-Computer -DomainName foofoo.com -DomainCredential $DomainC -OUPath 'OU=CACI,OU=Computers,OU=bla,OU=Regions,DC=bla,DC=com'
从另一个虚拟机 Poweshell 控制台运行良好,输出消息WARNING: The changes will take effect after you restart the computer ..
$Script返回:
Add-Computer -DomainName foofoo.com -DomainCredential System.Net.NetworkCredential -OUPath 'OU=CACI,OU=Computers,OU=bla,OU=Regions,DC=bla,DC=com'
但在那之后这个脚本卡住了,我没有错误或其他输出。
知道
这是什么原因吗?添加计算机 CMDlet 采用域凭据参数的凭据对象。 通过尝试将其转换为$scripttext变量中的字符串 - 您将在转换中丢失凭据类型。 您需要在脚本文本中创建一个凭据对象,而不是传入包含凭据对象的变量。这增加了一些复杂性,因为您通常希望从安全保管库中提取密码。 下面的示例显示了如何将密码作为纯文本包含 - 但由于明显的原因,并不真正建议这样做。
$scripttext = @'
$user = "UserName"
$password = ConvertTo-SecureString "bar" -AsPlainText -Force
$DomainC = New-Object PSCredential $user, $password
Add-Computer -DomainName foofoo.com -DomainCredential $DomainC -OUPath 'OU=CACI,OU=Computers,OU=bla,OU=Regions,DC=bla,DC=com'
'@
Invoke-VMScript -vm $VMName -GuestCredential $AdminC -ScriptText $ScriptText