2014-10-22 3 views
0

Я хотел бы ссылаться на две команды, в то же время при вводе параметров так, например, если я должен был выполнить этот код, который я бы поставил:Вызов двух команд одновременно PowerShell

abcdef folder1 folder2

и сделало бы две папки на рабочем столе.

Код, приведенный ниже, является лишь примером, но я хочу знать правильный синтаксис для его выполнения.

function abcdef { 
    param($folder1, $folder2) 
    $s = $ExecutionContext.InvokeCommand.NewScriptBlock("mkdir C:\'Documents and Settings'\X\Desktop\$folder1") 
    $s1 = $ExecutionContext.InvokeCommand.NewScriptBlock("mkdir C:\'Documents and Settings'\X\Desktop\$folder2") 
    Invoke-Command -ComputerName $ComputerRemote -ScriptBlock $s,$s1 -Credential $cred 
} 

ответ

0
function abcdef { 
param(
[parameter(Mandatory=$True,Position=0,ValueFromPipeline=$True)] 
[ValidateNotNullOrEmpty] 
[String[]] $ComputerName, 
[parameter(Mandatory=$True,Position=1)] 
[ValidateNotNullOrEmpty()] 
[string[]] $folders, 
[parameter(Mandatory=$True,Position=2)] 
[ValidateNotNullOrEmpty()] 
[PSCredential] $cred 
) 

foreach($computer in $ComputerName){ 
    foreach($folder in $folders{ 
    $s = { New-Item "C:\Documents and Settings\X\Desktop\$folder" -type directory } 
    Invoke-Command -ComputerName $computer -ScriptBlock $s -Credential $cred 
    } 
} 

} 

Вы можете вызвать функцию следующим образом:

abcdef $computernames $folders $credentials 

Или вы можете трубные Computernames, как это делать действия на все компьютеры, ваша предыдущая команда возвращает (в данном примере все AD Компьютеры):

Get-ADComputer -Filter * | abcdef $folders $credentials 

Также обратите внимание, что я не использую mkdir, вы Shoul d allways использует командлеты, если доступно для действия, которое вы пытаетесь выполнить.

+0

Спасибо, но что, если я хотел сделать две совершенно разные команды? например. один для создания папки и другого изменения IP-адреса. все в одной функции – Jendizer

+0

в этом случае вы бы определили второй скрипт-блок с другим действием и снова вызовите Invoke-Command или добавите действие в первый скриптовый блок (который я бы посоветовал вам не делать) – Paul

+0

Я попробую его и позволю вы знаете, как это происходит. благодаря – Jendizer

0

Вы можете сделать это, объявив параметр папку в виде массива строк:

function abcdef { 
    param([string[]]$Folder) 
} 

И тогда вы делаете Еогеасп содержимого этого массива:

foreach ($f in $Folder) { 
    # do something with $f 
} 

вы вызываете эту функционируют следующим образом:

abcdef 'folder1','folder2' 

или

abcdef -Folder @('folder1','folder2') 
Смежные вопросы