如何修改此Powershell代码,以便超链接也适用于子目录中的HTML文件?

时间:2013-07-09 13:54:09

标签: html powershell hyperlink

现有代码扫描IIS root及其子目录中的.htm文件,并生成新的.htm文件,该文件仅具有指向根目录中.htm文件的功能超链接。根子目录中.htm文件的超链接无法正常运行,因为它没有超链接中包含的子文件夹路径。 我想修改我现有的代码,以便子文件夹中.htm文件的超链接也可以。

Get-ChildItem "c:\inetpub\wwwroot" -Recurse -Force |
  ConvertTo-Html -Fragment Name, Name, LastWriteTime `
    -PreContent '<html><head><title>Test</title></head><body>' `
    -PostContent '</body></html>' |
  % { $_ -replace '<th>.*</th>','<th>Files</th>' `
         -replace '<td>(.*?)</td><td>(.*?)</td><td>(.*?)</td>',
                  '<td><a href="$1">$2</a> $3</td>'

  } | Set-Content "c:\inetpub\wwwroot\index.htm"

enter image description here

1 个答案:

答案 0 :(得分:2)

由于你需要在URL中交换basedir(注意:这是重要的详细信息,你不应该从你的问题中省略这些内容),这样的事情应该有效:

$basedir = 'c:\inetpub\wwwroot'
$exp     = [regex]::Escape($basedir)
$server  = 'http://172.16.x.x'

Get-ChildItem $basedir -Recurse -Force |
  select Name, LastWriteTime, 
    @{n="URL";e={$_.FullName -replace $exp, $server -replace '\\', '/'}} |
  ConvertTo-Html -Fragment URL, Name, LastWriteTime `
    -PreContent '<html><head><title>Test</title></head><body>' `
    -PostContent '</body></html>' |
  % { $_ -replace '<th>.*</th>','<th>Files</th>' `
         -replace '<td>(.*?)</td><td>(.*?)</td><td>(.*?)</td>',
                  '<td><a href="$1">$2</a> $3</td>'
  } | Set-Content "c:\inetpub\wwwroot\index.htm"

其他select指令会将FullName转换为URL形式的新属性http://172.16.x.x/path/to/file。然后ConvertTo-Html会将此新属性以及传递的属性NameLastWriteTime转换为HTML。