Memanggil dua perintah secara bersamaan PowerShell

Saya ingin menjalankan dua perintah secara bersamaan ketika memasukkan parameter jadi misalnya jika saya mengeksekusi kode ini saya akan memasukkan:

abcdef folder1 folder2

dan itu akan membuat dua folder di desktop.

Kode di bawah ini hanyalah sebuah contoh tetapi saya ingin mengetahui sintaks yang benar untuk melakukannya.

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 
}

person Jendizer    schedule 22.10.2014    source sumber


Jawaban (2)


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 
   }
 }

}

Anda dapat memanggil fungsi seperti ini:

abcdef $computernames $folders $credentials

Atau Anda dapat menyalurkan Nama Komputer seperti ini untuk melakukan tindakan pada semua komputer yang dikembalikan oleh perintah Anda sebelumnya (dalam contoh ini semua Komputer AD):

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

Perhatikan juga bahwa saya tidak menggunakan mkdir, Anda harus selalu menggunakan cmdlet jika tersedia untuk tindakan yang Anda coba jalankan

person Paul    schedule 22.10.2014
comment
Terima kasih, tetapi bagaimana jika saya ingin melakukan dua perintah yang sangat berbeda? misalnya satu untuk membuat folder dan satu lagi mengubah alamat ip. semuanya dalam satu fungsi - person Jendizer; 22.10.2014
comment
dalam hal ini Anda akan mendefinisikan blok skrip kedua dengan tindakan lain dan memanggil Invoke-Command lagi atau menambahkan tindakan ke blok skrip pertama (yang saya sarankan agar Anda tidak melakukannya) - person Paul; 22.10.2014
comment
Saya akan mencobanya dan memberi tahu Anda bagaimana kelanjutannya. terima kasih - person Jendizer; 22.10.2014

Anda melakukan ini dengan mendeklarasikan parameter folder sebagai array string:

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

Dan kemudian Anda melakukan foreach terhadap isi array ini:

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

Anda menjalankan fungsi ini seperti ini:

abcdef 'folder1','folder2'

or

abcdef -Folder @('folder1','folder2')
person ojk    schedule 22.10.2014