【发布时间】:2023-01-27 18:33:13
【问题描述】:
我遇到了一个问题,即我尝试在 VM 上运行命令,该 VM 作为 Windows 故障转移群集的一部分列在两个节点之一上。
$computers = Import-Csv -Path 'C:\Temp\PS Scripts\References\IPList.csv' -Delimiter ","
$localCred = Get-Credential -Message "Local credentials required" -UserName Administrator
$domainCred = Get-Credential -Message "Local credentials required" -UserName Domain\Administrator
foreach ($computer in $computers) {
Invoke-Command -Computer $computer.Host -Credential $domainCred -ScriptBlock {
Invoke-Command -VMName $Using:computer.VMName -Credential $Using:localCred -ScriptBlock {
New-NetIPAddress -IPAddress $Using:computer.IPAddress -PrefixLength $Using:computer.PrefixLength -AddressFamily $Using:computer.AddressFamily -InterfaceAlias $Using.computer.InterfaceAlias -DefaultGateway $Using:computer.DefaultGateway
}}}
由于这些是局部变量,我需要在 Invoke-Command 脚本块中将它们声明为远程变量。
如果我在不嵌套两个调用命令的情况下运行上述命令,那么脚本运行时不会出现问题。
这是执行此任务的正确方法吗?我以前从未嵌套过 Invoke-Command 语句,但也许有更好的方法来实现。我宣布$使用多变的。
脚本运行时,出现如下错误:
无法将参数绑定到参数“IPAddress”,因为它是一个空字符串。 + CategoryInfo : InvalidData: (:) [New-NetIPAddress], ParameterBindingValidationException + FullyQualifiedErrorId:ParameterArgumentValidationErrorEmptyStringNotAllowed,New-NetIPAddress
【问题讨论】:
标签: powershell scripting powershell-remoting