我有一些非常简单的代码,旨在将目录中的每个文件转换为HTML。我的问题是,虽然为每个文件成功创建了一个作业,但是脚本块永远不会运行。
$convert = {
Param(
[parameter(ValueFromPipeline=$true)]
$file
)
$content = Get-Content -Path $file.FullName
$outDir= New-Item -Type dir -Path $file.FullName + "\HTMLFiles"
$outFile = $outDir + $file.Name + ".html"
foreach($line in $content) {
#move the content into a variable and add some html tags
$html = $html + '<tr>' + $line + '</tr>' +'<br>'
}
#convert the variable to .html and save the result as a file
ConvertTo-Html -Head $style -Body $html | Out-File -FilePath $outFile -Encoding "ASCII"
#empty the variable
$html = " "
}
Function main
{
Param(
[parameter(Position=0, Mandatory=$true, ValueFromPipeLine=$true)]
$target = $args[0]
)
#stores some html styling code
$path = $pwd.Path + "\style.txt"
$style = Get-Content -Path $path
#collect all files in the dirctory
$files = Get-ChildItem -Path $target -Recurse
foreach($file in $files) {
#for each file in the collection start a job which runs the given scriptblock (scriptblock is not working)
Start-Job -Name $file.name -ScriptBlock $convert -ArgumentList $file
}
#clean-up
Write-Host "Finished jobs"
Wait-Job *
Remove-Job -State Completed
}
main($args[0])
我对powershell很新,并且已经解决了解决这个问题的方法,但似乎无法解决这个问题。
答案 0 :(得分:-1)
function name (argument1, argument2) {}
传递的。我也从函数调用的括号中删除了,因为在Powershell中你可以调用以下函数:
function "argument1" "argument2"
$convert = {
$content = Get-Content -Path $file.FullName
$outDir= New-Item -Type dir -Path $file.FullName + "\HTMLFiles"
$outFile = $outDir + $file.Name + ".html"
foreach($line in $content) {
#move the content into a variable and add some html tags
$html = $html + '<tr>' + $line + '</tr>' +'<br>'
}
#convert the variable to .html and save the result as a file
ConvertTo-Html -Head $style -Body $html | Out-File -FilePath $outFile -Encoding "ASCII"
#empty the variable
$html = " "
}
Function main ($args)
{
$target = $args
#stores some html styling code
$path = $pwd.Path + "\style.txt"
$style = Get-Content -Path $path
#collect all files in the dirctory
$files = Get-ChildItem -Path $target -Recurse
foreach($file in $files) {
#for each file in the collection start a job which runs the given scriptblock (scriptblock is not working)
Start-Job -Name $file.name -ScriptBlock $convert -ArgumentList $file
}
#clean-up
Write-Output "Finished jobs"
Wait-Job *
Remove-Job -State Completed
}
main $args[0]