2016-12-22 2 views
0

Я знаю, что вы не можете использовать Read-Host в Workflow. Но мне нужно запросить пользователя через Read-Host, а затем использовать эти входные данные в Workflow. Нам нужно выполнить MSG.EXE на удаленных машинах (так как NetSend до свидания)Пропустить аргумент для Workflow (powershell)

У меня этот код. Он работает без ошибок, но не отправляет никаких сообщений. как передать аргумент в рабочий процесс, чтобы он работал?

$Computers = @("mg2014","cclab2","MG11751","mg10462","mg11768","mg11786","mg11741","mg13244","mg13434","mg14464", "mg10257") 

workflow Test-WFConnection { 
    param(

     [Parameter (Mandatory = $true)] 
     [object[]]$message 
    ) 

foreach -parallel ($computer in $computers) { 
if (Test-Connection -ComputerName $computer -Count 1 -ErrorAction SilentlyContinue) {msg /SERVER:$computer * $msg} 

    } 
} 

$msg = Read-host "Enter your message here" 
Test-WFConnection -message $msg 

Вопрос заключается в $ тзд никогда не отправляется на любой машине.

+0

Могу ли я спросить, почему вы используете рабочий процесс, а не просто используя параметр '-AsJob'' Test-Connection'? –

ответ

0

Чтобы справиться с рабочими процессами, вы должны понимать области в рабочем процессе. Здесь значение $ msg не относится к сфере действия, поэтому значение вовсе не входит в блок. Поэтому вы должны использовать $ Используя: msg, тогда он будет доступен.

дам небольшой пример ниже, чтобы уточнить ваши сомнения:

workflow sample_test 
{ 
    $variable1 = 5 

    # Changes to variable value in an InlineScript do not affect 
    # the value of the workflow variable. 
    InlineScript {$variable1 = $Using:variable1 + 1; "Inline Variable1 = $variable1"} 
    "Workflow variable1 = $variable1" 
    # To change the value in workflow scope, return the new value. 
    $a = InlineScript {$variable1 = $Using:variable+1; $variable1} 
    "Workflow New variable1 = $variable1" 
} 

Ниже приведен скриншот для справки:

enter image description here

Надеется, что это помогает ... !!!

+0

Привет, спасибо. Извините, но я не понимаю, как включить свою логику в свой Workflow. Как/где я могу добавить это? Я попробовал $ Using: $ msg и получил эту ошибку: – mqh7

+0

Привет, спасибо. Извините, но я не понимаю, как включить свою логику в свой Workflow. Как/где я могу добавить это? Я попробовал $ Using: $ msg и получил эту ошибку: A Использовать переменную не удается. A Использовать переменную можно использовать только с Invoke-Command, Start-Job или InlineScript в рабочем процессе сценария Итак, как я могу создать это в своем скрипте? Большое спасибо за вашу помощь. – mqh7

+0

Я тоже вижу один недостаток. вы принимаете ввод как $ message, но вы проходите как $ msg .. 'if (Test-Connection -ComputerName $ computer -Count 1 -ErrorAction SilentlyContinue) {msg/SERVER: $ computer * $ Использование: message}'. использовать это сейчас –

0

Как насчет того, чтобы объявить компьютеры в рабочем процессе?

workflow send-message { 
param(
    [Parameter (Mandatory = $true)] 
    [string]$message 
) 

$computers = "mg2014","cclab2","MG11751","mg10462","mg11768","mg11786","mg11741","mg13244","mg13434","mg14464", "mg10257" 
foreach -parallel ($computer in $computers){ 
if (Test-Connection -ComputerName $computer -Count 1 -ErrorAction SilentlyContinue){ 
    msg /SERVER:$computer * $message 
}}} 

send-message -message (read-host 'Enter message') 

Это работало нормально, когда я тестировал его. Как писал здесь: https://community.spiceworks.com/topic/1951356-pass-argument-to-workflow

0

вы можете передать компьютеры в качестве параметра, как это или есть какие-либо ограничения, что мешает вам делать что:

$Computers = @("mg2014","cclab2","MG11751","mg10462","mg11768","mg11786","mg11741","mg13244","mg13434","mg14464", "mg10257") 

workflow Test-WFConnection { 
    param(

     [Parameter (Mandatory = $true)] 
     [object[]]$message,[object[]]$computers 
    ) 

foreach -parallel ($computer in $computers) { 
if (Test-Connection -ComputerName $computer -Count 1 -ErrorAction SilentlyContinue) {msg /SERVER:$computer * $msg} 

    } 
} 

$msg = Read-host "Enter your message here" 
Test-WFConnection -message $msg -computers $Computers 
Смежные вопросы