1

我有一堆单独的脚本来构建基于每周 Nessus 扫描的各种报告。在每个单独的脚本中,我执行以下操作:

Function Get-FileName($initialDirectory)
{
    [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null

    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    $OpenFileDialog.initialDirectory = $initialDirectory
    $OpenFileDialog.filter = "csv (*.csv)| *.csv"
    $OpenFileDialog.ShowDialog() | Out-Null
    $OpenFileDialog.FileName
}

Clear-Host

# Get the scan CSV
$inputData = Get-FileName "C:\users\$env.username\Downloads"
$data = Import-Csv $inputData 

从这里我在单个脚本中做任何必要的工作。我想将其设置为我一次抓取文件并在脚本之间传递 CSV 的位置:

$data = Import-Csv $inputData 

#Call Installed Software script
". .\Build Software List (Test).ps1 $data"

#Call Most Prolific Vulnerabilities
#This continues until I've called all scripts

我已经尝试了几种不同的方法来传递 CSV,但还没有奏效。有人可以告诉我我错过了什么吗?

谢谢!

4

2 回答 2

1

Build Software List (Test).ps1中,确保位置参数将接受输入:

param(
    [Parameter(Mandatory=$true,Position=0)]
    [psobject[]]$Data
)

# process items in $Data here

然后像这样调用它:

& '.\Build Software List (Test).ps1' $Data

如果删除文件名中的空格,则可以取消调用运算符 ( &) 和引号:

.\Build-SoftwareList.ps1 $Data
于 2016-08-18T17:55:57.227 回答
0

我不认为你想在这里点源。

替换这一行:

#Call Installed Software script
". .\Build Software List (Test).ps1 $data"

和:

#Call Installed Software script
&  ".\Build Software List (Test).ps1" $data

这告诉 powershell 使用参数执行脚本,而不是将其作为当前运行脚本的一部分导入。

但是,即使您这样做了,它也会尝试将数据添加到参数列表中。由于$data是一个对象,而不是文件名,您可能希望使用管道来代替:

$data | & ".\Build Software List (Test).ps1"
于 2016-08-18T17:56:53.563 回答