在多个 PowerShell 脚本之间传递 CSV
Passing a CSV between multiple PowerShell scripts
我有一堆单独的脚本来根据每周的 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,但 none 仍然有效。有人能告诉我我遗漏了什么吗?
谢谢!
在 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
我认为您不想在此处使用点源代码。
替换此行:
#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"
我有一堆单独的脚本来根据每周的 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,但 none 仍然有效。有人能告诉我我遗漏了什么吗?
谢谢!
在 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
我认为您不想在此处使用点源代码。
替换此行:
#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"