我想在输入参数时同时调用两个命令,所以例如,如果我要执行此代码,我会输入:
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')