Вызов команды с использованием задачи - PullRequest
0 голосов
/ 20 июня 2020

Я пытался запустить сценарий PowerShell с помощью команды invoke, как показано ниже. Но я получаю следующее сообщение об ошибке. где я не прав?

$nicMacAddress = "12-34-56-78-90-12"
$nic1MacAddress = "12:34:56:78:90:12"
$nic2MacAddress = "12:34:56:78:90:11"

$code1 = @'
    switch(`$nicMacAddress){

        '$($nic1MacAddress.Replace(':','-'))"' {
         
        write-host "LAN interface edited" -BackgroundColor DarkRed -ForegroundColor DarkGreen
        
        }

        '$($nic2MacAddress.Replace(':','-'))' {
        write-host "BACKUP interface edited" -BackgroundColor DarkRed -ForegroundColor DarkGreen
     

       }

         Default {

            Write-Error 'Unknown MAC address found'

        }


    }

'@

Invoke-Command -ComputerName hostname -ScriptBlock $code1

Вывод:

Invoke-Command : Cannot bind parameter 'ScriptBlock'. Cannot convert the "    switch($nicMacAddress){
        '$($nic1MacAddress.Replace(':','-'))"' {
        write-host "LAN interface edited" -BackgroundColor DarkRed -ForegroundColor DarkGreen
        
        }
        '$($nic2MacAddress.Replace(':','-'))' {

1 Ответ

3 голосов
/ 20 июня 2020

Как уже отмечалось, самый простой способ определить блок сценария - поместить код в фигурные скобки {}. В настоящий момент вы помещаете его в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...