Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Powershell中处理作业_Powershell_Jobs - Fatal编程技术网

在Powershell中处理作业

在Powershell中处理作业,powershell,jobs,Powershell,Jobs,上面是用CSV内部创建的名称创建一个文件,但接下来的三个循环只是尝试创建相同的名称。但是如果我注释掉所有与作业相关的内容,如下所示,循环本身成功地创建了四个名称正确的文件 $contacts1 = Import-Csv "C:\temp\gal\gal1.csv" Start-Job -Name Loop1 -ScriptBlock { param([string[]]$contacts1) foreach ($c1 in $cont

上面是用CSV内部创建的名称创建一个文件,但接下来的三个循环只是尝试创建相同的名称。但是如果我注释掉所有与作业相关的内容,如下所示,循环本身成功地创建了四个名称正确的文件

 $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

在第一个示例中,使用字符串(将字符串数组传递给作业)。字符串没有displayname属性。第一个块可能会在strict模式下引发错误(将StrictMode-Version设置为“latest”)。您必须传递一个对象数组(具有displayname属性)才能使其工作

在第二个步骤中,您将使用导入CSV生成的对象。导入Csv的返回值取决于文件的内容。如果使用导出Csv,则该文件可能包含“#TYPE”行和标题行。其中一个标题可能是“displayname”

例如:

$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的内容(未提供)。但是,如果您只更改参数类型,您的作业示例可能会起作用。像这样:

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

在第一个示例中,使用字符串(将字符串数组传递给作业)。字符串没有displayname属性。第一个块可能会在strict模式下引发错误(将StrictMode-Version设置为“latest”)。您必须传递一个对象数组(具有displayname属性)才能使其工作

在第二个步骤中,您将使用导入CSV生成的对象。导入Csv的返回值取决于文件的内容。如果使用导出Csv,则该文件可能包含“#TYPE”行和标题行。其中一个标题可能是“displayname”

例如:

$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的内容(未提供)。但是,如果您只更改参数类型,您的作业示例可能会起作用。像这样:

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的内容也会有帮助。你的问题是什么?开始作业多次尝试创建同一个文件,其中常规循环工作正常吗?看到CSV的内容也会有帮助。我不知道为什么会被否决。一个评论会很好吗?答案是它不起作用,因为字符串被传递给作业。这就是我在回答中试图表达的。我需要csv的内容,以提供一个完整的答案与工作的例子。不知道谁否决了你,你的编辑工作完美谢谢!我不知道为什么这会被否决。一个评论会很好吗?答案是它不起作用,因为字符串被传递给作业。这就是我在回答中试图表达的。我需要csv的内容,以提供一个完整的答案与工作的例子。不知道谁否决了你,你的编辑工作完美谢谢!