powershell .\trialping.ps1 против &.\trialping.ps1

У меня есть файл tripping.ps1 с приведенным ниже кодом.

param([string]$ip)start-job  -ArgumentList $ip -scriptblock {param([string]$ip)& C:\users\pubic\desktop\PingMachine.ps1 -ip $IP}

Приведенный выше код создает задание, которое запускает pingmachine.ps1, которое в основном пингует машину каждые 10 секунд или около того и записывает в output.txt в какую-то папку.

Если используется 1)& ".\trialping.ps1" -ip x.x.x.x все работает нормально

2)powershell .\trialping.ps1 -ip "x.x.x.x" используется выходной файл не создается.

Почему разница. заранее спасибо


person Vindhya G    schedule 14.02.2015    source источник


Ответы (1)


В первом случае:

  1. Вы запускаете скрипт .\trialping.ps1.
  2. Этот сценарий запускает командлет Start-Job.
  3. Командлет Start-Job создает объект задания и возвращает его.
  4. Скрипт заканчивается.
  5. Любое активное задание продолжает выполняться в фоновом режиме.

Во втором случае:

  1. Вы запускаете новую копию PowerShell.
  2. Эта копия PowerShell запускает скрипт .\trialping.ps1.
  3. Этот сценарий запускает командлет Start-Job.
  4. Командлет Start-Job создает объект задания и возвращает его.
  5. Скрипт заканчивается.
  6. PowerShell больше нечего делать и -NoExit не предусмотрено, поэтому PowerShell закрывается и отменяет все активные задания в процессе.
person user4003407    schedule 14.02.2015
comment
Как я могу заставить его работать для второго варианта. Добавление -noexit не сработало - person Vindhya G; 14.02.2015
comment
@vindhya Чего ты хочешь достичь? - person user4003407; 14.02.2015
comment
необходимо запустить скрипт удаленно, а использование & дает исключение сериализации. так что ищите альтернативы - person Vindhya G; 14.02.2015
comment
Как вы запускали скрипт удаленно? Когда и где вы получили это исключение? Что говорит сообщение об ошибке? Как вы узнали, что ошибка была вызвана оператором &, а не чем-то, что делает или возвращает ваш скрипт? Добавьте всю эту информацию в свой вопрос. - person user4003407; 14.02.2015
comment
Использование фреймворка, и нужно копать очень глубоко, чтобы сказать, как выполняется удаленное взаимодействие. Но узнал и вызывает ошибку bcs, если я удалю и использую powershell, все работает нормально. - person Vindhya G; 14.02.2015
comment
@vindhya Одна из возможных причин такого поведения заключается в следующем: когда вы запускаете консольное приложение (например, powershell.exe) в PowerShell, результат будет иметь тип String. String можно легко сериализовать, так что здесь нет проблем. Когда вы запускаете скрипт напрямую .\trialping.ps1 -ip x.x.x.x (здесь вам фактически не нужен оператор &), он может возвращать объект любого конкретного типа. Не каждый тип допускает сериализацию, поэтому здесь вы можете столкнуться с исключением. Вы можете попытаться обойти это, добавив Out-String, чтобы преобразовать объекты в строки на удаленной стороне. - person user4003407; 15.02.2015