Как уже отмечалось, самый простой способ определить блок сценария - поместить код в фигурные скобки {}
. В настоящий момент вы помещаете его в Here-String, что просто превращает его в строку, которая выглядит как код.
Внутри блока сценария переменные, которые вы определили снаружи, неизвестны, поэтому вам нужно либо отправьте его как параметры, например:
$nicMacAddress = "12-34-56-78-90-12"
$nic1MacAddress = "12:34:56:78:90:12"
$nic2MacAddress = "12:34:56:78:90:11"
$code1 = {
param (
[string]$nic,
[string]$nic1,
[string]$nic2
)
switch($nic) {
$($nic1.Replace(':','-')) {
write-host "LAN interface edited" -BackgroundColor DarkRed -ForegroundColor DarkGreen
}
$($nic2.Replace(':','-')) {
write-host "BACKUP interface edited" -BackgroundColor DarkRed -ForegroundColor DarkGreen
}
default {
Write-Error 'Unknown MAC address found'
}
}
}
Invoke-Command -ComputerName hostname -ScriptBlock $code1 -ArgumentList $nicMacAddress, $nic1MacAddress, $nic2MacAddress
Или (начиная с PowerShell 3.0) используйте модификатор using
$nicMacAddress = "12-34-56-78-90-12"
$nic1MacAddress = "12:34:56:78:90:12"
$nic2MacAddress = "12:34:56:78:90:11"
$code1 = {
switch($using:nicMacAddress) {
$(($using:nic1MacAddress).Replace(':','-')) {
write-host "LAN interface edited" -BackgroundColor DarkRed -ForegroundColor DarkGreen
}
$(($using:nic2MacAddress).Replace(':','-')) {
write-host "BACKUP interface edited" -BackgroundColor DarkRed -ForegroundColor DarkGreen
}
default {
Write-Error 'Unknown MAC address found'
}
}
}
Invoke-Command -ComputerName hostname -ScriptBlock $code1