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