如何将参数值传递给 Invoke-Command cmdlet?
How to pass param value to the Invoke-Command cmdlet?
我写了一个简单的 powershell 脚本来修改远程机器上的主机文件,但是出了点问题。
脚本:
param(
[string]$value
)
$username = 'username'
$password = 'password'
$hosts = "172.28.30.45","172.28.30.46"
$pass = ConvertTo-SecureString -AsPlainText $password -Force
$cred = New-Object System.Management.Automation.PSCredential -ArgumentList $username,$pass
ForEach ($x in $hosts){
echo "Write in $x , value: $value"
Invoke-Command -ComputerName $x -ScriptBlock {Add-Content -Path "C:\Windows\system32\drivers\etc\hosts" -Value $value} -Credential $cred
echo "Finish writing."
}
echo "End of PS script."
当 运行 时,它会为每个主机文件写入一个新的 空行 。此行 echo "Write in $x , value: $value"
显示 $value 值。
我做错了什么?
您必须通过在脚本块中定义 param
部分来将参数传递给脚本块,并使用 -ArgumentList
传递参数:
Invoke-Command -ComputerName $x -ScriptBlock {
param
(
[string]$value
)
Add-Content -Path "C:\Windows\system32\drivers\etc\hosts" -Value $value
} -Credential $cred -ArgumentList $value
或者您利用 using:
变量前缀:
Invoke-Command -ComputerName $x -ScriptBlock {
Add-Content -Path "C:\Windows\system32\drivers\etc\hosts" -Value $using:value
} -Credential $cred
我写了一个简单的 powershell 脚本来修改远程机器上的主机文件,但是出了点问题。
脚本:
param(
[string]$value
)
$username = 'username'
$password = 'password'
$hosts = "172.28.30.45","172.28.30.46"
$pass = ConvertTo-SecureString -AsPlainText $password -Force
$cred = New-Object System.Management.Automation.PSCredential -ArgumentList $username,$pass
ForEach ($x in $hosts){
echo "Write in $x , value: $value"
Invoke-Command -ComputerName $x -ScriptBlock {Add-Content -Path "C:\Windows\system32\drivers\etc\hosts" -Value $value} -Credential $cred
echo "Finish writing."
}
echo "End of PS script."
当 运行 时,它会为每个主机文件写入一个新的 空行 。此行 echo "Write in $x , value: $value"
显示 $value 值。
我做错了什么?
您必须通过在脚本块中定义 param
部分来将参数传递给脚本块,并使用 -ArgumentList
传递参数:
Invoke-Command -ComputerName $x -ScriptBlock {
param
(
[string]$value
)
Add-Content -Path "C:\Windows\system32\drivers\etc\hosts" -Value $value
} -Credential $cred -ArgumentList $value
或者您利用 using:
变量前缀:
Invoke-Command -ComputerName $x -ScriptBlock {
Add-Content -Path "C:\Windows\system32\drivers\etc\hosts" -Value $using:value
} -Credential $cred