具有脚本块的PowerShell Start-Job,该脚本块使用参数调用另一个脚本

时间:2018-09-07 18:52:37

标签: powershell

我正在使用Nmap-Scan.ps1脚本,并使用另一个脚本来调用它。 nmap-scan脚本只是Nmap.exe程序的包装。

我需要做的是提供设备列表(通过IP或DNS),运行NMAP扫描,并将每个设备的结果放入各自的文件中。

直接运行nmap-scan.ps1可以按预期工作:

.\Nmap-Scan.PS1 "localhost" -Arguments "-sS -sU -Pn -v" -OutDir "C:\Scripts\PowerShell\Get-NMAPData\Test" -Location "C:\Program Files (x86)\nmap\nmap.exe"

然后在预期的OutDir中获得“ localhost.xml”文件。

但是,当我运行以下代码时,PowerShell显示它正在启动作业,但没有得到任何生成的XML文件。因此,我必须做错了什么,或者“开始作业”没有写出文件的权限?我不确定这两种方式,我现在仍处于困境。我将不胜感激。

$MaxThreads = 2
$ServerList = Get-Content -Path "serverlist.txt"

foreach($server in $ServerList) {
    #Create hashtable with parameters and their values
    $Arg = @{
        InputObject=$server;
        Arguments="-sS -sU -Pn -v";
        OutDir="C:\Scripts\PowerShell\Get-NMAPData\Test"
    }
    Start-Job -ScriptBlock{PARAM($Arg); & C:\Scripts\PowerShell\Get-NMAPData\Nmap-Scan.PS1 @Arg} -ArgumentList $Arg

    while (@(Get-Job | Where-Object {$_.State -eq "Running"}).Count -ge $MaxThreads){
        Write-Verbose "Waiting for open thread...($MaxThreads Maximum)"
        Start-Sleep 3
    }
}

foreach($job in Get-Job){
    Receive-Job -Job $job -OutVariable temp
    Write-Host($temp)
}

作业输出示例:

StartTime  : 9/7/2018 2:33:31 PM
OutFile    : C:\Scripts\PowerShell\Get-NMAPData\Test\localhost.xml
Arguments  : "-sS -sU -Pn -v"
Duration   : 00:00:01.0990367
Hash       : 
Target     : localhost
FinishTime : 9/7/2018 2:33:33 PM
RunspaceId : c68a80f5-198a-4af5-ac0d-c28667b3305c

@{StartTime=9/7/2018 2:33:31 PM; OutFile=C:\Scripts\PowerShell\Get-NMAPData\Test\localhost.xml; Arguments="-sS -sU -Pn -v"; Duration=00:00:01.0990367; Hash=; Target=localhost; FinishTime=9/7/2018 2:33:33 PM; PSComputerName=localhost; RunspaceId=c68a80f5-198a-4af5-ac0d-c28667b3305c; PSShowComputerName=False}

0 个答案:

没有答案