2017-05-26 80 views
0
$contacts1 = Import-Csv "C:\temp\gal\gal1.csv" 
     Start-Job -Name Loop1 -ScriptBlock { 
      param([string[]]$contacts1) 
      foreach ($c1 in $contacts1){ 
       $name = $c1.displayname 
       New-Item -Path "C:\Temp\GAL" -Name "$name" -ItemType "file" 
      } 
     } -ArgumentList (,$contacts1) 
     Wait-Job -Name Loop1 | Receive-Job 
     Get-Job -Name Loop1 | Remove-Job 

以上是使用從CSV內創建的名稱創建一個文件,但接下來的三個循環只是嘗試並創建相同的名稱。但是,如果我將所有與作業有關的東西註釋掉,如下所示,循環本身會成功創建四個具有正確名稱的文件。在Powershell中使用作業

$contacts1 = Import-Csv "C:\temp\gal\gal1.csv" 
#Start-Job -Name Loop1 -ScriptBlock { 
    #param([string[]]$contacts1) 
    foreach ($c1 in $contacts1){ 
     $name = $c1.displayname 
     New-Item -Path "C:\Temp\GAL" -Name "$name" -ItemType "file" 
    } 
#} -ArgumentList (,$contacts1) 
#Wait-Job -Name Loop1 | Receive-Job 
#Get-Job -Name Loop1 | Remove-Job 
+0

你的問題是什麼 - _Start-Job_試圖多次創建同一個文件,其中常規循環工作正常?這也有助於查看CSV的內容。 – Raf

回答

2

在第一個你使用字符串(你傳遞一個字符串數組到作業)。字符串沒有顯示名稱屬性。第一個塊可能會在嚴格模式下產生錯誤(Set-StrictMode -Version「latest」)。你將不得不傳遞一個對象數組(有一個displayname屬性)才能工作。

在第二步中,您將處理由Import-CSV生成的對象。 Import-Csv的返回值取決於文件的內容。如果使用Export-Csv,該文件可能包含「#TYPE」行和標題行。其中一個標題可能是「displayname」。

實施例:

PS C:\> Get-ChildItem -Filter "windows" | Select-Object "FullName","Name" | Export-Csv -Path "c:\myfolder\test.csv" 

PS C:\> Get-Content ".\myfolder\test.csv" 
#TYPE Selected.System.IO.DirectoryInfo 
"FullName","Name" 
"C:\Windows","Windows" 

PS C:\> Import-Csv -Path "C:\myfolder\test.csv" 

FullName Name 
-------- ---- 
C:\Windows Windows 

PS C:\> (Import-Csv -Path "C:\myfolder\test.csv").fullname 
C:\Windows 

編輯:

這可能依賴於CSV的含量(其中沒有設置)。但是,如果您只是更改參數類型,那麼您的作業示例可能會有效。像這樣:

$contacts1 = Import-Csv "C:\temp\gal\gal1.csv" 
     Start-Job -Name Loop1 -ScriptBlock { 
      param([pscustomobject[]]$contacts1) 
      foreach ($c1 in $contacts1){ 
       $name = $c1.displayname 
       New-Item -Path "C:\Temp\GAL" -Name "$name" -ItemType "file" 
      } 
     } -ArgumentList (,$contacts1) 
     Wait-Job -Name Loop1 | Receive-Job 
     Get-Job -Name Loop1 | Remove-Job 
+0

我不確定爲什麼這會降低投票率。評論會很好嗎?答案是它不起作用,因爲字符串被傳遞給作業。這是我在答案中試圖表達的內容。我需要csv的內容來提供一個完整的答案和一個工作示例。 –

+0

不知道誰低估了你,你的編輯完美謝謝! –