我想在输入参数的同时调用两个命令,例如,如果我要执行此代码,我会把:
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 :(得分: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