获取凭据密码是 "Null"

Get-Credentials Password is "Null"

我编写了一个脚本,需要连接到多个不在域中的远程服务器。最终目标是使用 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;}

看来这里的问题是,$Script这是一个 ScriptBlock 并且它在它自己的范围内。所以它对 $SecurePassword 变量没有任何价值。

在脚本块中使用 Param($SecurePassword) 并传递原始 $SecurePassword 小瓶 -ArgumentList Invoke-Command

的参数

这是一个例子。

$Script = {param($r);"r is $r"}
Invoke-Command -ScriptBlock $Script -ArgumentList 'Value for r'

无论您在 ScriptBlock 中访问什么变量,都应在 ScriptBlock 中定义或作为参数传递给 Invoke-Command

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

更多信息请见 Get-Help about_Script_Blocks

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

问候,

Kvprasoon