2012-04-26 26 views
6

Tengo un archivo CSV con dos columnas diferentes, una con los nombres de PC y uno con direcciones MAC como esto:¿Cómo recorro un archivo CSV con un lote o un script de PowerShell?

PCxxxx 00-11-22-33-44-55 
... 
... 

Estos valores deben ser colocados en el siguiente comando CLI:

wdsutil /Set-Device /Device:PCxxxx /ID:00-11-22-33-44-55 

Ahora ya que hay alrededor de 200 de ellos, quiero automatizar esto.

Como cuestión de interés, ¿podría uno hacer esto con un lote? Sería bastante complicado, ¿verdad? Pensé en arreglos, pero no creo que uno pueda hacer esto en lote.

Tal vez con PowerShell sería un poco más fácil.

+0

esta ayuda - http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/813f3903-83c3-4a6a-9edf- 320a341ed99d/ –

Respuesta

10

En un archivo por lotes:

for /f "tokens=1,2 delims= " %%a in (foo.csv) do (
    wdsutil /Set-Device /Device:%%a /ID:%%b 
) 

En realidad, se puede hacer eso como una sola línea de cmd directamente:

for /f "tokens=1,2 delims= " %a in (foo.csv) do wdsutil /Set-Device /Device:%a /ID:%b 

En PowerShell puede utilizar una idea similar:

Get-Content foo.csv | ForEach-Object { 
    $name,$mac = -split $_ 
    wdsutil /Set-Device /Device:$name /ID:$mac 
} 

O utilice el cmdlet de importación CSV, pero dada su pregunta, parece que no tiene heade de columna rs, por lo que necesita para proporcionar de forma manual:

Import-CSV -Delim ' ' -Path foo.csv -Header Name,Mac | ForEach-Object { 
    wdsutil /Set-Device "/Device:$($_.Name)" "/ID:$($_.Mac)" 
} 
Will
+0

La opción FOR '... delims =" 'no es necesaria porque el espacio es el delimitador predeterminado. Puede usar simplemente' for/f "tokens = 1,2" %% a in ... ' – Aacini

+0

Sí, yo solo elegí ser explícito aquí. Además, los delimitadores por defecto son espacios y pestañas. – Joey

3
# First column in csv file must be titled PCName, second column must be titled MacAddress. 
Import-Csv myfile.csv | %{ wdsutil /Set-Device /Device:$_.PCName /ID:$_.MacAddress } 

Advertencia: no probada.

+2

Parece que el archivo no tiene encabezados, por lo que deberá proporcionarlos manualmente. Además, el delimitador predeterminado no funcionaría. – Joey

Cuestiones relacionadas