我正在尝试将powershell脚本写入
特别是,我正在努力转换为字符串类型格式 - 这是最好的方法。 非常感谢。
脚本1:
$csvPath = 'C:\Temp\Scripts\trial_csv.csv'
#Get the header
$header = Get-Content $csvPath -TotalCount 1
$IntermediateOutput = "'C:\Temp\Scripts\output'"
$scriptPath = 'C:\Temp\Scripts\Temp.ps1'
#Get the data
Get-Content $csvPath |
Select -Skip 1 |
ForEach-Object {
$argumentList = @()
$argumentList += ("-Header", $header)
$argumentList += ("-row", $row)
$argumentList += ("-IntermediateOutput", $IntermediateOutput)
$argumentList += ("-index", $i )
Invoke-Expression "& `"$scriptPath`" $argumentList"
}
脚本2:
从脚本1接收输入:
Param(
[Parameter(Mandatory=$True)]
[String]$header, #the header of csv file
[Parameter(Mandatory=$True)]
[String]$row, #the row of the file, like "1,0,2,.."
[Parameter(Mandatory=$True)]
[String]$IntermediateOutput, #intermediate directory
[Parameter(Mandatory=$True)]
[String]$index #index
)
Do something later (todo)
$a = $header
$b = $row
$c = $IntermediateOutput
$d=$index
答案 0 :(得分:1)
您可以直接从新创建的$csv
对象获取标头。在下面的示例中,$header
成为字符串数组:
$header = ($csv[0].psobject.Properties |
where {$_.MemberType -eq "NoteProperty" }).Name
另一种方法是使用Get-Content
cmdlet读取第一行并将其拆分为,
字符:
$header = (Get-Content $csvPath -TotalCount 1) -split ","
在您的代码中,$header
等于null,因为$header = Write-Host $rows[1]
未分配变量,它只执行操作。
答案 1 :(得分:1)
如果未引用csv中的数据,您应该可以直接从.csv文件中使用它,而无需执行Import-CSV:
$csvPath = 'C:\Temp\Scripts\trial_csv.csv'
$IntermediateOutput = "'C:\Temp\Scripts\output'"
$Index = 1
#Get the header
$header = Get-Content $csvPath -TotalCount 1
#Get the data
Get-Content $csvPath |
Select -Skip 1 |
ForEach-Object {
$argumentlist = "-Header '{0}' -row '{1}' -IntermediateOutput {2} -Index {3}" -f $header,$_,$IntermediateOutput,$Index
#Execute script with argument list
$Index++
}