同时调用两个命令powershell

时间:2014-10-22 12:14:21

标签: powershell scripting

我想在输入参数的同时调用两个命令,例如,如果我要执行此代码,我会把:

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 
}

2 个答案:

答案 0 :(得分:0)

您可以通过将文件夹参数声明为字符串数组来执行此操作:

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

然后你做了这个数组的内容:

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

你可以这样调用这个函数:

abcdef 'folder1','folder2'

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

答案 1 :(得分: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,如果有一个可用于您尝试执行的操作,则应始终使用cmdlet