Powershell Remoting: Howto Run a Comand on multiple Machines with individual Parameters?

For example:

Lets say i have 10 servers (Server 1-Server10) and a csv list where i have the servernames and a individual Foldername/Path for each server.

How would i create these Folders on each machine?

a) Open all 10 connections and run a command based on the csv ? b) stepping through 1by1

Please point me to the most effective way


This is very naive in that there is no error checking/etc., but it does what you want. I'm assuming here that you are using Powershell 2.0 with WinRM.

Assuming you have a CSV setup like this:

server,path
server1,c:\path1
server2,c:\path2
server3,c:\path3

The solution would be like so:

$csvdata = import-csv .\test.csv
foreach ($row in $csvdata) {
    invoke-command $row.server { param($path) mkdir $path } -argumentlist $row.path
}

The only really weird part here is how you get the path passed in. Typically, the script in invoke-command cannot read your local variables. You setup a param for it (called $path) and then put the local variable $row.path into the argument list - this allows the mkdir command on the remote servers to use the $path variable and it sees what was passed in from the CSV file.