2014-10-22 85 views
0

我想在同一時間進入參數時調用兩個命令因此,例如,如果我是執行這個代碼,我會把:同時調用兩個命令的PowerShell

abcdef folder1 folder2

,它會在桌面上創建兩個文件夾。

下面的代碼只是一個例子,但我想知道這樣做的正確語法。

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

然後你做的這個數組的內容一個foreach:

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

您調用此

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 Computers):

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

另請注意,我不使用mkdir,如果其中一個可用於您正在執行的操作,則全部使用cmdlet

+0

感謝但如果我想要執行兩個完全不同的命令呢?例如,一個創建一個文件夾,另一個更改一個IP地址。所有在一個功能 – Jendizer 2014-10-22 12:46:16

+0

在這種情況下,你會定義第二個腳本塊與其他行動,再次調用Invoke-Command或添加行動到第一個scriptblock(我建議你不要這樣做) – Paul 2014-10-22 12:48:25

+0

我會試試看,讓你知道它是怎麼回事。謝謝 – Jendizer 2014-10-22 12:53:46

0

通過聲明的文件夾參數作爲一個字符串數組做到這一點功能如下:

abcdef 'folder1','folder2' 

abcdef -Folder @('folder1','folder2')