同时调用两个命令powershell



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

abcdef folder1 folder2

它会在桌面上创建两个文件夹。

下面的代码只是一个例子,但我想知道正确的语法

function abcdef {
  param($folder1, $folder2)
  $s = $ExecutionContext.InvokeCommand.NewScriptBlock("mkdir C:'Documents and Settings'XDesktop$folder1")
  $s1 = $ExecutionContext.InvokeCommand.NewScriptBlock("mkdir C:'Documents and Settings'XDesktop$folder2")
  Invoke-Command -ComputerName $ComputerRemote -ScriptBlock $s,$s1 -Credential $cred 
}
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 SettingsXDesktop$folder" -type directory }
   Invoke-Command -ComputerName $computer -ScriptBlock $s -Credential $cred 
   }
 }
}

你可以这样调用函数:

abcdef $computernames $folders $credentials

或者,您可以像这样通过管道传输Computername来在您以前的命令返回的所有计算机上执行操作(在本例中为所有AD计算机):

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

还要注意,我不使用mkdir,如果cmdlet可用于您尝试执行的操作,那么您应该始终使用cmdlet

您可以通过将文件夹参数声明为字符串数组来实现这一点:

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

然后对这个数组的内容进行foreach:

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

您这样调用这个函数:

abcdef 'folder1','folder2'

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

最新更新