Как передать локальную переменную в блок сценария, выполняемый на удаленной машине с Invoke-Command?

Я пытаюсь получить Filehash файла, расположенного на удаленном сервере с помощью Invoke-Command . Я запускаю свои сценарии на PowerShell версии 4. Он отлично работает, когда я даю полный путь, как показано ниже:

 Invoke-Command -ComputerName winserver -ScriptBlock { Get-FileHash E:\test\testfile.zip -Algorithm SHA1 } 

Вышеупомянутая команда работает. Но мне нужно передать имя файла с помощью переменной, как показано ниже:

 Invoke-Command -ComputerName winserver -ScriptBlock { Get-FileHash E:\test\$dest.zip -Algorithm SHA1 } 

Я новичок в написании сценариев и powershell. Пожалуйста, помогите мне с этим!

В PowerShell 4 (3+ на самом деле) самым простым способом является использование модификатора Use scope:

 Invoke-Command -ComputerName winserver -ScriptBlock { Get-FileHash E:\test\$Using:dest.zip -Algorithm SHA1 } 

Для решения, которое работает со всеми версиями:

 Invoke-Command -ComputerName winserver -ScriptBlock { param($myDest) Get-FileHash E:\test\$myDest.zip -Algorithm SHA1 } -ArgumentList $dest 

Чтобы дополнить полезный ответ бриантиста :

Блок сценария, переданный Invoke-Command , (как предполагалось) выполняется на удаленном компьютере, используя переменные удаленной машины по умолчанию.

Таким образом, для использования локальной переменной (значения) необходимы дополнительные шаги (иначе говоря: внутри блока сценария, выполняемого удаленно, вы не можете просто ссылаться на локальные переменные, как обычно, например, с $dest ):

  • PS v3 + предлагает using: модификатор области видимости для непосредственного использования локальной переменной внутри блока сценария – см. Первую команду борца.

    • Обратите внимание, что using: работает только тогда, когда Invoke-Command фактически нацеливается на удаленную машину.
  • Единственный вариант, который также работает в более ранних версиях, – передать локальную переменную в качестве параметра в блок сценария. – см. вторую команду борца.

Для получения дополнительной информации см. Get-Help about_Remote_Variables или документы в Интернете .

Давайте будем гением компьютера.