Get-Credentials密码为“空”

时间:2016-09-26 17:05:45

标签: windows powershell windows-server-2012 windows-server-2012-r2 powershell-v4.0

我编写了一个需要连接到不在域上的多个远程服务器的脚本。最终目标是使用Invoke-Command在远程服务器上创建计划任务。

$name = $server."Name";
$cred = Get-Credential "$name\admin";

它会导致提示打开,我输入管理员密码。但是当我打电话时:

Invoke-Command -ComputerName $addr -Script $Script1 -Credential $cred 

终端提示输入UserId。

如果再次输入用户名,则会出现此错误:

Cannot validate argument on parameter 'Password'. The argument is null or empty.
Provide an argument that is not null or empty, and then try the command again.
    + CategoryInfo          : InvalidData: (:) [Register-ScheduledTask], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Register-ScheduledTask
    + PSComputerName        : 10.110.0.25

我正在运行的脚本是:

$Script1 = {Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force -Confirm:$False; $A=New-ScheduledTaskAction -Execute "powershell.exe" -argument "-file C:\PSWU\Shared\ps.ps1"; $p=New-ScheduledTaskPrincipal -RunLevel Highest ; $C=New-ScheduledTask -Action $A -Principal $p ; Register-ScheduledTask T1 -InputObject $C -Password $SecurePassword;}

1 个答案:

答案 0 :(得分:0)

这里似乎问题是,$Script这里是一个ScriptBlock,它在自己的范围内。因此它对$SecurePassword变量没有任何价值。

在脚本块中使用Param($SecurePassword)并传递原$SecurePassword-ArgumentList参数[{1}}

这是一个例子。

Invoke-Command

您在ScriptBlock中访问的任何变量都应该在ScriptBlock的一侧定义,或者作为$Script = {param($r);"r is $r"} Invoke-Command -ScriptBlock $Script -ArgumentList 'Value for r' 的参数传递

如果在本地运行的脚本中使用脚本块,则可以使用变量作用域。

Invoke-Command

的更多信息

这里也是:https://technet.microsoft.com/en-us/library/hh847893.aspx

的问候,

Kvprasoon